domingo, 10 de octubre de 2010

MANEJO DE 'WEB SERVICE' CON 'JAX-WS'.

Que tal amigos después de un tiempo regreso para postear sobre este tema interesante relacionado a WebService. En esta oportunidad hablare sobre el Framework JAX-WS, este Framework en comparación de otros Frameworks, te facilita la generación WebService vía un simple Servlet y algo muy bueno es que permite a diferencia de otros Frameworks para WS, el manejo de colecciones (ArrayList, List, Vector) como INPUT & OUTPUT de cada una de las operaciones que se declaren en dichos WS.

Los pasos para poder levantar un WS vía JAX-WS son los siguientes:

- Descargar las fuentes Core del JAX-WS pulsando: AQUÌ..

- Ubicar las fuentes descomprimirlas y ubicarlas en la ruta: C:\JAVA\JAX-WS\JAXWS2.a.2.
- Crea la variable de entorno: JAXWS_HOME, que apunte a la ruta donde estaba las fuentes de JAX-WS descargadas: C:\JAVA\JAX-WS\JAXWS2.1.2\jaxws-ri
- Crea un Servlet similar a este:

package org.java.ws.servlet;

import static org.java.ws.util.Constantes.URL_WEBSERVICE;
import java.io.Serializable;
import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.java.ws.servidor.UsuarioDAOImpl;

/**
* @author cguerra.
* @clase: InicialiadorJAXServlet.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class InicialiadorJAXServlet extends GenericServlet implements Serializable{

private static final long serialVersionUID = -2482469492687227649L;

/**
* Constructor.
*/
public InicialiadorJAXServlet(){
}

/**
* init mètodo que se carga al iniciar el sistema y accede al método que manda a iniciar el Proceso.
* @throws ServletException
*
*/
public void init( ServletConfig configuracion ) throws ServletException{
System.out.println( "DENTRO DE 'init( ServletConfig configuracion )' " );

super.init( configuracion );

try{
this.IniciarWebService();
}
catch( Exception e ){
e.printStackTrace();
}
}

/**
* IniciarWebService, Mètodo que manda a iniciar el WebService.
*/
public void IniciarWebService(){
System.out.println( "DENTRO DE 'IniciarWebService()' " );

try{
String webService = URL_WEBSERVICE;

UsuarioDAOImpl daoImpl = new UsuarioDAOImpl();
daoImpl.inicializaWebService( webService );
}
catch( Exception e ){
e.printStackTrace();
}
}

/**
* service
* @param request
* @param response
*/
public void service( ServletRequest request, ServletResponse response ){
System.out.println( "DENTRO DE 'service( ServletRequest request, ServletResponse response )' " );
}

}


- Crear la Interfase y su clase que Implemente el WS. Además, para la generación en si del WS se puede realizar de 2 formas a continuación detalladas:


GENERAR WEBSERVICE DESDE UNA CLASE 'JAVA'
--------------------------------------------------------------------------


I.- UBICARSE DESDE LA RUTA 'SRC' DEL PROYECTO EN DOS:

Ejecutar en Orden:

(FORMA MANUAL)
A.- javac org/java/ws/bean/Usuario.java
B.- javac org/java/ws/servidor/UsuarioDAO.java
C.- javac org/java/ws/servidor/UsuarioDAOImpl.java

(FORMA DINAMICA)
set RAIZ_SRC= .
set JAVA_SRC=%RAIZ_SRC%\org\java\ws\bean\*.java
set JAVA_SRC=%JAVA_SRC%%RAIZ_SRC%\org\java\ws\servidor\*.java
set JAVA_SRC=%JAVA_SRC%%RAIZ_SRC%\org\java\ws\util\*.java
javac %JAVA_SRC%


D.- %JAXWS_HOME%/bin/wsgen -cp . org.java.ws.servidor.UsuarioDAOImpl -s . -verbose -r ..\WebContent\wsdl -wsdl
E.- Ejecutar esta linea de Comandos o desplegar desde el Servidor:
java org.java.ws.servidor.UsuarioDAOImpl
F.- Actualizar el nombre del 'WebService' en el WSDL, ya que luego de generarce no aparece.


GENERAR WEBSERVICE DESDE UN 'WSDL'
--------------------------------------------------------------


I.- UBICARSE DESDE LA RUTA 'RAIZ' DEL PROYECTO EN DOS:
- FORMA#1: wsimport WebContent\WEB-INF\wsdl\music.wsdl -s src -verbose
- FORMA#2: %JAXWS_HOME%/bin/wsimport WebContent\WEB-INF\wsdl\music.wsdl -s src -verbose

II.- UBICARSE DESDE LA RUTA 'SRC' DEL PROYECTO EN DOS:
- FORMA#1: wsimport ..\WebContent\WEB-INF\wsdl\music.wsdl -s . -verbose
- FORMA#2: %JAXWS_HOME%/bin/wsimport ..\WebContent\WEB-INF\wsdl\WEB-INF\music.wsdl -s . -verbose

Luego de esto se habrá generado el WS y se apreciaría un mensaje similar a este, al ingresar una URL similar a esta, que significa que el WS esta activo:

http://localhost:8099/ServidorWS_JAXWS_Generado/UsuarioDAOImpl
Web Services
No JAX-WS context information available.

Para el consumo del dicho WS ya desplegado, nos podemos apoyar también con JAX-WS, para ello realizamos lo siguiente:

GENERAR CLIENTE 'WEBSERVICE'
--------------------------------------------------


UBICARSE DESDE LA RUTA 'SRC' DEL PROYECTO EN DOS:

I.- GENERACION DE CLASES:

A.- DESDE 'URL':
%JAXWS_HOME%/bin/wsimport http://localhost:8090/servidorJaxWs/UsuarioDAOImpl?wsdl -s . -verbose

B.- DESDE 'FICHERO':
%JAXWS_HOME%/bin/wsimport ..\WebContent\wsdl\UsuarioDAOImplService.wsdl -s . -verbose


II.- COMPILACION & EJECUCION DE CLIENTE 'WS':

A.- Ejecución desde Consola 'DOS':
- javac org/java/ws/test/ClienteWS.java
- java org/java/ws/test/ClienteWS PARAMETRO

B.- Ejecución desde Clase JAVA:
- Ejecutar desde 'Java Aplication'.

Al ejecutar la clase: ClienteWS se probara dicho WS.

Para descargar el ejemplo completo, descargarlo de: AQUÌ.

No hay comentarios: