WSO2 ESB: log and convert response from the RDF RE

2019-08-17 06:10发布

I am working on the WSO2 ESB POC for my company, which involves exposing the internal RESTful service via SOAP endpoint on the ESB. I've read all the threads and blog posts related to the SOAP-REST mediation, but still could not find an answer. My RESTful service returns "application/rdf+xml" message format. Here is my sequence:

<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>

I am able to send the request to the RESTful service successfully. However my OUT sequence can't process the "application/rdf+xml" response. Logs show the following error:

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


Two questions:
1. How can I log the actual response that is received from the REST service before Axis2 applies SOAP transformation to it? My log mediator generates empty SOAP envelope only.

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. How do I convert from RDF+XML back to the SOAP format? Should I use XSLT mediator in the OUT sequence for this?

Appreciate your help!

1条回答
爷的心禁止访问
2楼-- · 2019-08-17 06:16

I wrote a simple Nodejs service that sends an RDF formatted message. Here's what it looks like when I invoke it using Advanced Rest Client Chrome extension.

invoking rdf endpoint

Then I created a proxy service in ESB 4.5.1. Here's my proxy service configuration,

<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>

Then I used the tryIt tool to send an XML message to this proxy service. I'm using the log mediator to log the incoming XML message.

In the out sequence I'm using the log mediator again and I can see the RDF getting logged there.

What's the ESB version you're trying out this with?

查看更多
登录 后发表回答