Wso2 如何转换(JSON-toXML)请求和响应(XML到JSON)以调用外部Soap服务
我是wso2的新手。。我的要求是 1) 我想将传入的JSON请求转换为XML格式 2) 将该XML请求发送到外部SOAP服务 3) 响应将以XML形式获取,并需要将其转换为JSON格式 有人做过吗?如果是的话,你能分享一下你是怎么做的吗 我有以下代理服务配置Wso2 如何转换(JSON-toXML)请求和响应(XML到JSON)以调用外部Soap服务,wso2,wso2esb,wso2carbon,Wso2,Wso2esb,Wso2carbon,我是wso2的新手。。我的要求是 1) 我想将传入的JSON请求转换为XML格式 2) 将该XML请求发送到外部SOAP服务 3) 响应将以XML形式获取,并需要将其转换为JSON格式 有人做过吗?如果是的话,你能分享一下你是怎么做的吗 我有以下代理服务配置 `<?xml version="1.0" encoding="UTF-8"?> <proxy xmlns="http://ws.apache.org/ns/synapse" name="CelsiusToFa
`<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="CelsiusToFahrenheitService"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="messageType" value="text/xml" scope="axis2"/>
<property name="Proxy-Authorization"
expression="fn:concat('Basic', base64Encode('INDIA\username:pwd'))"
scope="transport"/>
<property name="POST_TO_URI" value="true" scope="axis2"/>
<property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
<header name="Action"
value="http://www.w3schools.com/webservices/CelsiusToFahrenheit"/>
<send>
<endpoint>
<address uri="http://www.w3schools.com/webservices/tempconvert.asmx"
format="soap11"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<property name="messageType" value="text/xml" scope="axis2"/>
<send/>
</outSequence>
</target>
<description/>
</proxy>`
`
)
我已经这样做了我的配置(不知道它是否正确)
var cel=mc.getPayloadJSON().CelsiusToFahrenheit.cercifies.toString();
mc.setPayloadXML(
CelsiusToFahrenheit xmlns=”http://www.w3schools.com/webservices/"
摄氏度{cel}/摄氏度
/CelsiusToFahrenheit);
但是我得到了这样的例外
`[2014-03-20 18:19:02,391] INFO - LogMediator To: /services/JsonToXMLProxy.JsonToXMLProxyHttpEndpoint, MessageID: urn:uuid:a2eeeb26-94e1-4ed1-a3f9-79f1d1461821, Direction: request, Envelope: <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><CelsiusToFahrenheit xmlns="http://www.w3schools.com/webservices/"><Celsius>20</Celsius></CelsiusToFahrenheit></soapenv:Body></soapenv:Envelope>
[2014-03-20 18:19:03,130] WARN - ClientHandler Received an unexpected response - of content type : text/html and status code : 411 with reason : Length Required For : 172.26.40.214:8080 For Request : Axis2Request [Message ID : urn:uuid:39d47344-f74c-4ec5-855b-5eb90e178b6d] [Status Completed : true] [Status SendingCompleted : true]
[2014-03-20 18:19:04,133] INFO - BuilderUtil OMException in getSOAPBuilder
org.apache.axiom.om.OMException: SOAP message MUST NOT contain a Document Type Declaration(DTD)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createDTD(StAXSOAPModelBuilder.java:462)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:282)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:204)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:154)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:140)
at org.apache.axis2.builder.BuilderUtil.getSOAPBuilder(BuilderUtil.java:659)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:198)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:146)
at org.apache.synapse.transport.nhttp.ClientWorker.run(ClientWorker.java:253)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
[2014-03-20 18:19:04,137] INFO - BuilderUtil Remaining input stream :[]
[2014-03-20 18:19:04,137] WARN - ClientWorker Unexpected response received. HTTP response code : 411 HTTP status : Length Required exception : SOAP message MUST NOT contain a Document Type Declaration(DTD)
[2014-03-20 18:19:04,153] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:39d47344-f74c-4ec5-855b-5eb90e178b6d, Direction: response, Envelope: <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault><faultcode>411</faultcode><faultstring>Unexpected response received. HTTP response code : 411 HTTP status : Length Required exception : SOAP message MUST NOT contain a Document Type Declaration(DTD)</faultstring><detail>Unexpected response received. HTTP response code : 411 HTTP status : Length Required exception : SOAP message MUST NOT contain a Document Type Declaration(DTD)</detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>`
`[2014-03-20 18:19:02391]INFO-LogMediator To:/services/JsonToXMLProxy.JsonToXMLProxyHttpEndpoint,MessageID:urn:uuid:a2eeeb26-94e1-4ed1-a3f9-79f1d1461821,方向:请求,信封:20
[2014-03-20 18:19:03130]警告-ClientHandler收到意外响应-内容类型:text/html,状态代码:411,原因:请求所需长度:172.26.40.214:8080请求:Axis2Request[消息ID:urn:uuid:39d47344-f74c-4ec5-855b-5eb90e178b6d][状态完成:true][状态发送完成:true]
[2014-03-20 18:19:04133]信息-直到getSOAPBuilder中的OmeException
org.apache.axiom.om.OmeException:SOAP消息不能包含文档类型声明(DTD)
位于org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createDTD(StAXSOAPModelBuilder.java:462)
位于org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:282)
位于org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:204)
位于org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder(StAXSOAPModelBuilder.java:154)
位于org.apache.axiom.soap.impl.builder.statxsoapmodelbuilder(statxsoapmodelbuilder.java:140)
位于org.apache.axis2.builder.BuilderUtil.getSOAPBuilder(BuilderUtil.java:659)
位于org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:198)
在org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:146)上
位于org.apache.synapse.transport.nhttp.ClientWorker.run(ClientWorker.java:253)
位于org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
运行(Thread.java:722)
[2014-03-20 18:19:04137]信息-构建器直到剩余的输入流:[]
[2014-03-20 18:19:04137]警告-收到客户端工作人员意外响应。HTTP响应代码:411 HTTP状态:所需长度异常:SOAP消息不能包含文档类型声明(DTD)
[2014-03-20 18:19:04153]信息-日志调解人收件人:http://www.w3.org/2005/08/addressing/anonymous,WSAction:,SOAPAction:,MessageID:urn:uuid:39d47344-f74c-4ec5-855b-5eb90e178b6d,方向:响应,信封:411收到预期响应。HTTP响应代码:411 HTTP状态:所需长度异常:SOAP消息不能包含收到的文档类型声明(DTD)意外响应。HTTP响应代码:411 HTTP状态:所需长度异常:SOAP消息不能包含文档类型声明(DTD)`
请帮我解决这个问题
提前感谢。您可以使用此示例使用de payloadfactory mediator来构建消息,它在您的场景中适用于我:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="JsonToXMLProxy"
transports="https http local"
startOnLoad="true"
trace="disable">
<description/>
<target>
<endpoint>
<address uri="http://www.w3schools.com/webservices/tempconvert.asmx" format="soap11"/>
</endpoint>
<inSequence>
<log>
<property name="TEMPERATURA_ENTRADA" expression="json-eval($.celsius)"/>
</log>
<payloadFactory media-type="xml">
<format>
<web:CelsiusToFahrenheit xmlns:web="http://www.w3schools.com/webservices/">
<web:Celsius>$1</web:Celsius>
</web:CelsiusToFahrenheit>
</format>
<args>
<arg evaluator="json" expression="$.celsius"/>
</args>
</payloadFactory>
<header name="Action"
value="http://www.w3schools.com/webservices/CelsiusToFahrenheit"/>
</inSequence>
<outSequence>
<log>
<property xmlns:p="http://www.w3schools.com/webservices/"
name="TEMPERATURA_SALIDA"
expression="//p:CelsiusToFahrenheitResponse/p:CelsiusToFahrenheitResult"/>
</log>
<payloadFactory media-type="json">
<format>
"Temperatura" : {
"EnFahrenheit" : $1
}
</format>
<args>
<arg xmlns:p="http://www.w3schools.com/webservices/"
evaluator="xml"
expression="//p:CelsiusToFahrenheitResponse/p:CelsiusToFahrenheitResult"/>
</args>
</payloadFactory>
<property name="messageType" value="application/json" scope="axis2"/>
<send/>
</outSequence>
</target>
</proxy>
$1
“温度”:{
“华氏温度”:$1
}