lunes, 14 de diciembre de 2015

DINAMIC PROXY CLIENT WS


En esta oportunidad comentaré sobre cómo consumir Servicios Web de manera dinámica.

En proyecto donde el paradigma de la orientación a servicios es aplicado, es imprescindible para la comunicación entre servicios la generación de un Proxy Client del servicio Provider dentro de la aplicación consumidora (Consumer). Para cumplir esto existen actualmente muchas apis en JAVA que facilitan dicho manejo, tanto para generar el servicio (TopDown), como para consumirlo. Entre estas apis JAVA existan: Axis1, Axis2, JaxWs, JaxRpc, etc. Estas apis permiten mediante el TopDown aplicado generar las clases y objetos JAVA siguiendo la estructura de Wsdl/Xsd para poder hacer Get/Set de los datos según convenga.

Esto es bueno pero y estándar, pero existe una transformación detrás de este manejo. Por otro lado, es bueno saber que estas apis facilitan el manejo siempre y cuando la estructura de diseñada del WS, no sea compleja, ni dinámica. Esto se menciona ya que en algunas ocasiones debido una alta complejidad en la estructura (Request/Response), seguridad, etc del servicio provider, es necesario manejar un proxy client de manera dinámica.

Para estos escenarios es bueno conocer que se puede crear un Proxy Client dinámico, que se adapte a cualquier escenario que el negocio requiera y armar los Request. Así mismo, para obtener los datos del Response por más compleja que sea la estructura de respuesta, en vez de manejar un api Jaxb (transformación), nos podemos apoyar en "XPath" ..., ya que por medio de este lenguaje de expressions podremos navegar entre las estructuras XML del Response de una manera muy veloz y potente.

El dummy preparado permite mostrar todo lo mencionado anteriormente.

1. Desplegamos un WS, median un Mock en SOAPUI y así simular un WS Provider:

2. Definir los métodos que servirán para el procesamiento Rquest/Response y el Main que simulará el lanzamiento:

3. Se debe mapear diferentes puntos propios del servicio: URL, Namespace, ServiceName, PortName, TimeOut, etc:

4. Se definen los métodos: procesarRequestWS y procesarResponseWS:

5. Se arma el Request XML, independientemente de la estructura y/o complejidad que se tenga (esta puede está incluso mapeada en .properties y ser reutilizada):

6. Aquí se muestra el poder de XPath para obtener los datos de la cadena XML Response, independientemente que sea un dato y/o lista, se debe entender que todo en si son cadenas y se pueden manipular y obtener como tales por medio de las sentencias XPath propiamente:

7. El resultado de la prueba y consumo respectivo se muestra en LOGs:

Con esto espero haber demostrado comoconsumir dinámicamente un WS, sin usa una sola api adicional, todo apoyandonos en las librerias del JDK, así mismo como el apoyo del poderoso XPath ...!

Para los interesados, se puede descargar las fuentes del dummy aquí:
http://www.mediafire.com/download/ctbw2389i8dabaf/DummyDinamicProxyWs.zip