Diferencia entre revisiones de «Web Service Con Spring»

De Dos Ideas.
Saltar a: navegación, buscar
(Ver también)
m (Ver también)
 
(No se muestran 15 ediciones intermedias de 5 usuarios)
Línea 7: Línea 7:
 
Supongamos que tenemos un web service funcionando, con la siguiente operación:
 
Supongamos que tenemos un web service funcionando, con la siguiente operación:
  
decirHola(nombre : String) : String
+
decirHola(nombre : String) : String
  
 
De este web service, por supuesto, conocemos la URL del [[WSDL]].
 
De este web service, por supuesto, conocemos la URL del [[WSDL]].
Línea 20: Línea 20:
  
 
La interfaz HolaMundo será entonces muy simple:
 
La interfaz HolaMundo será entonces muy simple:
<pre>
+
<code java>
package com.dosideas.ws.business;
+
package com.dosideas.ws.business;
  
public interface HolaMundoBo {
+
public interface HolaMundoBo {
    public String decirHola(String nombre);
+
    public String decirHola(String nombre);
}
+
}
</pre>
+
</code>
  
 
Eso será todo lo que programaremos para consumir a nuestro web service.
 
Eso será todo lo que programaremos para consumir a nuestro web service.
Línea 33: Línea 33:
  
 
Claro que, falta la magia de la configuración. Deberemos declarar nuestro bean para ser consumible en un archivo de configuración de Spring.
 
Claro que, falta la magia de la configuración. Deberemos declarar nuestro bean para ser consumible en un archivo de configuración de Spring.
<pre>
+
<code xml>
<nowiki>
+
<bean id="business.HolaMundoBo"  
    <bean id="business.HolaMundoBo" class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
+
    class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
        <property name="serviceInterface"
+
    <property name="serviceInterface"
                  value="com.dosideas.ws.business.HolaMundoBo" />
+
        value="com.dosideas.ws.business.HolaMundoBo" />
        <property name="wsdlDocumentUrl"
+
    <property name="wsdlDocumentUrl"
                  value="http://localhost:8080/HolaMundoWS/HolaMundoWebServiceService?wsdl" />
+
        value="http://localhost:8080/HolaMundoWS/HolaMundoWebServiceService?wsdl" />
        <property name="namespaceUri"
+
    <property name="namespaceUri"
                  value="http://ws.demo.dosideas.com/" />
+
        value="http://ws.demo.dosideas.com/" />
        <property name="serviceName"
+
    <property name="serviceName"
                  value="HolaMundoWebServiceService" />
+
        value="HolaMundoWebServiceService" />
        <property name="portName"
+
    <property name="portName"
                  value="HolaMundoWebServicePort" />
+
        value="HolaMundoWebServicePort" />
        <property name="serviceFactoryClass"
+
    <property name="serviceFactoryClass"
                  value="org.apache.axis.client.ServiceFactory"/>
+
        value="org.apache.axis.client.ServiceFactory"/>
    </bean>
+
</bean>
</nowiki>
+
</code>
</pre>
 
  
 
El atributo '''serviceInterface''' es la interfaz de negocio que deberá implementar Spring, y es la interfaz que escribimos en el punto anterior.
 
El atributo '''serviceInterface''' es la interfaz de negocio que deberá implementar Spring, y es la interfaz que escribimos en el punto anterior.
Línea 61: Línea 60:
  
 
A partir de aquí, invocar al web service es exactamente igual que invocar a cualquier otra clase. Supongamos entonces el método de un test:
 
A partir de aquí, invocar al web service es exactamente igual que invocar a cualquier otra clase. Supongamos entonces el método de un test:
 
+
<code java>
    public void testHolaMundo() {
+
public void testHolaMundo() {
        HolaMundoBo instance = (HolaMundoBo) applicationContext.getBean("business.HolaMundoBo");
+
    HolaMundoBo instance = (HolaMundoBo) ApplicationContext.getBean("business.HolaMundoBo");
        String result = instance.decirHola("Zim");
+
    String result = instance.decirHola("Zim");
        assertEquals("Hola, Zim", result);
+
    assertEquals("Hola, Zim", result);
    }
+
}
 +
</code>
  
 
==Sobre los tipos de Web Services==
 
==Sobre los tipos de Web Services==
Línea 74: Línea 74:
 
Si bien el nombre de la clase no parece indicarlo, es posible usar el método arriba indicado para acceder a web services Document.
 
Si bien el nombre de la clase no parece indicarlo, es posible usar el método arriba indicado para acceder a web services Document.
  
Si el web service contiene objetos no comunes (DTOs propios, por ejemplo) será necesario declarar serializadores para dichos DTO. El subcapítulo 17.5.3 Register Bean Mappings tiene un ejemplo de cómo registrar mapeos propios.
+
Si el web service contiene objetos no comunes (DTOs propios, por ejemplo) será necesario declarar serializadores para dichos DTO. El subcapítulo 17.5.3 Register Bean Mappings tiene un ejemplo de cómo registrar mapeos propios..
  
 
== Ver también ==
 
== Ver también ==
 +
* [[REST con Spring]]
 +
* [[Spring Web Services]]
 
* [[Web Service]]
 
* [[Web Service]]
 
* [[Spring Framework]]
 
* [[Spring Framework]]
 
* [http://static.springframework.org/spring/docs/1.1.5/reference/remoting.html Manual de Spring, Capítulo 17: Remoting]
 
* [http://static.springframework.org/spring/docs/1.1.5/reference/remoting.html Manual de Spring, Capítulo 17: Remoting]
 +
 +
[[Categoría:Spring Framework]]
 +
[[Categoría:Web Service]]

Revisión actual del 14:52 22 dic 2010

Spring Framework tiene un soporte para poder invocar web services de forma muy simple.

A continuación vamos a ver un ejemplo concreto invocando a un Web Service de prueba.

El web service HolaMundo

Supongamos que tenemos un web service funcionando, con la siguiente operación:

decirHola(nombre : String) : String

De este web service, por supuesto, conocemos la URL del WSDL.

Invocando al web service con Spring

Acceder a un web service con Spring implica programar una única interfaz, que será nuestra interfaz de negocio que representará las operaciones del web service.

El resto es configuración, asociando dicha interfaz al web service que queremos consumir.

La interfaz

La interfaz HolaMundo será entonces muy simple: package com.dosideas.ws.business;

public interface HolaMundoBo {

   public String decirHola(String nombre);

}

Eso será todo lo que programaremos para consumir a nuestro web service.

La configuración

Claro que, falta la magia de la configuración. Deberemos declarar nuestro bean para ser consumible en un archivo de configuración de Spring. <bean id="business.HolaMundoBo"

   class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
   <property name="serviceInterface"
       value="com.dosideas.ws.business.HolaMundoBo" />
   <property name="wsdlDocumentUrl"
       value="http://localhost:8080/HolaMundoWS/HolaMundoWebServiceService?wsdl" />
   <property name="namespaceUri"
       value="http://ws.demo.dosideas.com/" />
   <property name="serviceName"
       value="HolaMundoWebServiceService" />
   <property name="portName"
       value="HolaMundoWebServicePort" />
   <property name="serviceFactoryClass"
       value="org.apache.axis.client.ServiceFactory"/>

</bean>

El atributo serviceInterface es la interfaz de negocio que deberá implementar Spring, y es la interfaz que escribimos en el punto anterior.

El atributo wsdlDocumentUrl es justamente la URL del WSDL.

Los atributos namespaceUri, serviceName y portName son los datos necesarios para invocar un web service cualquiera, y salen del mismo WSDL.

Invocando al web service

A partir de aquí, invocar al web service es exactamente igual que invocar a cualquier otra clase. Supongamos entonces el método de un test: public void testHolaMundo() {

   HolaMundoBo instance = (HolaMundoBo) ApplicationContext.getBean("business.HolaMundoBo");
   String result = instance.decirHola("Zim");
   assertEquals("Hola, Zim", result);

}

Sobre los tipos de Web Services

Existen dos tipos de web services: RPC y Document.

Si bien el nombre de la clase no parece indicarlo, es posible usar el método arriba indicado para acceder a web services Document.

Si el web service contiene objetos no comunes (DTOs propios, por ejemplo) será necesario declarar serializadores para dichos DTO. El subcapítulo 17.5.3 Register Bean Mappings tiene un ejemplo de cómo registrar mapeos propios..

Ver también