martes, 21 de agosto de 2012

MAPPING PROXY 'JAXWS' CON 'SPRING3'


En esta oportunidad mostraré como trabajar con PROXY Client con JAXWS usando SPRING 3.

Todos sabemos que cuando uno crea un PROXY Client con JAXWS y lo encapsula en un .jar, se puede realizar de 2 formas: 

1. En base la URL del servicio desplegado.
2. En base al .WSDL en físico en un ruta especifica.

Al realizar cualquier de estos 2 pasos, se genera una dependencia internamente dentro del .jar, ya sea de la ruta absoluta del .WSDL o bien de la URL de la cual se genero el .jar. 

Este es un gran problema por eso es que, en este caso, SPRING entra a solucionar dicho problema y muchos más. Ya que dentro de sus mappings XML setea y asocia: targetNamespace, service, EndPoint, etc, por c/u de los Servicios Web los cuales consumiremos.

En mapping aplicado es el siguiente:

En mi caso yo segmento toda la logica para el manejo de WS en un XML separado del ApplicationContext, llamado:  applicationProxyWs.xml:


(Para fines del ejemplo, se ha cambiado LLAVES por CORCHETES):

[?xml version="1.0" encoding="UTF-8" ?]
[beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:context="http://www.springframework.org/schema/context" 
       xmlns:task="http://www.springframework.org/schema/task"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:ws="http://jax-ws.dev.java.net/spring/core" 
       xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"
       xmlns:oxm="http://www.springframework.org/schema/oxm" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-3.0.xsd
                           http://www.springframework.org/schema/task
                           http://www.springframework.org/schema/task/spring-task-3.0.xsd
                           http://www.springframework.org/schema/aop  
                           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
                           http://www.springframework.org/schema/context  
                           http://www.springframework.org/schema/context/spring-context-3.0.xsd
                           http://www.springframework.org/schema/jee
                           http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
                           http://www.springframework.org/schema/util
                           http://www.springframework.org/schema/util/spring-util-3.0.xsd
                           http://jax-ws.dev.java.net/spring/core
                           http://jax-ws.dev.java.net/spring/core.xsd
                           http://jax-ws.dev.java.net/spring/servlet
                           http://jax-ws.dev.java.net/spring/servlet.xsd" ]
                            
      [util:map id="jaxwsCustomProperties" ] 
        [entry key="com.sun.xml.ws.request.timeout" ]  
               [value type="java.lang.Integer" ]1500[/value] 
        [/entry]
        [entry key="com.sun.xml.ws.connect.timeout" ] 
               [value type="java.lang.Integer" ]1500[/value] 
        [/entry]
      [/util:map]
        
    [bean id="ObtenerDatosService"  class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean" ]
            [property name="wsdlDocumentUrl"  value="http://localhost:8088/mockObtenerDatosBinding?wsdl" /]                  
            [property name="namespaceUri"     value="http://pe.com.externalCompany/bean/ObtenerDatosWS" /]                 
            [property name="serviceName"      value="ObtenerDatosService" /]                                               
            [property name="portName"         value="ObtenerDatosPort" /]                                                  
            [property name="serviceInterface" value="externalcompany.com.pe.bean.obtenerdatosws.ObtenerDatosPortType" /]   
       [property name="customProperties" ]
           [ref local="jaxwsCustomProperties" /]                                                                           
       [/property]                                            
      [/bean]      
      [bean id="ObtenerTecnologiaService"class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean" ]
         [property name="wsdlDocumentUrl"  value="http://localhost:8088/mockObtenerTecnologiaBinding?wsdl" /]                        
         [property name="namespaceUri"     value="http://pe.com.externalCompany/bean/ObtenerTecnologiaWS" /]                      
            [property name="serviceName"    value="ObtenerTecnologiaService" /]
 [property name="portName"         value="ObtenerTecnologiaPort" /]   
 [property name="serviceInterface" value="externalcompany.com.pe.bean.obtenertecnologiaws.ObtenerTecnologiaPortType" /] 
[property name="customProperties" ] 
      [ref local="jaxwsCustomProperties" /] 
[/property] 
[/bean] 
[/beans]
La obtención y configuración de los datos de cada property lo sacamos de la misma URL de cada WebService de esta manera:
  • wsdlDocumentUrl           =>  [URL] 
  • namespaceUri                =>  [wsdl:definitions targetNamespace='XXXX'] 
  • serviceName                  =>  [wsdl:service name='XXX'] 
  • portName                       =>  [wsdl:port name='XXX'] 
  • serviceInterface              =>  [public interface XXX] 
  • jaxwsCustomProperties  =>  [PROPERTIES] en milisegundos 
Es todo saludos.   

No hay comentarios: