Как преобразовать ответ SOAP со значениями xsi в json в WSO2esb

json soap wso2 wso2esb axis2

1219 просмотра

2 ответа

543 Репутация автора

Я использую версию wso2 esb 4.8.1 для SOAP, чтобы преобразовать остальные функции как API. У меня есть запрос мыла со значениями xsi. После того, как я сгенерирую правильный запрос мыла с посредником сценария, я получу ожидаемый ответ. Но у меня есть проблема с ответом. Потому что мне нужно преобразовать ответ мыла в json. Когда я попытался выполнить следующую последовательность, я не получаю правильный ответ json с axis2. Как я могу преобразовать этот ответ мыла в JSON правильно?

Это мыльный ответ.

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"       xmlns:xsd="http://www.w3.org/2001/XMLSchema"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:easyDownloadResponse xmlns:ns1="http://usermanage.ivas.huawei.com" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<easyDownloadReturn href="#id0"/>
</ns1:easyDownloadResponse>
<multiRef xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://response.usermanage.ivas.huawei.com" id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:EasyDownloadResp">
<eventClassName xsi:type="xsd:string" xsi:nil="true"/>
<failedResources xsi:type="soapenc:Array" xsi:nil="true"/>
<operationID xsi:type="xsd:long">0</operationID>
<resultCode xsi:type="xsd:int">0</resultCode>
<resultInfo xsi:type="xsd:string" xsi:nil="true"/>
<returnCode xsi:type="xsd:string">000000</returnCode>
<toneTransactionID xsi:type="soapenc:Array" xsi:nil="true"/>
<transactionID xsi:type="xsd:string" xsi:nil="true"/>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>

Это ответ, который я получаю

{"easyDownloadResponse":{"@encodingStyle":"http://schemas.xmlsoap.org/soap/encoding/","easyDownloadReturn":{"@href":"#id0"}}}

Это моя последовательность

<outSequence xmlns="http://ws.apache.org/ns/synapse">
   <property name="messageType" value="application/json" scope="axis2" type="STRING"></property>
   <send></send>
</outSequence> 

Все ваши ответы приветствуются.

Автор: Anushka Ekanayake Источник Размещён: 18.07.2016 09:16

Ответы (2)


0 плюса

1112 Репутация автора

Вы можете попробовать посредник полезной нагрузки, чтобы получить точный формат JSON 1 . Но все же, возможно, вам придется раскомментировать следующие строки в

$ ESB_HOME / хранилище / CONF / axis2 / axis2.xml

<!--messageFormatter contentType="application/json"
class="org.apache.axis2.json.JSONStreamFormatter"/-->

<!--messageBuilder contentType="application/json"
class="org.apache.axis2.json.JSONStreamBuilder"/-->

По умолчанию сообщения JSON преобразуются в XML при получении посредником PayloadFactor. Однако если вы включите средство форматирования и компоновки потока JSON, входящие сообщения JSON останутся в формате JSON.

А также вы можете снова использовать посредник сценариев (Insequence), чтобы изменить свой ответ json. Посмотрите этот образец

Автор: Dilshani Subasinghe Размещён: 18.07.2016 11:20

0 плюса

543 Репутация автора

Решение

Наконец я нашел решение проблемы. В обычном случае мы используем

<property name="messageType" value="application/json" scope="axis2" type="STRING"></property>

Но это свойство axis2 не может преобразовать сложный ответ мыла в json, например, с помощью xsi. Для этого нужно использовать следующее свойство axis2. Затем он преобразует весь ответ мыла в Json, как мы и ожидали.

 <property name="messageType" value="application/json/badgerfish" scope="axis2" type="STRING"></property>

Это мой полный результат.

<outSequence xmlns="http://ws.apache.org/ns/synapse">
   <property name="messageType" value="application/json/badgerfish" scope="axis2" type="STRING"></property>
   <send></send>
</outSequence>
Автор: Anushka Ekanayake Размещён: 22.07.2016 05:39
Вопросы из категории :
32x32