2012-12-21 16 views
5

Vogliamo eseguire il proxy di un servizio Web RESTful con SOAP.Proxy un servizio RESTful che utilizza SOAP con ESSO WSO2

Il servizio REST utilizza il metodo GET e accetta gli input tramite i parametri di query. Produce una risorsa di tipo application/csv.

WSO2 ESB/Synapse supporta tale scenario ed è disponibile un esempio?

Esempio Richiesta Richiesta

SOAP proxy:

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

REST Endpoint Richiesta:

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

Esempio di risposta

REST Endpo int Risposta

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

risposta SOAP proxy

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

Molte grazie.

risposta

5

Se ho capito bene, si desidera esporre un servizio REST come servizio SOAP, in modo che i client SOAP possano accedere al servizio REST attraverso l'ESB?

Se questo è il caso, è possibile :) Si dovrebbe controllare il campione 152 da questi: http://docs.wso2.org/wiki/display/ESB451/Proxy+Service+Samples

Sarà spiegare come si prende una richiesta SOAP e passarlo a un backend riposo e poi trasformare il Risposta REST in una risposta SOAP.

EDIT: Ecco un esempio di configurazione su come fare quello che hai chiesto nei commenti, spero che ti permetterà di cominciare :)

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

Poi la richiesta SOAP apportate alla ESB dovrebbe essere qualcosa di simile:

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

Speranza che aiuta :)

+0

Mille grazie, l'esempio è molto utile. Tuttavia ci stiamo ancora chiedendo - come possiamo convertire i parametri xml SOAP in parametri di query per la nostra chiamata REST? Puoi aiutare? –

0

È possibile utilizzare classe mediatore per estrarre i parametri SOAP utilizzando XPath. Quindi creare l'URL REST e inviarlo di nuovo al flusso di sequenza IN.

0

1. è necessario per ottenere il valore dal SOAP DELEGA

2. è necessario memorizzarlo in una variabile locale

3. è necessario passare il valore alla REST servizio utilizzando parametri di ricerca

4. è necessario formattare la risposta da REST servizio in un formato SOAP

La richiesta SOAP sarà,

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

È possibile memorizzare il valore da SOAP DELEGA richiesta come,

<proxy xmlns="http://ws.apache.org/ns/synapse" name="RESTProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true><target> 
    <inSequence> 
     <property name="fromDate" expression="//fromDate" scope="default" type="STRING"/> 
     <property name="toDate" expression="//toDate" scope="default" type="STRING"/> 

Quindi è possibile passare i valori al Servizio REST da,

<send> 
    <endpoint> 
      <http method="GET" uri-template="http://localhost/person?fromDate=={get-property('fromDate')}&amp;toDate={get-property('toDate')}"/> 
    </endpoint> 
</send> 
</inSequence> 

Poi è possibile formattare la risposta utilizzando PayloadFactory mediatore,

<outSequence> 
<payloadFactory media-type="xml">  
     <format> 
       <person> 
         <Name>$1</Name> 
         <Age>$2</Age> 
         <Sex>$3</Sex> 
       </person> 
     </format> 
       <args> 
        <arg evaluator="json" expression="$.Name"/> 
        <arg evaluator="json" expression="$.Age"/> 
        <arg evaluator="json" expression="$.Sex"/> 
       </args> 
</payloadFactory> 
    <send/> 
    </outSequence> 
    </target> 
    <description/> 
    </proxy> 

Così la risposta del Proxy sarà,

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