WSO2ESB:json格式的从端点到有效负载中介的xml响应



是否有任何方法可以在payloadFactory中介中将数据服务端点xml响应转换为json?

这是我的源代码视图:

<resource methods="GET" uri-template="/get/supplier/{filterQuery}">
<inSequence>
<property name="operation" value="view" scope="default" type="STRING"/>
<log level="full" separator="|">
<property name="operation" expression="get-property('operation')"/>
<property name="step" value="request"/>
</log>
<property name="filterQuery" expression="get-property('uri.var.filterQuery')" scope="default" type="STRING"/>
<log level="full" separator="|">
<property name="filterQuery" expression="$ctx:filterQuery"/>
</log>
<callout serviceURL="http://...:8280/services/myService/" action="urn:getVendorsOperation">
<source type="envelope"/>
<target key="response"/>
</callout>
<log level="custom" separator="|">
<property name="MESSAGE" expression="$ctx:response"/>
</log>
<property name="res" expression="$ctx:response" scope="default" type="OM"/>
<log level="full" separator="|">
<property name="res" expression="get-property('res')"/>
</log>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<property name="RESPONSE" value="true" scope="default" type="STRING"/>
<property name="messageType" value="application/json" scope="axis2" type="STRING"/>
<property name="contentType" value="application/json" scope="transport" type="STRING"/> 
<payloadFactory media-type="json">
<format>{"vendorId": "$1","vendorName": "$2"}</format>
<args>
<arg evaluator="xml" expression="$body/entries/entry/vendorId"/>
</args>
</payloadFactory>
<log level="full" separator="|">
<property name="operation" expression="$ctx:operation"/>
<property name="step" value="response"/>
</log>
<respond/>
</inSequence>

系统日志中res的结果:

res = <entries xmlns="http://ws.wso2.org/dataservice/getVendorsQuery"><entry><vendorId>1111</vendorId><vendorName>vendor 1</vendorName></entry><entry><vendorId>2222</vendorId><vendorName>vendor 2</vendorName></entry></entries>|Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body/></soapenv:Envelope>

如何将这些xml数据获取到payloadFactory并将其输出为json?

<payloadFactory media-type="json">
<format>{"vendorId": "$1","vendorName": "$2"}</format>
<args>
<arg evaluator="xml" expression="$body/entries/entry/vendorId"/>
</args>
</payloadFactory>

以及如何将参数传递给数据服务?在我的情况下是filterQuery

提前谢谢。

试试这个解决方案:

<payloadFactory media-type="json">
<format>$1</format>
<args>
<arg evaluator="xml" expression="get-property('res')"/>
</args>
</payloadFactory>

最新更新