generación de servicios web con java

52
Generación de servicios web con JAVA Prerequisitos.................................................... 2 Verificación del jdk configurado por defecto en eclipse.........2 Configuración de tomcat.......................................... 6 Agregar el servidor.............................................6 Configuración de deploy.........................................9 Configuración de puerto para el servidor tomcat................10 Implementación de un servicio web con java......................11 Creación del proyecto para implementar el servicio web.........11 WSDL.........................................................20 XSD..........................................................21 Implementación de la parte servidora del servicio web..........22 Generación de clases del servicio web........................22 Despliegue del servicio web..................................31 Implementación del cliente del servicio web....................35 Generación de clases para el cliente.........................35 Creación de prueba unitaria..................................37

Upload: susana-rdz

Post on 15-Jan-2016

60 views

Category:

Documents


0 download

DESCRIPTION

Como hacer un servicio web en eclipse

TRANSCRIPT

Page 1: Generación de Servicios Web Con JAVA

Generación de servicios web con JAVAPrerequisitos......................................................................................................................................2

Verificación del jdk configurado por defecto en eclipse.................................................................2

Configuración de tomcat....................................................................................................................6

Agregar el servidor.........................................................................................................................6

Configuración de deploy................................................................................................................9

Configuración de puerto para el servidor tomcat........................................................................10

Implementación de un servicio web con java..................................................................................11

Creación del proyecto para implementar el servicio web............................................................11

WSDL........................................................................................................................................20

XSD...........................................................................................................................................21

Implementación de la parte servidora del servicio web...............................................................22

Generación de clases del servicio web.....................................................................................22

Despliegue del servicio web.....................................................................................................31

Implementación del cliente del servicio web...............................................................................35

Generación de clases para el cliente........................................................................................35

Creación de prueba unitaria.....................................................................................................37

Page 2: Generación de Servicios Web Con JAVA

Prerequisitos

Verificación del jdk configurado por defecto en eclipse1. Se elige la opción Window/Preferences

Page 3: Generación de Servicios Web Con JAVA

2. En la sección Java/Installed JREs se verifica que se tenga un jdk seleccionado por defecto.

