Nano Hash - криптовалюты, майнинг, программирование

Преобразование ответа Mule HttpRequest 'GET'

Я делаю вызов httpRequest GET в Mule для своего собственного REST API и хотел бы иметь возможность преобразовать результат в JSONArray. Служба, которую я вызываю, настроена на возврат JSON, но при обработке полезной нагрузки в муле она рассматривается как BufferInputString.

Вот код:

<http:request config-ref="HTTP_Request_Configuration" path="muletest" method="GET" metadata:id="ccb5da53-5418-9753-8399-bb6f8a792f0a" doc:name="HTTP">
        <http:request-builder>
            <http:query-param paramName="firstname" value="#[payload.firstname]"/>
            <http:query-param paramName="lastname" value="#[payload.lastname]"/>
        </http:request-builder>
</http:request>
<set-variable variableName="existingAppointment" value="#[payload]" encoding="UTF-8" mimeType="text/json" metadata:id="40cc3baf-834e-4a82-86db-2779fb736565" doc:name="Get Result"/>
<logger message="GET RESULT: #[payload.get(0)]" level="INFO" metadata:id="5b634d23-af82-4160-8351-4360aa3b3edf" doc:name="Log Get Result" />

Всякий раз, когда я пытаюсь вызвать #[payload.get(0)] для регистрации результата jsonArray, который я получаю от вызова, у меня есть это исключение:

ERROR 2016-02-23 16:23:00,673 [[omdcrv3].omdcrv3Flow.stage1.02] org.mule.exception.CatchMessagingExceptionStrategy: 

Message               : Execution of the expression "payload.get(0)" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: BufferInputStream
Type                  : org.mule.api.MessagingException
Code                  : MULE_ERROR--2
Payload               : org.glassfish.grizzly.utils.BufferInputStream@5d838090
JavaDoc               : http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html
********************************************************************************
Exception stack is:
1. [Error: unable to resolve method: org.glassfish.grizzly.utils.BufferInputStream.get(java.lang.Integer) [arglength=1]]
[Near : {... payload.get(0) ....}]

что, очевидно, означает, что он пытается обработать объект типа BufferInputStream, но я не понимаю, как мне преобразовать этот тип в тип JSON...

Я уверен, что делаю что-то не так (я новичок в муле), но не могу понять, что...

**** ОТРЕДАКТИРОВАНО, ЧТОБЫ ПОКАЗАТЬ МОЕ РЕШЕНИЕ ****

Вот мое РЕШЕНИЕ

23.02.2016

Ответы:


1

Привет, вы можете использовать Dataweave (Transform Message) после http-запроса

%dw 1.0
%output application/json
---
payload[0]

Обратите внимание, что вы можете заменить свой вывод на

%output application/java

Полученная полезная нагрузка будет экземпляром LinkedHashMap.

23.02.2016
  • Я принял этот ответ, потому что он привел меня к решению. Я использовал Dtaweave Transformer для преобразования из JSONArray в Map и установил вывод в application/java, и он работает. 24.02.2016

  • 2

    Несмотря на то, что тип объекта — BufferInputStream, если вы поместите #[payload] в регистратор (или Evaluate Mule Expression, Ctrl + Shift + I при отладке), вы получите JSON в виде строки.

    Для дальнейшей оценки введите #[json:] в логгер, вы также получите JSON. например.:

    {
      "flights": [
        {
          "code": "ER38sd",
          "origin": "MUA",
          "destination": "SFO"
        },
        {
          "code": "ER39rk",
          "origin": "MUA",
          "destination": "SFO"
        }
      ]
    }
    

    Затем измените выражение на #[json:flights], вы получите ArrayList (массив JSON в форме строки)

    24.02.2016

    3

    Вы должны преобразовать HttpResponse из JSON в Map, чтобы вы могли получить к нему доступ в выражении мула:

     <json:json-to-object-transformer returnClass="java.util.HashMap" /> 
     <logger message="GET RESULT: #[payload.get(0)]" level="INFO" doc:name="Log Get Result" />
    
    23.02.2016

    4

    Используйте преобразователь «Объект в JSON». Это должно сработать.

    24.02.2016
  • Я думаю, что вместо этого следует использовать json:json-to-object-transformer. 24.02.2016
  • Извините, это то, что я имею в виду - входящая полезная нагрузка - это JSON, поэтому это должен быть преобразователь JSON в объект. Спасибо @sulthonyh 26.02.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..