我们正在尝试在WSO2 ESB上实现基本的SOAP-to-REST代理服务。我们的第三方REST服务以下列格式接受请求:
http://<MYURL>/simpleQuery/16783484?oslc.select=value1
问题是操作名称只有数字格式 - 在我们的例子中是“16783484”。 payloadFactory介体不允许具有&lt; 16783484&gt;作为XML元素,因为XML规范限制了仅数字元素名称。
<proxy xmlns="http://ws.apache.org/ns/synapse" name="CQProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
<target>
<inSequence>
<payloadFactory>
<format>
<16783484>
<oslc.select>$1</oslc.select>
</16783484>
</format>
<args>
<arg value="myvalue1"/>
</args>
</payloadFactory>
<send>
<endpoint>
<address uri="http://<MYURL>/simpleQuery" format="get"/>
</endpoint>
</send>
<drop/>
</inSequence>
<outSequence>
<log level="full"/>
<send/>
</outSequence>
</target>
</proxy>
如何克服这个问题?
感谢您的帮助!
答案 0 :(得分:2)
WSO2支持团队建议采用以下解决方案。谢谢Sandapa!
在这种情况下,您必须将端点格式设置为“rest”。如果是GET请求,则必须将'HTTP_METHOD'设置为GET。请参考下面给出的例子。
示例:
<proxy xmlns="http://ws.apache.org/ns/synapse" name="CQProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
<target>
<inSequence>
<property name="REST_URL_POSTFIX" value="/getSimpleQuote?symbol=IBM" scope="axis2" type="STRING"/>
<property name="HTTP_METHOD" value="GET" scope="axis2" type="STRING"/>
<send>
<endpoint>
<address uri="http://localhost:9000/services/SimpleStockQuoteService/" format="rest"/>
</endpoint>
</send>
<drop/>
</inSequence>
<outSequence>
<log level="full"/>
<send/>
</outSequence>
</target>
<description></description>
</proxy>
答案 1 :(得分:0)
虽然这个评论不会建议你一个解决方案,但我可以说这是一个坏主意:-)你可以尝试使用XSLT而不是PayloadFactory进行转换,但这又可能会扼杀XML解析器。问题是WSO2产品使用的许多开源项目/库,你可能碰到其他地方将遵守规范。从长远来看,当您与其他外部工具/系统集成时,遵守规范将减少您的麻烦。是否可以更改您的休息服务,以便服务名称至少在前面有下划线?