Diferencias entre columnas El mejor tutorial de SQL*Loader
Jul 10

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:

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).

This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution 3.0 License.

10 Responses to “Servicios web (5.1): poniendo Jdeveloper a punto con Axis(I)”

  1. deigote Says:

    Caramba, acabo de toparme con esto por casualidad y.. tú sí que te lo has currado ;-) un saludo y gracias por la mención.

  2. Sir Ragnar Says:

    Es lo menos que podía hacer. Gracias a ti por el curre. ;)

  3. Cesar Alvarado Says:

    Creo que tu explicacion es espectacular , procedo con las instrucciones y te comento como me fue , solo una preguna , tambien funciona con Axis2 ??

  4. Sir Ragnar Says:

    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.

  5. will Says:

    esta bueno tu articulo, no he fusionado(merge) el xml pero igual funciona, deberia hacerlo? gracias

  6. Sir Ragnar Says:

    Hola Will.
    ¿Igual funciona o funciona igual?. Yo creo que deberías hacer el merge, pero si te funciona igual…

  7. evelin Says:

    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

  8. Sir Ragnar Says:

    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

  9. Betsy Says:

    Me parece excepcional tu solucion, pero donde puedo publicar mi webservice a partir de mi .class.
    Saludos ;)

  10. Sir Ragnar Says:

    Hola Betsy.
    Si quieres publicar tu clase sigue el tutorial.

    Un saludo.