2012-12-21 12 views
5

Chcemy świadczyć usługi proxy dla usługi RESTful przy użyciu protokołu SOAP.Serwer proxy z usługą RESTful przy użyciu protokołu SOAP z usługą WSO2 ESB

Usługa REST korzysta z metody GET i przyjmuje dane wejściowe za pośrednictwem parametrów zapytania. Tworzy zasób typu application/csv.

Czy WSO2 ESB/Synapse obsługuje taki scenariusz i czy jest dostępny przykład?

Przykładowe żądanie

SOAP Pełnomocnik Wniosek:

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

odpoczynek Wniosek końcowy:

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

Odpowiedź Przykład

odpoczynek Endpo int Response

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

SOAP Proxy Response

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

Dziękujemy.

Odpowiedz

5

Jeśli dobrze Cię rozumiem, chcesz wystawić usługę REST jako usługę SOAP, aby klienci SOAP mogli uzyskać dostęp do usługi REST za pośrednictwem ESB?

Jeśli tak jest, to jest możliwe :) Powinieneś sprawdzić próbkę 152 z nich: http://docs.wso2.org/wiki/display/ESB451/Proxy+Service+Samples

To będzie wyjaśnić, jak wziąć żądania SOAP i przekazać go do backend REST a następnie przekształcić Odpowiedź REST na odpowiedź SOAP.

EDIT: Oto przykładowa konfiguracja, w jaki sposób to, co prosiłeś w komentarzach, mam nadzieję, że będzie to dobry początek :)

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

Następnie wniosek SOAP wprowadzone w ESB powinno być coś takiego:

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

nadzieję, że pomoże :)

+0

Bardzo dziękuję, przykład jest bardzo pomocny. Nadal zastanawiamy się - w jaki sposób możemy przekonwertować parametry xml SOAP na parametry zapytania dla naszego wywołania REST? Możesz pomóc? –

0

można użyć klasy mediatora, aby wyodrębnić parametry SOAP za pomocą XPath. Następnie zbuduj URL REST i odeślij go do przepływu sekwencji IN.

0

1. trzeba uzyskać wartość od mydła PEŁNOMOCNIKA

2. należy go przechowywać w lokalnej zmiennej

trzeba przekazać wartość usługi REST za pomocą Query Parameters

4. trzeba formatować odpowiedź REST usługi do formatu SOAP

Żądanie SOAP będzie,

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

można przechowywać wartości z SOAP PROXY wniosek, jak,

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

Następnie można przekazać wartości do Serwisu pozostałej,

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

Następnie można sformatować odpowiedź za pomocą PayloadFactory mediatora,

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

Więc Reakcja Proxy będzie,

<person> 
    <name>Geoff</name> 
    <age>22</age> 
    <sex>Male</sex> 
<person> 
Powiązane problemy