Pasos para WS(Servidor) de JXRPC: Requisitos: -Paciencia. -Ganas de Hacerlo Trabajar. -Tener tiempo libre ó tiempo suficiente OCIOSO (minino 4 horas). -Bajar el jwsdp 1.4, colocar el C:\jwsdp-1.4\jaxrpc\bin en el PATH, si se instaló en c:\. -Tener Instalado el J2sdk 1.4.2 minimo. -Tener una Copia Funcionando de JBOSS AS 4.0 en nuestro caso. -IDE de Java (Jbuilder 6.0 en nuestro caso) OPCIONAL PERO MUY UTIL. -Presion de JEFE.(NO OPCIONAL, REQUERIDO) Pasos: 1.- No creer todo lo que dicen los wikis de JBOSS 2.- No creer en los manuales de SUN (TODOS y menos los JAVADOCs) 3.- Los classpath son un PARADIGMA de los Implementadores de las herramientas 4.- Crear la Interfaz y la Implementación (2 java clases) dentro del mismo package 4.1.-La interfaz define los metodos requeridos(Servicios del EndPoint). ---------------------------------------------------------------------------------- package org.sample; /** *

Title:

*

Description:

*

Copyright: Copyright (c) 2005

*

Company:

* @author unascribed * @version 1.0 */ import java.rmi.*; import java.rmi.Remote; public interface Organizacion extends Remote { String getContactInfo(String organizacion) throws RemoteException; String jobRequest(String target) throws RemoteException; } ---------------------------------------------------------------------------------- 4.2.-La implementacion de la interfaz es otra Clase JAVA que (IMPLEMENTA-DESARROLLA) la interfaz del punto 4.1 (arriba) ---------------------------------------------------------------------------------- package org.sample; /** *

Title:

*

Description:

*

Copyright: Copyright (c) 2005

*

Company:

* @author unascribed * @version 1.0 */ public class OrganizationJSEEndpoint implements Organizacion,java.rmi.Remote { public String getContactInfo(String organization) { System.out.println("getContactInfo: " + organization); return "The '" + organization + "' boss is currently out of office, please call again."; } public String jobRequest(String target) { System.out.println("jobRequest: " + target); return target; } } ---------------------------------------------------------------------------------- 5.-Se compilan las clases como se pueda dado que no consigue la Interfaz en este caso se realizo con jbuilder 6.0 estructura de como debe quedar para este WS d:\pruebas | |config.xml _/-org |_/-sample |_Organizacion.java |_Organizacion.class |_OrganizationJSEEndpoint.java |_OrganizationJSEEndpoint.class 6.- Se realiza un .jar con las clases ya compiladas (.class)-Paso posible que se descubrió en un foro de java, porque lo de WIKI de Jboss no Funciono tal cual esta escrito. URL DEL BUG:http://forum.java.sun.com/thread.jspa?forumID=331&messageID=1264939&threadID=303797 en nuestro caso: d:\pruebas jar cf pruebas.jar org 7.-Se necesita un archivo (config.xml) para el wscompile de JWSDP 1.4 en nuestro caso: ---------------------------------------------------------------------------------------- No se preocupe por el TYPE eso lo hace el wscompile cuando funciona bien. 8.- Ejecutar el wscompile del toolkit de SUn para webservices llamado JWSDP version 1.4 en nuestro caso: d:\pruebas>wscompile -cp "pruebas.jar" -gen:server -f:rpcliteral -mapping jaxrpc-mapping.xml config.xml -cp= este es el classpath, todo lo que utilizen en las clases lo deben poner allí por que si no no sirve. -gen=es para que genere muchos archivos (type, wsdl.xml, jaxrpc-mapping.xml), para un Servicio Web de Servidor. -f:rpcliteral=NO SE PARA QUE ES PERO IDENTIFICA A LAS LLAMADAS CON UN LITERAL. -mapping jaxrpc-mapping.xml= especifica el nombre de archivo de mapeo a generar. Si termina bien pase al punto 9, si no, lea la documentacion con recelo y metase en los foros para ver si encuentra algo, referente al error que le salga, lo mas seguro se equivoco en un nombre ó no puso todas los .class en el jar que le dije que pusiera en el parametro -cp. Si todo sale bien el mismo generará 2 archivos un .wsdl y otro jaxrpc-mapping.xml en la raiz de d:\pruebas. copie el archivo OrganizacionService.wsdl de paso 8 en un directorio llamado wsdl dentro WEB-INF copie el archivo jaxrpc-mapping.xml en el Directorio WEB-INF 9.- Ahora necesitamos los archivos (web.xml y webservices.xml) estos lo copiamos de la wiki de JBossWS y los modificamos para reducir complejidad y cambiar los nombres de las clases, los mismos van ubicados en un directorio que debe crear, llamado WEB-INF: d:\pruebas | |config.xml _/-org |_/-sample |_Organizacion.java |_Organizacion.class |_OrganizationJSEEndpoint.java |_OrganizationJSEEndpoint.class |/WEB_INF |_web.xml |_webservices.xml |_jaxrpc-mapping.xml | |_/wsdl |_OrganizacionService.wsdl Archivo web.xml(necesario para indicar que es un SERVLET) "y que truco de j2ee": ---------------------------------------------------------------------------------------- Organizacion org.sample.OrganizationJSEEndpoint Organizacion /Organizacion ---------------------------------------------------------------------------------------- Archivo webservices.xml (Deployment Descriptor, esto creo que es para todos los Appl.Servers): ---------------------------------------------------------------------------------------- OrganizationServiceJSE WEB-INF/wsdl/OrganizationService.wsdl WEB-INF/jaxrpc-mapping.xml PortComponent OrganizationPort org.sample.Organizacion Organizacion 10.- Crear un archivo .war que contendrá toda la estructura de directorios creada junto con los archivos generados en nuestro caso: d:\pruebas> jar cf orgws.war * 11.- Copiar el archivo orgws.war en la carpeta deploy del servidor JBoss en nuestro caso: d:\pruebas>copy orgws.war d:\jboss\jboss-4.0.1RC1\server\default\deploy 12.- Espere un tiempo prudencial (unos 2 minutos máximo) para que JBoss reconozca el archivo .war y haga un hot deploy del mismo 13.- Para verificar si todo está correcto y el servicio web está activo, Abra una ventana de explorador web, copie en la barra de direcciones el url correspondiente al servidor de aplicaciones JBoss seguido del nombre del archivo .war, el nombre de la interfaz y luego ?wsdl. En nuestro caso: http://localhost:8080/orgws/Organizacion?wsdl | | | url servidor | | | | nombre del .war | nombre de la interfaz cuando presione enter debe desplegarse en la ventana del explorador el archivo wsdl correspondiente al servicio, en nuestro caso: