servicios rest wso2 wso2esb

rest - bus de servicios wso2



Proxy un servicio RESTful utilizando SOAP con WSO2 ESB (4)

Queremos representar un servicio web RESTful con SOAP.

El servicio REST utiliza el método GET y acepta entradas a través de parámetros de consulta. Produce un recurso de tipo application / csv.

¿WSO2 ESB / Synapse es compatible con tal escenario, y hay un ejemplo disponible?

Solicitud de ejemplo

Solicitud de proxy SOAP:

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

Solicitud de punto final REST:

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

Ejemplo de respuesta

REST Respuesta al punto final

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

Respuesta de proxy SOAP

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

Muchas gracias.


Si lo entiendo correctamente, ¿quiere exponer un servicio REST como un servicio SOAP, para que los clientes SOAP puedan acceder a su servicio REST a través del ESB?

Si ese es el caso, es posible :) Debería echarle un vistazo a la muestra 152 de estos: http://docs.wso2.org/wiki/display/ESB451/Proxy+Service+Samples

Explicará cómo tomar una solicitud SOAP y pasarla a un backend REST y luego transformar la respuesta REST en una respuesta SOAP.

EDITAR: Aquí hay una configuración de muestra sobre cómo hacer lo que pidió en los comentarios, con suerte lo pondrá en marcha :)

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

Entonces, la solicitud de SOAP que realice en el ESB debería ser algo así como:

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

Espero que ayude :)


Puede usar el mediador de clase para extraer los parámetros SOAP usando XPATH. Luego construya la URL REST y envíela nuevamente al flujo de secuencia IN.



1. necesitas obtener el valor de SOAP PROXY

2. necesitas almacenarlo en una variable local

3. debe pasar el valor al SERVICIO REST utilizando Parámetros de consulta

4. necesita formatear la respuesta del servicio REST a un formato SOAP

La solicitud SOAP será,

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

Puede almacenar el valor de SOAP PROXY Request as,

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

Luego puede pasar los valores al Servicio REST en,

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

Luego puede formatear la respuesta usando el mediador PayloadFactory ,

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

Entonces la Respuesta del Proxy será,

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