В wso2 esb как получить однозначное (целое) значение - PullRequest
0 голосов
/ 20 мая 2018

В wso2 ESB после вызова конечной точки я получаю ответ в виде числа (например: 78) с заголовком application / json , если без обработки ответа, если я отправляю в следующей последовательности, он работает нормально, я 'Я получу такой же ответ.Но если я добавлю какие-либо посредники для обработки между ними, то возникнут исключения, такие как Не удалось сохранить полезную нагрузку JSON.Обнаружен неверный поток ввода .Одна строка или число недопустимы в некоторых случаях. Таким образом, это может вызвать исключение, но эта ошибка устранена в wso2 EI 6.2.

Так что теперь я могу обработать ответ, но если я использую посредник сценария, чтобы получить это значение, он показывает {}.Если я использую json-eval ($.), То я также не могу получить значение, также с xpath я не могу получить.

Итак, как получить этот ответ (значение в номере) для дальнейшей обработки в wso2 ei, используя посредник сценариев или путь json.

1 Ответ

0 голосов
/ 21 мая 2018

Если вы уверены, что ответ содержит только число с заголовком типа содержимого с application / json.вы можете передать значение в свойство, как показано ниже.

<property name="RESPONSE_NUMBER" expression="//jsonValue" scope="default" type="INTEGER"/>

Когда вам нужно это значение где-то еще в потоке передачи, вы можете получить значение из свойства (в данном случае RESPONSE_NUMBER), как показано ниже.

$ctx:RESPONSE_NUMBER

Вот пример API, который демонстрирует, как вы можете взять значение ответа и использовать его в процессе передачи.

<api xmlns="http://ws.apache.org/ns/synapse" name="SampleAPI" context="/getNumber">
   <resource methods="GET">
      <inSequence>
         <send>
            <endpoint>
               <http method="GET" uri-template="http://www.mocky.io/v2/5b02cc2c3000006600cee384"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <property name="RESPONSE_NUMBER" expression="//jsonValue" scope="default" type="INTEGER"/>
         <payloadFactory media-type="json">
            <format>{"Id": $1}</format>
            <args>
               <arg evaluator="xml" expression="$ctx:RESPONSE_NUMBER"/>
            </args>
         </payloadFactory>
         <send/>
      </outSequence>
   </resource>
</api>

Вы можете вызвать API с помощью следующей команды curl:

curl -v http://localhost:8280/getNumber
...