Wso2 如何转换(JSON-toXML)请求和响应(XML到JSON)以调用外部Soap服务

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

我是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="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
}