我正在为我的公司开发WSO2 ESB POC,其中涉及通过ESB上的SOAP端点公开内部RESTful服务。我已经阅读了与SOAP-REST中介相关的所有主题和博客文章,但仍无法找到答案。 我的RESTful服务返回“application / rdf + xml”消息格式。这是我的序列:
<proxy xmlns="http://ws.apache.org/ns/synapse" name="CQProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
<target>
<inSequence>
<send>
<endpoint>
<address uri="http://<MYURL>/cqweb/oslc/repo/eraprototype/db/CQT_T/simpleQuery/16783484?oslc.select=dcterms:title,cq:CM_Label,dcterms:type,cq:Assigned_To,oslc_cm:status,cq:AutoDeployment,cq:SentToEADS_By&oslc.where=oslc:shortTitle=CQT_T00000131" format="get"/>
<property xmlns:ns="http://org.apache.synapse/xsd" name="Authorization" expression="fn:concat('Basic ', base64Encode('user:password'))" scope="transport"/>
<property name="OSLC-Core-Version" value="2.0" scope="transport"/>
<property name="Accept" value="application/rdf+xml" scope="transport"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<log level="full"/>
<send/>
</outSequence>
</target>
<publishWSDL key="gov:/services/cqproxy/CQProxy.wsdl">
<resource location="CQProxy.xsd" key="gov:/services/cqproxy/CQProxy.xsd"/>
<resource location="eads_ws.xsd" key="gov:/services/eads_ws/eads_ws.xsd"/>
</publishWSDL>
<description></description>
</proxy>
我能够成功地将请求发送到RESTful服务。但是我的OUT序列无法处理“application / rdf + xml”响应。日志显示以下错误:
INFO {org.apache.axis2.builder.BuilderUtil} - OMException in getSOAPBuilder {org.apache.axis2.builder.BuilderUtil}
org.apache.axiom.soap.SOAPProcessingException: First Element must contain the local name, Envelope , but found RDF
两个问题:
1。在Axis2对其应用SOAP转换之前,如何记录从REST服务接收的实际响应?我的日志中介仅生成空SOAP信封。
INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:4c06fcb9-4e45-4fb3-bc5a-4350e3d86533, Direction: response, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body/></soapenv:Envelope> {org.apache.synapse.mediators.builtin.LogMediator}
2。如何将RDF + XML转换回SOAP格式?我应该在OUT序列中使用XSLT介体吗?
感谢您的帮助!
答案 0 :(得分:2)
我写了一个简单的Nodejs服务,它发送一个RDF格式的消息。以下是使用Advanced Rest Client Chrome扩展程序调用它时的样子。
然后我在ESB 4.5.1中创建了一个代理服务。这是我的代理服务配置,
<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
<target>
<inSequence>
<log level="full"/>
<send>
<endpoint>
<address uri="http://localhost:8080/" format="pox"/>
</endpoint>
</send>
<log level="full"/>
<drop/>
</inSequence>
<outSequence>
<log level="full"/>
<send/>
</outSequence>
</target>
<description></description>
</proxy>
然后我使用tryIt工具向此代理服务发送XML消息。我正在使用日志中介来记录传入的XML消息。
在out out序列中,我再次使用log mediator,我可以看到RDF在那里登录。
您正在尝试使用的ESB版本是什么?