如何在 WSO2esb 中将带有 xsi 值的 SOAP 响应转换为 json
How to convert SOAP response with xsi values to json in WSO2esb
我正在使用 SOAP 的 wso2 esb 4.8.1 版本来休息转换 API。我有一个带有 xsi 值的 soap 请求。在我使用脚本调解器生成正确的 soap 请求后,嗯得到了预期的响应。但我的回应有问题。因为我需要将 soap 响应转换为 json。当我尝试按照序列 um 没有得到正确的 json 轴 2 响应时。我怎样才能正确地将这个 soap 响应转换为 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>
非常欢迎您的所有回答。
你可以试试payload mediator to get exact json format 1。但是您仍然可能需要取消注释
中的以下行
$ESB_HOME/repository/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 消息在被 PayloadFactor 中介接收时会转换为 XML。但是,如果启用 JSON 流格式器和构建器,传入的 JSON 消息将保留为 JSON 格式。
您也可以再次使用脚本调解器(在后续)修改您的 json 响应。参考 this sample
我终于找到了问题的解决方案。在正常情况下我们使用
<property name="messageType" value="application/json" scope="axis2" type="STRING"></property>
但是这个 axis2 属性 无法将复杂的 soap 响应转换为 json,例如 xsi。
为此需要使用以下 axis2 属性。然后它将整个 soap 响应转换为我们预期的 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>
我正在使用 SOAP 的 wso2 esb 4.8.1 版本来休息转换 API。我有一个带有 xsi 值的 soap 请求。在我使用脚本调解器生成正确的 soap 请求后,嗯得到了预期的响应。但我的回应有问题。因为我需要将 soap 响应转换为 json。当我尝试按照序列 um 没有得到正确的 json 轴 2 响应时。我怎样才能正确地将这个 soap 响应转换为 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>
非常欢迎您的所有回答。
你可以试试payload mediator to get exact json format 1。但是您仍然可能需要取消注释
中的以下行$ESB_HOME/repository/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 消息在被 PayloadFactor 中介接收时会转换为 XML。但是,如果启用 JSON 流格式器和构建器,传入的 JSON 消息将保留为 JSON 格式。
您也可以再次使用脚本调解器(在后续)修改您的 json 响应。参考 this sample
我终于找到了问题的解决方案。在正常情况下我们使用
<property name="messageType" value="application/json" scope="axis2" type="STRING"></property>
但是这个 axis2 属性 无法将复杂的 soap 响应转换为 json,例如 xsi。 为此需要使用以下 axis2 属性。然后它将整个 soap 响应转换为我们预期的 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>