WSO2 ESB: Registering and Transforming Response from REST REST Service Back to SOAP

I am working on a WSO2 ESB POC for my company, which involves providing an internal RESTful service over a SOAP endpoint on an ESB. I've read all the threads and blog posts related to SOAP-REST mediation but couldn't find an answer. The RESTful service returns the message format "application / rdf + xml". 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 can successfully send a request to a RESTful service. However, my OUT sequence cannot handle the "application / rdf + xml" response. The 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 received from the REST service before Axis2 applies the SOAP transform to it? My log broker only generates an empty SOAP envelope.

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

Appreciate your help!

0


source to share


1 answer


I wrote a simple Nodejs service that sends a message in RDF format. This is what it looks like when I call it using the Advanced Rest Client Chrome extension.

invoking rdf endpoint

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

<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 tryIt tool to send XML message to this proxy service. I am using a log broker to log an incoming XML message.

In the next sequence, I use the log broker again and I see that RDF is being logged there.

What version of ESB are you trying to use?

+2


source







All Articles