Download creación de webservices

Document related concepts
no text concepts found
Transcript
Web Service con firma digital
FRAMEWORK JAVA 2.1
CREACIÓN DE
WEBSERVICES
Versión 1.1
MARZO 2007
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 1
Web Service con firma digital
FRAMEWORK JAVA 2.1
1 TABLA DE CONTENIDO
1
TABLA DE CONTENIDO............................................................................ 2
2
INTRODUCCIÓN ........................................................................................ 3
3
HERRAMIENTA DE DESARROLLO ANT ................................................. 3
4
CREACION SERVICIO WEB...................................................................... 3
5
CREACIÓN CLIENTE WEB ....................................................................... 5
6
PROBLEMAS DETECTADOS.................................................................... 5
7
FICHEROS EJEMPLO................................................................................ 6
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 2
Web Service con firma digital
FRAMEWORK JAVA 2.1
2 INTRODUCCIÓN
Este documento indica como construir servicios web y clientes para dichos
servicios firmando el mensaje de petición y de respuesta utilizando el estándar
XML-Dsig. Para esta firma y la validación de la misma se utilizará la plataforma
ASF, debiendo cumplir el servicio y el cliente todos los pasos necesarios para
estar de alta en la misma, como se explica en el manual de la misma.
3 HERRAMIENTA DE DESARROLLO ANT
Primeramente y antes de seguir adelante indicar que como herramienta de
desarrollo de tanto los WebServices como los clientes de los mismos, se
decido utilizar Ant. Un proyecto de código abierto de Apache Software
Fondation.
Ant es una herramienta desarrollada para sustituir al make que podríamos
hacer en cualquier sistema operativo, pero que depende de plataforma ya que
esta hecha en Java y sus ficheros de configuración se basan en XML. Su uso y
funcionamiento se puede asemejar a los ficheros bat, shell o script de otros
sistemas operativos.
Dentro de un fichero de configuración de ANT, como puede ser el fichero
build.xml que veremos más adelante, cada una de las tareas que se deben
realizar se denomina target. Además se pueden establecer variables que podrá
ser accesibles por cualquier tarea, a través de la marca property. De todas
formas podemos encontrar una relación del significado de cada una de las
marcas y sus parámetros dentro de la página http://ant.apache.org.
4 CREACION SERVICIO WEB
Pasos a seguir para la creación de un Servicio Web:
1. Descargar
la
versión
1.2.1
de
axis
de
la
dirección
http://archive.apache.org/dist/ws/axis/1_2_1/axis-bin-1_2_1.zip.
2. Descomprimir el zip de axis en cualquier directorio. A partir de ahora esa
ruta será la variable "axis.home".
3. Copiar el contenido del directorio webapps/axis del directorio axis.home
a nuestro directorio web del servicio que estemos creando. Eliminando el
directorio ‘samples’ que se encuentra dentro de él, ya que no es
necesario. Al concluir este paso tendremos incluido dentro de nuestro
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 3
Web Service con firma digital
FRAMEWORK JAVA 2.1
directorio ‘WEB-INF’, las clases y librerías necesarias para empezar con
nuestro servicio web.
4. Hay que crear un fichero usando ANT, como el fichero build.xml de
ejemplo (el que viene al final de este apartado o dentro de los ejemplos
disponibles dentro de soja_int (ASF->Ejemplos)). Este fichero hay que
modificarlo cambiando el nombre del proyecto y las variables que
afecten a las rutas físicas de nuestro proyecto.
5. Crear la clase que hará de servicio web, para ello heredar de la clase de
sistemas: sistemas.ws.ServicioWeb. Usar el constructor de esta clase
para indicar el nombre del fichero de configuración y que recoja las
variables del mismo. Además en esta clase se definirán las operaciones
a las que va a dar servicio nuestro WebServices.
6. Luego hay que modificar el fichero anterior eliminando el elemento target
llamado autentication-java2wsdl, sustituyendolo por uno propio de
nuestro servicio y que ejecuta la tarea "axis-java2wsdl" que genera el
WebService, empaquetando las clases generadas dentro del paquete
indicado. Además de estas clases se crea un fichero descriptor de
nuestro servicio web con extensión wdsl y nombre el que nosotros le
indiquemos. Es recomendable que si va a haber varios webservices se
cree una tarea para cada servicio.
Se puede tomar el ejemplo "autentication-java2wsdl" como guía de
creación de esta tarea.
7. Acontinuación crear el fichero deploy.wsdd, del cual se puede ver un
ejemplo al final de este punto, ajustandolo con el nombre de la clase del
servicio web y el nombre del mismo. En nuestro caso, el servicio es
UsuJAutenticationWS y la clase es usuj.ws.UsuJAutenticationWS.
8. Realizar un primer despliegue del servicio en un servidor de aplicaciones
usando para ello la tarea deploy que esta incluida en el fichero build.xml.
La tarea deploy solo crea el ear a partir de la web y copia el fichero en el
directorio "deploy.dest". Para el primer despliegue tal vez sea necesario
modificar algún fichero de configuración del servidor de aplicaciones
para que reconozca la aplicación (server.xml y http-web-site.xml).
9. Ejecutar la tarea deploy-wsdl para realizar el despliegue inicial del
WebService en Axis, es decir, para realizar la publicación dentro Axis del
servicio web.
10. Copiar el fichero server-config.wsdd del directorio WEB-INF de la
aplicación desplegada al de nuestro proyecto de desarrollo.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 4
Web Service con firma digital
FRAMEWORK JAVA 2.1
Obs: Para comprobar que nuestro servicio se encuentra dado de alta y
responde a peticiones, puede hacerse
una petición a la dirección
correspondiente a nuestro servicio y siguiendo la estructura:
http://servidor:puerto/aplicación/services/ClaseServicio
Esta petición nos debe responder un mensaje de AXIS para saber que esta
funcionando correctamente.
5 CREACIÓN CLIENTE WEB
Una vez creado nuestro webservice, es hora de crear el cliente. Este punto
también se puede seguir en el caso de que no hayamos creado nosotros el
servicio, ya que lo únicamente necesario es el fichero wsdl que describe las
operaciones del mismo.
Una vez con el fichero comentado, que siguiendo nuestro caso se obtendría en
el paso 6. Se debería definir tarea "axis-wsdl2java" de Ant, de la que podemos
ver un ejemplo en "autentication-wsdl2java". Esta tarea nos creara todas las
clases necesarias para invocar el webservice asi como una clase de test que
nos permitirá testear el cliente generado en caso de ser necesario. Para poder
ejecutar esta clase de test será necesario tener dentro de nuestro proyecto de
Eclipse importado el jar de junit.
6 PROBLEMAS DETECTADOS
Se han detectado los siguientes problemas en este proceso de creación de
cliente y servicio web:
- La generación de los paquetes no es todo lo correcta que deberia ser.
Al generar el webservice le indicamos un namespace que luego añade al
paquete que indiquemos en la generación del cliente, por lo que habra que
tenerlo en cuenta.
- La variable "service_address" dentro de la clase Locator es incorrecta,
le falta añadir el nombre del servicio que se va a usar al final.
- El test que crea para recibir el wsdl no funciona nunca a pesar de que
los demas si funcionan y de que el servicio devuelve correctamente el WSDL si
se le invoca a traves de un explorador.
-En OC4J podemos tener problemas para generar el wsdl puesto que el
parser que emplea no es del todo estandar para solucionarlo existe un parche
para el parser de oracle. Enviar un correo a Arquitectura e Integración de
aplicaciones para recibir este parche.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 5
Web Service con firma digital
FRAMEWORK JAVA 2.1
7 FICHEROS EJEMPLO
Ejemplo de build.xml:
<project name="usuj_ws">
<property name="appname" value="${ant.project.name}" />
<property name="src.dir" value="java/fuentes/src"/>
<property name="web.dir" value="java/fuentes/web"/>
<property name="build.dir" value="java/fuentes/web/WEB-INF"/>
<property name="deploy.dir" value="java/ear"/>
<property name="axis.home" value="D:/descargas/axis-bin-1_2_1/axis-1_2_1"/>
<property name="deploy.dest" value="D:/Producto/oracle9.0.4/j2ee/home8052/icm"/>
<property name="target.port" value="8052"/>
<property name="target.server" value="pc317668"/>
<property name="target.appname" value="${appname}"/>
<property name="endpoint-stub.wsdd" value="java/fuentes/web/WEB-INF/deploy.wsdd"/>
<path id="axis.classpath">
<fileset dir="${axis.home}/lib">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${build.dir}/lib">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${build.dir}/classes">
<include name="**/*.class"/>
</fileset>
</path>
<taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />
<target name="autentication-java2wsdl" description="Crea el WSDL de la clase
especificada">
<axis-java2wsdl
classname="usuj.ws.UsuJAutenticationWS"
namespace="usuj.ws.autentication"
location="http://${target.server}:${target.port}/${appname}/services"
classpath="${build.dir}/classes"
output="${build.dir}/UsuJAutenticationWS.wsdl">
<mapping namespace="urn:UsuJAutenticationWS" package="usujWs.servicio"/>
<classpath path="${build.dir}"/>
</axis-java2wsdl>
</target>
<target name="autentication-wsdl2java" description="Crea las clases necesarias para
invocar un webservice, es decir, el cliente del servicio">
<axis-wsdl2java
output="${src.dir}"
testcase="true"
verbose="true"
url="${build.dir}/UsuJAutenticationWS.wsdl">
<mapping namespace="http://axis.apache.org/ns/interop"
package="usujWs.servicio"/>
</axis-wsdl2java>
</target>
<target name="compile" description="Compile main source tree java files">
<mkdir dir="${build.dir}/classes"/>
<javac destdir="${build.dir}/classes" debug="true" optimize="false"
deprecation="false" failonerror="true">
<src path="${src.dir}"/>
<classpath>
<path refid="compile.classpath"/>
<fileset dir="${web.dir}/WEB-INF/lib" includes="*.jar"/>
</classpath>
</javac>
</target>
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 6
Web Service con firma digital
FRAMEWORK JAVA 2.1
<target name="deploy" description="Crea el .ear de la aplicación y lo deja en el
directorio ear">
<war destfile="${deploy.dir}/${appname}.war" webxml="${build.dir}/web.xml">
<fileset dir="${web.dir}"/>
</war>
<ear destfile="${deploy.dir}/${appname}.ear" appxml="${deploy.dir}/METAINF/application.xml">
<fileset dir="${deploy.dir}" includes="*.war"/>
</ear>
<delete>
<fileset dir="${deploy.dir}" includes="**/*.war"/>
</delete>
<copy file="${deploy.dir}/${appname}.ear" todir="${deploy.dest}"/>
</target>
<target name="deploy-wsdl" description="Realiza el despliegue inicial del WebService en
Axis">
<axis-admin
port="${target.port}"
hostname="${target.server}"
failonerror="true"
servletpath="${target.appname}/services/AdminService"
debug="true"
xmlfile="${endpoint-stub.wsdd}"/>
</target>
/project>
Ejemplo de deploy.wsdd:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="UsuJAutenticationWS" provider="java:RPC">
<parameter name="className" value="usuj.ws.UsuJAutenticationWS"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 7