Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Proxy a RESTful service using SOAP with WSO2 ESB

We want to proxy a RESTful web service with SOAP.

The REST service uses the GET method and accepts inputs via query parameters. It produces a resource of type application/csv.

Does WSO2 ESB/Synapse support such a scenario, and is there an example available?

Example Request

SOAP Proxy Request:

<request>
  <fromDate>2012-01-01</fromDate>
  <toDate>2012-12-31</toDate>
</request>

REST Endpoint Request:

http://localhost/person?fromDate=2012-01-01&toDate=2012-12-31

Example Response

REST Endpoint Response

"Name","Age","Sex"
"Geoff","22","Male"

SOAP Proxy Response

<person>
  <name>Geoff</name>
  <age>22</age>
  <sex>Male</sex>
<person>

Many thanks.

like image 316
Diné Bennett Avatar asked Dec 21 '12 09:12

Diné Bennett


1 Answers

If I understand you correctly, you want to expose a REST service as a SOAP service, so that SOAP clients can access your REST service through the ESB?

If that is the case, it is possible :) You should check out sample 152 from these: http://docs.wso2.org/wiki/display/ESB451/Proxy+Service+Samples

It'll explain how you take a SOAP request and pass it to a REST backend and then transform the REST response into a SOAP response.

EDIT: Here's a sample configuration on how to do what you asked in the comments, hopefully it will get you started :)

<proxy xmlns="http://ws.apache.org/ns/synapse" name="RESTProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>

         <!-- We set the HTTP Method we want to use to make the REST request here -->
         <property name="HTTP_METHOD" value="GET" scope="axis2"/>

         <!-- This is where the magic happens, for what you want i.e. mapping SOAP "params" to REST query param's --> 
         <property name="messageType" value="application/x-www-form-urlencoded" scope="axis2"/>

         <send>
            <endpoint>
               <!-- This is the RESTful URL we are going to query, like the one in the ESB example 152 -->
               <address uri="http://localhost/person" />
            </endpoint>
         </send>

      </inSequence>

      <outSequence>
         <log level="full"/>
         <property name="messageType" value="text/xml" scope="axis2"/>
         <send/>
      </outSequence>
   </target>
   <description></description>
</proxy>

Then the SOAP request you make to the ESB should be something like:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
    <person>
        <fromDate>2012-01-01</fromDate>
        <toDate>2012-12-31</toDate>
    </person>
   </soapenv:Body>
</soapenv:Envelope>

Hope that helps :)

like image 175
RaviU Avatar answered Sep 20 '22 18:09

RaviU