Actualmente necesito desplegar una serie de web services en una aplicación que corre sobre Tomcat 5.x . Para los servicios web estoy probando Axis. Como utilizo Jdeveloper para el desarrollo java y paso de instalarme el eclipse, he instalado y configurado un proyecto para desplegar estos servicios.
Afortunadamente otras personas ya se han enfrentado a este problema antes. En el blog de deigote hay una serie de artículos donde describe con encomiable exactitud todos los pasos que ha ido siguiendo:
- Servicios web (1): Instalando Tomcat y Axis
- Servicios web (2): Desplegando un servicio JWS
- Servicios web (3): Desplegando un servicio WDSS
- Servicios web (4): Instalando PostgreSQL y JDBC
- Servicios web (5): Poniendo Eclipse a punto
Si sientes miedo de los web services y te parece que te va a costar diox y ayuda implementarlos te aconsejo que le eches un vistazo a la serie porque hace que parezca tan fácil como es.
Descargando los binarios de Axis
Lo primero es ir a la página de Axis y bajarse la versión que consideréis oportuna. Yo he bajado la 1.4 (axis-bin-1_4.zip). Deberíamos descomprimir el fichero en alún directorio más o menos permanente. Pongamos por ejemplo C:\jdevlibs\axis.
Crear el worksapace y su proyecto en Jdeveloper
Vamos a crear una nueva application con su proyecto.
En mi caso, los servicios web van a convivir en el mismo contexto con páginas JSF. Por tanto, selecciono en el Application Navigator el proyecto, botón derecho, propiedades y me voy al nodo Technology Scope. Lo configuro para que abarque HTML, java, JSF, y JSP and Servlets”.
Configuro también el nodo J2EE Application para que se despliegue en un contexto al que le he dado el nombre de wsaxis.
La estructura del proyecto en el Application Navigator debe haber quedado así:
En este punto, lo mejor es comprobar que si creo una página jsf funciona. Así, si luego peta algo, podremos estar seguros de que en el Application Navigator selecciono el proyecto, botón derecho, Open JSF Navigation. Arrastramos de la paleta de componentes una página JSF y la llamamos /prueba.jsp.
Le hacemos doble click y vamos haciendo avanzar el asistente de creación con siguiente-siguiente. Luego le colocamos por ejemplo un Output Text de la paleta de JSF HTML y le ponemos un texto cualquiera.
Ahora pulsamos con el botón derecho sobre la página de prueba y le damos a Run.
Deberíamos obtener un resultado como éste o significará que hemos hecho algo mal:
Agregar la funcionalidad de axis
Ahora debemos descomprimir el archivo zip de la versión de axis que hayamos descargado a un directorio no temporal. Hay que tener en cuenta que vamos a registrar en JDeveloper las librerías y no deberíamos moverlas después de haberlo hecho o no las podrá encontrar después.
Una vez descomprimidas, copiamos todo el contenido de la carpeta <axis>/lib a la carpeta /public_html/WEB-INF/lib de nuestro proyecto.
Después copiamos los ficheros(que no los direcotorios) de la carpeta <axis>/webapps/axis a la carpeta public_html del proyecto.
Ahora el fichero <axis>/webapps/axis/WEB-INF/users.lst a la carpeta public_html/WEB-INF del proyecto.
Para que no nos pase como al amigo Deigote, copiaremos también los ficheros de propiedades necesarios. Para ello crearemos una carpeta src en la carpeta de nuestro proyecto.
A esta carpeta debemos copiar el fichero <axis>/lib/log4j.properties y los ficheros i18n.properties y i18n_ja.properties de la carpeta <axis>/webapps/axis/WEB-INF/classes a la nueva carpeta src.
Es necesario agregar las librerías de axis a la lista de las que dispone jdeveloper. Para ello, vamos a las propiedades del proyecto y le damos al botón Add Library.
En el diálogo que se abre hay que agregar al nodo Class Path el contenido de la carpeta <axis>/lib. Ya, si queremos rizar el rizo, al nodo Doc Path le podemos agregar la carpeta <axis>/doc. Como sólo nos hemos descargado los binarios, tendremos que dejar el nodo Source Path vacío.
Después de crear la librería la seleccionamos y aceptamos.
El nodo Libraries del proyecto debe haber quedado más o menos así:
Fusionar el fichero web.xml
El último paso es fusionar el fichero web.xml de nuestra aplicación con el que viene con axis. En principio no son exluyentes, por lo que el merge es sencillo.
web.xml de la aplicación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?xml version = '1.0' encoding = 'windows-1252'?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"> <description>Fichero web.xml para tutorial de prueba se servicios axis sobre Jdeveloper. http://www.tsoracle.com/wparchives/2007/07/10/servicios-web-51-poniendo-jdeveloper-a-punto-con-axis/#more-34</description> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>35</session-timeout> </session-config> <mime-mapping> <extension>html</extension> <mime-type>text/html</mime-type> </mime-mapping> <mime-mapping> <extension>txt</extension> <mime-type>text/plain</mime-type> </mime-mapping> </web-app> |
web.xml que viene con axis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Apache-Axis</display-name> <listener> <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class> </listener> <servlet> <servlet-name>AxisServlet</servlet-name> <display-name>Apache-Axis Servlet</display-name> <servlet-class> org.apache.axis.transport.http.AxisServlet </servlet-class> </servlet> <servlet> <servlet-name>AdminServlet</servlet-name> <display-name>Axis Admin Servlet</display-name> <servlet-class> org.apache.axis.transport.http.AdminServlet </servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet> <servlet-name>SOAPMonitorService</servlet-name> <display-name>SOAPMonitorService</display-name> <servlet-class> org.apache.axis.monitor.SOAPMonitorService </servlet-class> <init-param> <param-name>SOAPMonitorPort</param-name> <param-value>5001</param-value> </init-param> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SOAPMonitorService</servlet-name> <url-pattern>/SOAPMonitor</url-pattern> </servlet-mapping> <!-- uncomment this if you want the admin servlet --> <!-- <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping> --> <session-config> <!-- Default to 5 minute session timeouts --> <session-timeout>5</session-timeout> </session-config> <!-- currently the W3C havent settled on a media type for WSDL; http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft for now we go with the basic 'it's XML' response --> <mime-mapping> <extension>wsdl</extension> <mime-type>text/xml</mime-type> </mime-mapping> <mime-mapping> <extension>xsd</extension> <mime-type>text/xml</mime-type> </mime-mapping> <welcome-file-list id="WelcomeFileList"> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.jws</welcome-file> </welcome-file-list> </web-app> |
web.xml merge de los dos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | <?xml version = '1.0' encoding = 'windows-1252'?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"> <description>Fichero web.xml para tutorial de prueba se servicios axis sobre Jdeveloper. http://www.tsoracle.com/wparchives/2007/07/10/servicios-web-51-poniendo-jdeveloper-a-punto-con-axis/#more-34</description> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <!-- Inicio del merge para axis --> <listener> <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class> </listener> <servlet> <servlet-name>AxisServlet</servlet-name> <!--<display-name> Apache-Axis Servlet</display-name>--> <servlet-class> org.apache.axis.transport.http.AxisServlet </servlet-class> </servlet> <servlet> <servlet-name>AdminServlet</servlet-name> <!--<display-name> Axis Admin Servlet</display-name>--> <servlet-class> org.apache.axis.transport.http.AdminServlet </servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet> <servlet-name>SOAPMonitorService</servlet-name> <!--<display-name> SOAPMonitorService</display-name>--> <servlet-class> org.apache.axis.monitor.SOAPMonitorService </servlet-class> <init-param> <param-name>SOAPMonitorPort</param-name> <param-value>5001</param-value> </init-param> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SOAPMonitorService</servlet-name> <url-pattern>/SOAPMonitor</url-pattern> </servlet-mapping> <!-- uncomment this if you want the admin servlet --> <!-- <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping> --> <!-- Fin del merge para axis --> <session-config> <session-timeout>35</session-timeout> </session-config> <mime-mapping> <extension>html</extension> <mime-type>text/html</mime-type> </mime-mapping> <mime-mapping> <extension>txt</extension> <mime-type>text/plain</mime-type> </mime-mapping> <!-- Comienzo con los mime-mapping para axis --> <!-- currently the W3C havent settled on a media type for WSDL; http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft for now we go with the basic 'it's XML' response --> <mime-mapping> <extension>wsdl</extension> <mime-type>text/xml</mime-type> </mime-mapping> <mime-mapping> <extension>xsd</extension> <mime-type>text/xml</mime-type> </mime-mapping> <!-- Fin de los mime-mapping de axis --> <!-- Welcome-file-list de axis --> <welcome-file-list id="WelcomeFileList"> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.jws</welcome-file> </welcome-file-list> <!-- Fin de Welcome-file-list de axis --> </web-app> |
Comprobar que axis funciona correctamente
Ya sólo queda comprobar que axis funciona. Para ello ejecutamos la página index.jsp.
Y deberíamos ver la página del servidor donde podremos comprobar en el enlace Validation que no nos falta de ná(de lo obligatorio).


























September 1st, 2007 at 11:49 am
Caramba, acabo de toparme con esto por casualidad y.. tú sí que te lo has currado
un saludo y gracias por la mención.
September 29th, 2007 at 1:28 pm
Es lo menos que podía hacer. Gracias a ti por el curre.
March 8th, 2008 at 8:15 pm
Creo que tu explicacion es espectacular , procedo con las instrucciones y te comento como me fue , solo una preguna , tambien funciona con Axis2 ??
March 9th, 2008 at 7:48 pm
Hola Cesar.
Me alegro de que te haya sido útil la guía.
No lo he probado con Axis2, por lo que tampoco puedo responder a tu pregunta.
April 30th, 2008 at 10:31 pm
esta bueno tu articulo, no he fusionado(merge) el xml pero igual funciona, deberia hacerlo? gracias
April 30th, 2008 at 11:40 pm
Hola Will.
¿Igual funciona o funciona igual?. Yo creo que deberías hacer el merge, pero si te funciona igual…
May 3rd, 2008 at 1:39 am
Me parece muy buena tu explicacion, estoy comenzando a hacer un servicio web, pero aun tengo muchas dudas, por favor puedes decirme como consumo un servicio web desde un servlet usando Axis, gracias
May 6th, 2008 at 9:11 pm
Hola evelin. La verdad es que no he experimentado mucho más con esto. Si no me equivoco Axis es principalmente para publicar servicios web. Si lo que quieres es consumirlos creo que es bastante más sencillo y no necesitas axis. Échale un vistazo a este enlace http://www.programacion.net/java/tutorial/servic_web/1/#pag1_cliente
Un saludo
June 5th, 2008 at 1:20 am
Me parece excepcional tu solucion, pero donde puedo publicar mi webservice a partir de mi .class.
Saludos
June 8th, 2008 at 8:02 pm
Hola Betsy.
Si quieres publicar tu clase sigue el tutorial.
Un saludo.