Web Services – Integrar los clientes en Spring
Ya sabemos cómo publicar un servicio web y cómo construir un cliente que consuma dicho servicio partiendo del fichero descriptor del contrato.
Ahora integraremos el cliente del servicio que hemos desarrollado en un proyecto Spring.
Podríamos partir de un nuevo proyecto dinámico web, holamundoWSClienteSpring, añadir spring.jar y spring-mvc.jar, y configurar el web.xml para utilizar Spring. O podemos partir del proyecto que ya construimos basándonos en Spring, holamundo.
Debemos añadir las librerías que hemos utilizado en los anteriores proyectos :
- axis.jar
- commons-discovery.jar
- jaxrpc.jar
- saaj.jar
- wsdl4j.jar
Y necesitamos el interfaz del servicio, que podemos construir nosotros u obtenerlo como ya se ha mostrado a partir del fichero WSDL. Es el mismo que ya hemos utilizado, es.lycka.holamundoWS.webservices.HolaMundo :
package es.lycka.holamundoWS.webservices;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HolaMundo extends Remote {
public String getSaludoLycka (String nombre) throws RemoteException;
}
Vale, ahora vamos a implementar un fichero xml con el formato de Spring para definir un bean de nuestro servicio web, es.lycka.holamundoWS.webservices.clientes.spring.application-context-ws.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="holamundoService" class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
<property name="wsdlDocumentUrl">
<value>http://localhost:8080/holamundoWS/services/HolaMundoImpl?WSDL</value>
</property>
<property name="namespaceUri">
<value>http://impl.webservices.holamundoWS.lycka.es</value>
</property>
<property name="serviceName">
<value>HolaMundoImplService</value>
</property>
<property name="portName">
<value>HolaMundoImpl</value>
</property>
<property name="serviceInterface">
<value>es.lycka.holamundoWS.webservices.HolaMundo</value>
</property>
</bean>
</beans>
Ya sólo nos queda construir el cliente, es.lycka.holamundoWS.clientes.spring.HolaMundoClienteSpring :
package es.lycka.holamundoWS.clientes.spring;
import java.rmi.RemoteException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import es.lycka.holamundoWS.webservices.HolaMundo;
public class HolaMundoClienteSpring {
public static void main(String[] args) {
String resultado;
try {
ApplicationContext contexto = new ClassPathXmlApplicationContext("/es/lycka/holamundoWS/clientes/spring/application-context-ws.xml");
HolaMundo servicio = (HolaMundo)contexto.getBean("holamundoService");
resultado = servicio.getSaludoLycka("Jero");
System.out.println("resultado = " +resultado);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
Ejecutamos esta clase (con el servidor iniciado donde esté desplegado el servicio, y con conectividad entre las máquinas cliente y servidor) y en la consola deberíamos de ver :
resultado: Lycka te saluda, Jero.
Ver también
- Web Services – Primeros pasos con Eclipse – Generar Servicio Web
- Web Services – Primeros pasos con Eclipse – Generar Cliente Servicio Web
También te puede interesar:
- Web Services – Primeros pasos con Eclipse – Generar Cliente Servicio Web Ya hemos publicado nuestro servicio web en un servidor. Ahora queremos generar un cliente que consuma este servicio. Para ello utilizaremos las mismas herramientas descritas...
- Web Services – Primeros pasos con Eclipse – Generar Servicio Web Herramientas necesarias JDK. En esta demo utilizaré la 1.5 IDE Desarrollo. En esta demo utilizaré el Eclipse del MEC (Profiles > Public Profiles > Web...
- Java Dependency Injection: Guice or Spring? Depending on your needs. Comparing both of them is like comparing a MP3 mobile player to an MP3 radio car. Spring provides you more and...
- How-to Migrate from Spring Framework to Guice Iteration 0 – Stable Spring Application We start from a Spring application that is stable, all automated tests are running and has been tested by...
- Spring, Struts 1.3.8, JDBC y MySQL Vaya combinación, ya se va complicando el tema. Ahora que ya tenemos un servidor de base de datos MySQL disponible, queremos utilizarlo en nuestros proyectos...































Web Services - Primeros pasos con Eclipse - Generar Cliente Servicio Web | Lycka Bonita dijo
2 de December del 2008 a las 9:28 am
[...] Web Services – Integrar los clientes en Spring [...]
Web Services - Primeros pasos con Eclipse - Generar Servicio Web | Lycka Bonita dijo
2 de December del 2008 a las 9:29 am
[...] Web Services – Integrar los clientes en Spring [...]
Andrés Mirabal dijo
24 de February del 2009 a las 10:31 pm
Muy buen tutorial para integrar Web Services con spring y Eclipse, pero falta agregar un detalle a la hora de inyectar el Servicio Web con Spring, y es que hay que poner el siguiente atributo en el applicationContext.xml:
<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd“>
<bean id=”calculadoraService” class=”org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean”>
<property name=”wsdlDocumentUrl” value=”http://localhost:1272/servidorWS/services/DefaultCalculadora?wsdl”/>
<property name=”namespaceUri” value=”http://impl.servicios”/>
<property name=”serviceName” value=”DefaultCalculadoraService”/>
<property name=”portName” value=”DefaultCalculadora”/>
<property name=”serviceInterface” value=”servicios.Calculadora”/>
<property name=”serviceFactoryClass” value=”org.apache.axis.client.ServiceFactory”/>
</bean>
</beans>
ya que sin este, no reconoce el motor de axis para consumir el servicio y no puede serializar los atributos que vienen por SOAP.
Sería interesante estudiar la diferencia de este método de integrar con Spring y utilizar Xfire que es el que utiliza Spring por defecto en vez de Axis.
Saludos.
Fijar un timeout usando WebServiceTemplate de Spring-WS « La victácora dijo
1 de May del 2011 a las 2:19 pm
[...] Fijar un timeout usando WebServiceTemplate de Spring-WS Por venosov Una vez que sabemos cómo publicar un servicio web, ahora construiremos un cliente que consuma dicho servicio en un proyecto Spring-WS usando WebServiceTemplate, y le pondremos un timeout de 5 segundos por si el webservice está caído -partiendo del proyecto en eclipse que hacen aquí-. [...]