3. En caso de no tener alguno, se debe instalar el jdk en una ruta sin espacios en blanco: C:\opt\Java\jdk1.7.0_51 (Observe que en este ejemplo se utiliza la unidad C, aún y cuando se tenga unidad D, porque en D se guardan datos, y en C el sistema operativo y software instalable.

Page 4: Generación de Servicios Web Con JAVA

a. Después de instalado el jdk, se tiene que agregar en el eclipse con la opción “Add” de Installed JREs y en el cuadro de diálogo que aparece elegir Standard VM:

Page 5: Generación de Servicios Web Con JAVA

b. Lo único que se tiene que se configura es la ruta del jdk requerido y se finaliza:

Page 6: Generación de Servicios Web Con JAVA

Configuración de tomcat

Agregar el servidor1. Se da clic derecho en la vista de “Severs” y se elige New/Server:

2. Se elige el servidor Tomcat v7.0 Server y se modifica su nombre agregando “.19” para que coincida con la versión a utilizar.

Page 7: Generación de Servicios Web Con JAVA
Page 8: Generación de Servicios Web Con JAVA

3. A continuación se elige el directorio donde se tenga descomprimido el tomcat (D:\opt\apache-tomcat-7.0.19, OJO: sobre opt para no tener espacios en blanco) y se elige Next:

Page 9: Generación de Servicios Web Con JAVA

4. En la última pantalla sólo se elige “Finish”

Page 10: Generación de Servicios Web Con JAVA

Configuración de deploy1. Con doble clic sobre el sevidor agregado se configura la ruta de despliegue del tomcat, en

Server Locations se elige “Use Tomcat installation (takes control of Tomcat installation)” para que nuestras aplicaciones se desplieguen en la ruta real del tomcat, y NO en una ruta temporal de eclipse. En el deploy path se modifica a “webapps” porque es la ruta que ya existe en el tomcat para desplegar aplicaciones:

Page 11: Generación de Servicios Web Con JAVA

Configuración de puerto para el servidor tomcat1. Con doble clic sobre el sevidor agregado se puede modificar el puerto HTTP que utilizará el

tomcat para desplegar las aplicaciones.

Page 12: Generación de Servicios Web Con JAVA

Implementación de un servicio web con java

Creación del proyecto para implementar el servicio web1. Con un clic derecho sobre la vista de Project Explorer se elige New/Project

Page 13: Generación de Servicios Web Con JAVA

2. Se elige un Java Project

Page 14: Generación de Servicios Web Con JAVA

3. Se asigna un nombre al proyecto y se configura el folder de código fuente eligiendo la opción “Configure default…”

Page 15: Generación de Servicios Web Con JAVA

4. Se cambia el folder de fuentes por defecto a src/main/java y se da clic en Ok.

Page 16: Generación de Servicios Web Con JAVA

5. Al avanzar en el wizard de la creación del proyecto ya se verá reflejado el source folder configurado.

Page 17: Generación de Servicios Web Con JAVA

6. En la pestaña de “Libraries” se agregan todos los jar de framework de axis2 que se ubican en su ruta donde se descomprimió (D:\opt\axis2-1.6.2\lib)

Page 18: Generación de Servicios Web Con JAVA

7. Al finalizar la creación del proyecto se verá en la sección de “Project Explorer” como se muestra a continuación:

8. Para que no esté visible una lista tan grande de jars, se puede filtrar la vista del “Project Explorer” eligiendo el pequeño triángulo que aparece en su sección superior y la opción “Customize View”

Page 19: Generación de Servicios Web Con JAVA

9. Se elige que se quiere ocultar las librerías externas:

10. Se tendrá la vista filtrada para tener más limpio el proyecto:

Page 20: Generación de Servicios Web Con JAVA

11. Se elige la opción de crear un nuevo folder (no source folder) en la raíz del proyecto:

12. Se crea el folder src/main/wsdl

Page 21: Generación de Servicios Web Con JAVA

13. Dentro de la carpeta creada se copian los archivos .wsdl y .xsd

WSDL<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://itq.edu/soa/miOperacion" targetNamespace="http://itq.edu/soa/miOperacion">

<wsdl:types><xs:schema targetNamespace="http://itq.edu/soa/miOperacion"

elementFormDefault="qualified"><xs:include schemaLocation="operacion.xsd"/>

</xs:schema></wsdl:types><wsdl:message name="MessageRequest">

<wsdl:part name="parameter" element="tns:request"/></wsdl:message><wsdl:message name="MessageResponse">

<wsdl:part name="parameter" element="tns:response"/></wsdl:message><wsdl:portType name="miOperacionPortType">

<wsdl:operation name="miOperacionOperation"><wsdl:input message="tns:MessageRequest"/><wsdl:output message="tns:MessageResponse"/>

</wsdl:operation></wsdl:portType><wsdl:binding name="miOperacionBinding" type="tns:miOperacionPortType">

<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="miOperacionOperation"><soap:operation soapAction="urn:#miOperacionOperation"/><wsdl:input>

<soap:body use="literal"/></wsdl:input><wsdl:output>

<soap:body use="literal"/></wsdl:output>

</wsdl:operation>

Page 22: Generación de Servicios Web Con JAVA

</wsdl:binding><wsdl:service name="miOperacionService">

<wsdl:port name="miOperacionPort" binding="tns:miOperacionBinding"><soap:address

location="http://localhost:8080/axis2/services/miOperacionService?wsdl"/></wsdl:port>

</wsdl:service></wsdl:definitions>

XSD<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:miop="http://itq.edu/soa/miOperacion" targetNamespace="http://itq.edu/soa/miOperacion" elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:element name="request"><xs:complexType>

<xs:sequence><xs:element name="cadena" type="xs:string"/>

</xs:sequence></xs:complexType>

</xs:element><xs:element name="response">

<xs:complexType><xs:sequence>

<xs:element name="cadena" type="xs:string"/></xs:sequence>

</xs:complexType></xs:element>

</xs:schema>

Page 23: Generación de Servicios Web Con JAVA

Implementación de la parte servidora del servicio web

Generación de clases del servicio web1. Se copia el archivo build.xml en la raíz del proyecto

<?xml version="1.0" encoding="UTF-8"?><project name="MiOperacion" default="package-server" basedir="."> <property file="build.properties"/> <property name="axis-lib" location="${axis-home}/lib"/> <property name="wsdl-name" value="${wsdl.name}"/> <property name="client-path" location="${client.path}"/> <property name="client-package-name" value="${client.package}"/> <property name="client-wsdl-uri" value="${wsdl.uri}"/> <property name="rutaserver" location="${server.path}"/> <property name="server-package-name" value="${server.package}"/> <property name="server-wsdl-uri" value="${wsdl.uri}"/> <property environment="env"/> <property name="tomcat_home" value="${catalina-home}"/> <property name="tomcat_deployment" value="${tomcat_home}\webapps"/> <property name="axis2_deployment" value="${tomcat_deployment}\axis2\WEB-INF\services"/> <path id="axis-classpath"> <fileset dir="${axis-home}/lib" includes="**/*.jar"/> </path> <target name="all-client" depends="clean-client,generate-client,compile-client,package-client"/> <target name="clean-client"> <echo message="Eliminando archivos java, class y jar"/> <delete quiet="true" dir="${client-path}"/> <delete quiet="true" file="${wsdl-name}.jar"/> </target> <target name="clean-server"> <echo message="Eliminando archivos java, class y aar"/> <delete quiet="true" dir="${rutaserver}"/> <delete quiet="true" file="${wsdl-name}.aar"/> </target> <target name="sclean-server"> <echo message="Eliminando archivos java, class y aar"/> <delete quiet="true" dir="${rutaserver}"/> <delete quiet="true" file="${wsdl-name}.aar"/> </target> <!-- Generate server linkage code from WSDL--> <target name="generate-server"> <echo message="Eliminando archivos java, class y aar"/> <delete quiet="true" dir="${rutaserver}"/>

Page 24: Generación de Servicios Web Con JAVA

<delete quiet="true" file="${wsdl-name}.aar"/> <echo message="Ejecutando WSDL2Java"/> <mkdir dir="${rutaserver}"/> <java classpathref="axis-classpath" fork="true" classname="org.apache.axis2.wsdl.WSDL2Java"> <!-- Generate async style server-code --> <!-- arg value="-a" --> <!-- Path donde se generara el codigo --> <!--arg value="-o" /> <arg value="${rutaserver}"/--> <!-- Specify a custom package name for the generated code --> <arg value="-p"/> <arg value="${server-package-name}"/> <!-- -S Source destination --> <arg value="-S"/> <arg value="server"/> <!-- -R Resources destination --> <arg value="-R"/> <arg value="src/main/resources"/> <!-- Valid databinding --> <arg value="-d"/> <arg value="adb"/> <!-- -ss parameter says generate server code --> <arg value="-ss"/> <!-- -sd parameter says generate server deployment files , i.e services.xml --> <arg value="-sd"/> <!-- Unpacks de databinding classes --> <!--arg value="-u"--> <!-- -uw parameter unwraps the request messages --> <!--arg value="-uw"--> <!-- url o path --> <arg value="-uri"/> <arg value="${server-wsdl-uri}"/> </java> <!-- Replace implementation class in deployment descriptor --> <!-- replace file="src/main/resources/services.xml" token="Skeleton" value="Impl"/--> <!-- echo message="Copiando clase principal del archivo temporal"/--> <!--copy file="temp/VobbServiceConfServiceImpl.java" todir="${serverpath}/com/serviceplatform/vobb/service/server/"/--> </target> <target name="generate-client"> <echo message="Running WSDL2Java task"/> <mkdir dir="${client-path}"/> <java classpathref="axis-classpath" fork="true" classname="org.apache.axis2.wsdl.WSDL2Java"> <!-- -o parameter sets the output root directory --> <arg value="-o"/> <arg value="${client-path}"/> <!-- -p parameter gives the package for Axis2 code generation --> <arg value="-p"/> <arg value="${client-package-name}"/>

Page 25: Generación de Servicios Web Con JAVA

<!-- -d parameter selects the databinding framework --> <arg value="-d"/> <arg value="adb"/> <!-- -u parameter unbundles data object classes --> <!--arg value="-u"/--> <!-- -uw parameter unwraps the request messages --> <!--arg value="-uw"/--> <!-- -s generates synchronous methods only --> <arg value="-s"/> <!-- -uri parameter provides the WSDL input --> <arg value="-uri"/> <arg value="${client-wsdl-uri}"/> </java> </target> <!-- Compile server code for deployment --> <target name="compile-server"> <delete quiet="true" dir="${rutaserver}/bin"/> <mkdir dir="${rutaserver}/bin"/> <!-- Compile the generated code --> <javac srcdir="${rutaserver}" destdir="${rutaserver}/bin" nowarn="${nowarn}" debug="true" deprecation="true"> <classpath> <path refid="axis-classpath"/> <pathelement path="${rutaserver}/bin"/> </classpath> </javac> </target> <target name="compile-client"> <delete quiet="true" dir="${client-path}/bin"/> <mkdir dir="${client-path}/bin"/> <!-- Compile the generated code --> <javac srcdir="${client-path}" destdir="${client-path}/bin" nowarn="${nowarn}" debug="true"> <classpath> <path refid="axis-classpath"/> <pathelement path="${client-path}/bin"/> </classpath> </javac> <!-- Compile the implementation classes --> <javac srcdir="${client-path}/src" destdir="${client-path}/bin" nowarn="${nowarn}" debug="true"> <classpath> <path refid="axis-classpath"/> <pathelement path="${client-path}/bin"/> </classpath> </javac> <copy file="log4j.properties" todir="${client-path}/bin"/> </target> <!-- Package server code as .aar file --> <target name="package-server"> <echo message="Copiando clase principal del archivo temporal"/> <jar jarfile="${wsdl-name}.aar" basedir="bin"> <metainf file="src/main/wsdl/services.xml"/> <metainf file="src/main/wsdl/${wsdl-name}.wsdl"/> <metainf file="src/main/wsdl/*.xsd"/>

Page 26: Generación de Servicios Web Con JAVA

<manifest> <attribute name="Funcionalidad" value="Web service de ejemplo"/> </manifest> </jar> </target> <target name="deploy" depends="package-server"> <echo message="Copiando archivo aar al directorio ${axis2_deployment}"/> <copy todir="${axis2_deployment}" file="${wsdl-name}.aar"/> </target> <!-- Package client code as .jar file --> <target name="package-client"> <jar jarfile="${wsdl-name}.jar" basedir="${client-path}/bin"/> </target> <target name="file-exists-then-fail"> <condition property="previousImplementation" value="true"> <not> <available file="log4j.properties" filepath="."/> </not> </condition> <fail unless="previousImplementation" message="A Previous Implementation exists, please run backup task"/> </target></project>

2. Se copia el archivo build.properties también en la raíz del proyecto

catalina-home=D:\\opt\\apache-tomcat-7.0.19axis-home=D:\\opt\\axis2-1.6.2wsdl.name=operacionserver.path=./serverserver.package=edu.itq.soa.mioperacion.serverclient.path=./clientclient.package=edu.itq.soa.mioperacion.clientwsdl.uri=./src/main/wsdl/operacion.wsdl

a. catalina-home es la ruta del tomcatb. axis-home es la ruta donde se descomprimió el axis2c. wsdl.name es el nombre del archivo .wsdl y el nombre del archivo .aar a generar.d. server.path es la ruta donde se generarán las clases del servicio web.e. server.package es el paquete de las clases del servicio web a generar.

Page 27: Generación de Servicios Web Con JAVA

f. client.path es la ruta donde se generarán las clases para generar un cliente del servicio web.

g. client.package es el paquete de las clases para generar un cliente del servicio web.h. ssdl.uri es la ruta de dónde se tomará el archivo .wsdl para generar la parte

servidora y cliente.3. Se configuran las propiedades para que se pueda generar el código de la implementación

del servicio web.4. Se arrastra el archivo build.xml en la vista de “Ant”.

5. Se expanden las tareas de ant y se ejecuta generate-server.

6. Se presentará en la consola el resultado de la ejecución:

Page 28: Generación de Servicios Web Con JAVA

7. Se refresca el árbol del proyecto:

8. En la carpeta configurada se habrán generado las clases del servicio web:

Page 29: Generación de Servicios Web Con JAVA

9. Para la implementación del servicio web se requiere mover o copiar las clases generadas en la carpeta server a el source folder del proyecto (src/main/java). Se puede hacer con la vista de “Remote Systems” o desde un explorador de archivos de Windows:

10. Se pega en la carpeta del source folder desde la vista de “Remote Systems” o el explorador de Windows.

Page 30: Generación de Servicios Web Con JAVA

11. Refrescando la vista del proyecto podremos ver las clases compiladas en el source folder:

12. Se implementa el Skeleton, que es la clase que contiene al método que representa al servicio web a exponerse. La implementación consta de cumplir con el contrato definido, en este caso es responder un objeto de tipo Response:

/** * MiOperacionServiceSkeleton.java * * This file was auto-generated from WSDL * by the Apache Axis2 version: 1.6.2 Built on : Apr 17, 2012 (05:33:49 IST) */package edu.itq.soa.mioperacion.server;

import edu.itq.soa.mioperacion.Request;import edu.itq.soa.mioperacion.Response;

/** * MiOperacionServiceSkeleton java skeleton for the axisService */public class MiOperacionServiceSkeleton {

/** * Auto generated method signature * * @param request * @return response */public Response miOperacionOperation(Request request) {

Response response = new Response();response.setCadena("Hola mundo!");return response;

}

Page 31: Generación de Servicios Web Con JAVA

}13. Se copia el archivo descriptor del servicio web services.xml que se generó en

src/main/resources a la carpeta src/main/wsdl

Page 32: Generación de Servicios Web Con JAVA

Despliegue del servicio web1. Ya que se tiene implementado el servicio web se procede a empaquetarlo para poderlo

desplegar. Esta operación SE TIENE QUE HACER CADA VEZ QUE SE EFECTÚE UN CAMBIO EN LA IMPLEMENTACIÓN DEL SERVICIO WEB. Para empaquetar la implementación del servicio web en su correspondiente archivo .arr (Axis2 archive) se ejecuta la tarea “package-server” desde la vista Ant.

2. Se obtiene un resultado exitoso como el que se muestra a continuación:

3. Se refresca el proyecto y se verá que en la raíz quedó generado el archivo .aar

Page 33: Generación de Servicios Web Con JAVA

4. Se copia el archivo .aar generado y se despliega copiándolo en la ruta de servicios del axis2, dentro del servidor web tomcat.

5. Se inicia el servidor tomcat con el clic derecho y opción “Start”:

6. Una vez levantado el servidor se tendrá una salida en la consola en la que se reporta el despliegue correcto del servicio web.

Page 34: Generación de Servicios Web Con JAVA

Feb 24, 2015 10:32:21 PM org.apache.catalina.core.AprLifecycleListener initINFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\opt\Java\jdk1.7.0_51\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/opt/Java/jre7/bin/client;C:/opt/Java/jre7/bin;C:/opt/Java/jre7/lib/i386;C:\Program Files (x86)\IBM\WebSphere MQ\java\lib;C:\Program Files (x86)\IBM\WebSphere MQ\java\lib64;C:\oraclexe\app\oracle\product\11.2.0\server\bin;;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;c:\Program Files (x86)\Intel\iCLS Client\;c:\Program Files\Intel\iCLS Client\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Windows Live\Shared;C:\IBM\BPM\v8.0\db2\BIN;C:\IBM\BPM\v8.0\db2\FUNCTION;C:\IBM\BPM\v8.0\db2\SAMPLES\REPL;C:\Program Files\TortoiseSVN\bin;D:\opt\jboss-4.2.3.GA\bin;C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin;C:\opt\Java\jdk1.6.0_35\bin;D:\opt\gradle-1.9\bin;C:\Program Files\OpenVPN\bin;C:\Program Files (x86)\IBM\WebSphere MQ\bin64;C:\Program Files (x86)\IBM\WebSphere MQ\bin;D:\opt\apache-ant-1.8.0\bin;C:\Program Files (x86)\IDM Computer Solutions\UltraEdit\;C:\Program Files (x86)\CVSNT\;C:\Program Files (x86)\SSH Communications Security\SSH Secure Shell;D:\opt\eclipse;;.Feb 24, 2015 10:32:21 PM org.apache.coyote.AbstractProtocol initINFO: Initializing ProtocolHandler ["http-bio-8080"]Feb 24, 2015 10:32:21 PM org.apache.coyote.AbstractProtocol initINFO: Initializing ProtocolHandler ["ajp-bio-8009"]Feb 24, 2015 10:32:21 PM org.apache.catalina.startup.Catalina loadINFO: Initialization processed in 366 msFeb 24, 2015 10:32:21 PM org.apache.catalina.core.StandardService startInternalINFO: Starting service CatalinaFeb 24, 2015 10:32:21 PM org.apache.catalina.core.StandardEngine startInternalINFO: Starting Servlet Engine: Apache Tomcat/7.0.19Feb 24, 2015 10:32:21 PM org.apache.catalina.startup.HostConfig deployWARINFO: Deploying web application archive axis2.war[INFO] Clustering has been disabled[INFO] Deploying module: addressing-1.6.2 - file:/D:/opt/apache-tomcat-7.0.19/webapps/axis2/WEB-INF/modules/addressing-1.6.2.mar[INFO] Deploying module: metadataExchange-1.6.2 - file:/D:/opt/apache-tomcat-7.0.19/webapps/axis2/WEB-INF/modules/mex-1.6.2.mar[INFO] Deploying module: mtompolicy-1.6.2 - file:/D:/opt/apache-tomcat-7.0.19/webapps/axis2/WEB-INF/modules/mtompolicy-1.6.2.mar[INFO] Deploying module: ping-1.6.2 - file:/D:/opt/apache-tomcat-7.0.19/webapps/axis2/WEB-INF/modules/ping-1.6.2.mar[INFO] Deploying module: script-1.6.2 - file:/D:/opt/apache-tomcat-7.0.19/webapps/axis2/WEB-INF/modules/scripting-1.6.2.mar

Page 35: Generación de Servicios Web Con JAVA

[INFO] Deploying module: soapmonitor-1.6.2 - file:/D:/opt/apache-tomcat-7.0.19/webapps/axis2/WEB-INF/modules/soapmonitor-1.6.2.mar[INFO] Deploying Web service: operacion.aar - file:/D:/opt/apache-tomcat-7.0.19/webapps/axis2/WEB-INF/services/operacion.aar[INFO] Deploying Web service: version.aar - file:/D:/opt/apache-tomcat-7.0.19/webapps/axis2/WEB-INF/services/version.aar[WARN] No transportReceiver for org.apache.axis2.transport.http.AxisServletListener found. An instance for HTTP will be configured automatically. Please update your axis2.xml file!Feb 24, 2015 10:32:23 PM org.apache.catalina.startup.HostConfig deployDirectoryINFO: Deploying web application directory docsFeb 24, 2015 10:32:23 PM org.apache.catalina.startup.HostConfig deployDirectoryINFO: Deploying web application directory examplesFeb 24, 2015 10:32:23 PM org.apache.catalina.core.ApplicationContext logINFO: ContextListener: contextInitialized()Feb 24, 2015 10:32:23 PM org.apache.catalina.core.ApplicationContext logINFO: SessionListener: contextInitialized()Feb 24, 2015 10:32:23 PM org.apache.catalina.core.ApplicationContext logINFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@1d90a5f')Feb 24, 2015 10:32:23 PM org.apache.catalina.startup.HostConfig deployDirectoryINFO: Deploying web application directory host-managerFeb 24, 2015 10:32:23 PM org.apache.catalina.startup.HostConfig deployDirectoryINFO: Deploying web application directory managerFeb 24, 2015 10:32:23 PM org.apache.catalina.startup.HostConfig deployDirectoryINFO: Deploying web application directory ROOTFeb 24, 2015 10:32:23 PM org.apache.coyote.AbstractProtocol startINFO: Starting ProtocolHandler ["http-bio-8080"]Feb 24, 2015 10:32:23 PM org.apache.coyote.AbstractProtocol startINFO: Starting ProtocolHandler ["ajp-bio-8009"]Feb 24, 2015 10:32:23 PM org.apache.catalina.startup.Catalina startINFO: Server startup in 1447 ms

Page 36: Generación de Servicios Web Con JAVA

Implementación del cliente del servicio web

Generación de clases para el cliente1. Se configuran el archivo build.properties para la generación del cliente, particularmente

los siguientes datos:

client.path=./clientclient.package=edu.itq.soa.mioperacion.client

2. Se ejecuta la tarea de ant generate-client

3. La consola debe mostrará la generación exitosa de las clases necesarias para el cliente web service:

Buildfile: D:\opt\ws\itq201501\MiServicio\build.xmlgenerate-client: [echo] Running WSDL2Java task [mkdir] Created dir: D:\opt\ws\itq201501\MiServicio\client [java] Retrieving document at './src/main/wsdl/operacion.wsdl'. [java] Retrieving schema at 'operacion.xsd', relative to 'file:/D:/opt/ws/itq201501/MiServicio/./src/main/wsdl/operacion.wsdl'. [java] log4j:WARN No appenders could be found for logger (org.apache.axis2.description.WSDL11ToAllAxisServicesBuilder). [java] log4j:WARN Please initialize the log4j system properly.BUILD SUCCESSFULTotal time: 2 seconds

Page 37: Generación de Servicios Web Con JAVA

4. Se refresca el proyecto para ver la carpeta client generada

5. Observamos que tenemos la carpeta client en la raíz del proyecto con la clase MiOperacionServiceStub.java generada:

Page 38: Generación de Servicios Web Con JAVA

Creación de prueba unitaria6. El cliente que se creará usando la clase generada será una prueba unitaria, por lo que

generaremos un nuevo source folder explícito para pruebas llamado src/main/test, para el cuál se da clic derecho en la raíz del proyecto y elegimos la opción “New/Source Folder”.

7. Asignamos el nombre src/main/test.

Page 39: Generación de Servicios Web Con JAVA

8. En el source folder creado vamos a crear una nueva prueba unitaria, para ello con clic derecho en él, se selecciona New/Other

Page 40: Generación de Servicios Web Con JAVA

9. Seleccionamos que queremos generar un nuevo JUnit Test Case

10. La prueba unitaria será con la versión 4, para hacer uso de anotaciones, por lo tanto seleccionamos esa opción y proporcionamos el nombre de la prueba unitaria, que por buena práctica le pondremos un nombre acorde a su funcionalidad y la palabra Test al final. Además también proporcionaremos el nombre del paquete, que por buena práctica también, se asignará el mismo paquete de la clase a probar.

Page 41: Generación de Servicios Web Con JAVA

11. Una vez finalizado el wizard de la prueba unitaria, aceptamos agregar la librería de junit 4 a nuestro proyecto.

12. La prueba unitaria se genera con el contenido más básico:

Page 42: Generación de Servicios Web Con JAVA

13. Para poder implementar la prueba unitaria necesitamos la clase del cliente generada que nos servirá para conectarnos al servicio web, para ellos copiamos la carpeta generada a partir de su paquete:

Page 43: Generación de Servicios Web Con JAVA

14. La pegamos en el source folder de la prueba unitaria.

Page 44: Generación de Servicios Web Con JAVA

15. La implementación consiste en crear una instancia de la clase stub, la cual recibirá un objeto con el nombre del request definido y responderá un objeto con el nombre del response definido en el archivo .wsdl. EL CONSTRUCTOR DE LA CLASE STUB POR DEFECTO APUNTA AL SERVICIO WEB CON LA URL DEFINIDA EN LA SECCION SERVICE DEL WSDL. SI SE REQUIERE OTRA URL SE DEBE PROPORCIONAR COMO PARÁMETRO DEL CONSTRUCTOR. EN ESTE EJEMPLO SE PREPARÓ EL WSDL PARA TENER LA RUTA QUE TENDRÁ EL SERVICIO UNA VEZ DESPLEGADO EN EL TOMCAT (http://localhost:8080/axis2/services/miOperacionService?wsdl).

/** * Prueba unitaria. */package edu.itq.soa.mioperacion.client;

import java.rmi.RemoteException;

import org.junit.Assert;import org.junit.Test;

import edu.itq.soa.mioperacion.client.MiOperacionServiceStub.Request;import edu.itq.soa.mioperacion.client.MiOperacionServiceStub.Response;

/** * @author tlopez */public class MiOperacionTest {

/** * Mensaje esperado del servicio web. */private static final String MENSAJE_ESPERADO = "Hola mundo!";

/** * Prueba unitaria para el servicio web expuesto "miOperacion". * Las anotaciones es ligar la funcionalidad de una clase a un

método, en este caso * la clase Test del framework de junit, debe anteponerse la @ al

nombre de la clase. * Si se quita la anotación el método DEJA de ser una prueba

unitaria. * @throws RemoteException */@Testpublic void miOperacionTest() throws RemoteException {

/* la clase Stub tiene la funcionalidad requerida para conectarse al servicio web.

En el constructor se debe proporcionar la URL del servicio si es que difiere de lo especificado

en la sección service del wsdl. Ejemplo: MiOperacionServiceStub miOperacionServiceStub = new

MiOperacionServiceStub("http://localhost:8080/axis2/services/miOperacionService?wsdl");

*/

Page 45: Generación de Servicios Web Con JAVA

MiOperacionServiceStub miOperacionServiceStub = new MiOperacionServiceStub();

/* Se debe crear el objeto que corresponda a la entrada de la operación definida en el wsdl, en este caso

coincide con el nombre Request. */Request request = new Request();

/* Se asignan todos los hijos del elemento, en este caso sólo se tiene el hijo cadena. */

request.setCadena("Cadena que se envia al servicio web");

/* La invocación del servicio web es invocar al método definido como operación en el wsdl. */

Response response = miOperacionServiceStub.miOperacionOperation(request);

/* El éxito de una prueba unitaria consiste en que se cumpla una aseveración, dicha aseveración se

plantea con base al conocimiento que se tiene por anticipado del comportamiento del método, como

existen varios tipo de aseveraciones, junit proporciona diverso métodos assert */

Assert.assertEquals(MENSAJE_ESPERADO, response.getCadena());}

}

Page 46: Generación de Servicios Web Con JAVA

16. Para ejecutar la prueba unitaria se da clic derecho y se elige “Run As/Junit Test” sobre el método a ejecutar o sobre la clase que contiene varias pruebas unitarias si se quisieran correr todas.

17. La ejecución exitosa del servicio web indicará que el assert se cumplió: