我想将SOAP服务发布为REST(json)API。我想要公开的服务操作在WSDL / XSD定义中有一个xml序列元素:
<xs:complexType name="hellolist">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="hellolistResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
我不知道如何使用PayloadFactory将JSON数组映射到xml序列。我发现的所有示例只处理简单的json和SOAP消息,例如sample WSO2 transformation。 我想改变这个json消息:
{"hellolist":{"name":["Peter","Mary","Ann","James"]}}
给这条肥皂消息:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:dum="http://dummyservice2.com/">
<soapenv:Header/>
<soapenv:Body>
<dum:hellolist>
<name>Peter</name>
<name>Mary</name>
<name>Ann</name>
<name>James</name>
</dum:hellolist>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:0)
您可以使用有效负载工厂介体执行此操作。它可用于转换或替换客户端和后端服务器之间的消息内容。对于您的方案,您可以配置代理服务,如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="json_to_xml_factory"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<payloadFactory media-type="xml">
<format>
<dum:hellolist xmlns:dum="http://dummyservice2.com/">
<name xmlns="">$1</name>
<name xmlns="">$2</name>
<name xmlns="">$3</name>
<name xmlns="">$4</name>
</dum:hellolist>
</format>
<args>
<arg evaluator="json" expression="$.hellolist.name[0]"/>
<arg evaluator="json" expression="$.hellolist.name[1]"/>
<arg evaluator="json" expression="$.hellolist.name[2]"/>
<arg evaluator="json" expression="$.hellolist.name[3]"/>
</args>
</payloadFactory>
<log level="full"/>
</inSequence>
<outSequence/>
</target>
<description/>
</proxy>
有关详细信息,请参阅以下链接。
https://docs.wso2.com/display/ESB490/PayloadFactory+Mediator http://christinetechtips.blogspot.com/2014/02/payload-factory-mediators-to-work-with.html http://madhukaudantha.blogspot.com/2013/05/wso2-esb-payload-mediator-tutorial.html
答案 1 :(得分:0)
如果您有非静态有效负载(您的情况),则payload-factory-mediator将不是解决方案(仅适用于静态有效负载)。您遇到问题的最佳方法是在WSO2 ESB中使用xslt mediator + enrich mediator。您可以试用此示例https://docs.wso2.com/display/ESB481/Sample+440%3A+Converting+JSON+to+XML+Using+XSLT
或者你可以使用脚本调解器,如本例中所述。https://docs.wso2.com/display/ESB481/Sample+350%3A+Introduction+to+the+Script+Mediator+Using+JavaScript。然而,这不是最受欢迎的方式。
我已经使用WSO2 ESB完成了您的转换,如上所述。但我不知道这些中介工具是否也可用于WSO2 APIM(当我搜索你的问题时,我找不到任何例子)。
答案 2 :(得分:0)
尝试下面提到的步骤
使用断言将带有断言的SoapUI中的SOAP测试服务转换为带有断言的JSON服务的步骤
现在您可以看到新打开的项目中的所有服务都将采用JSON格式,并且所有断言都可以在以前的SOAP调用中使用。
还引用link,它有助于完全转换请求,包括断言
如果没有用,请回复