Anda di halaman 1dari 48

Generacin de servicios web con JAVA

Prerequisitos....................................................................................................... 2
Verificacin del jdk configurado por defecto en eclipse...................................2
Configuracin de tomcat..................................................................................... 6
Agregar el servidor.......................................................................................... 6
Configuracin de deploy.................................................................................. 9
Configuracin de puerto para el servidor tomcat..........................................10
Implementacin de un servicio web con java...................................................11
Creacin del proyecto para implementar el servicio web..............................11
WSDL.......................................................................................................... 20
XSD............................................................................................................. 21
Implementacin de la parte servidora del servicio web.................................22
Generacin de clases del servicio web.......................................................22
Despliegue del servicio web.......................................................................31
Implementacin del cliente del servicio web.................................................35
Generacin de clases para el cliente..........................................................35
Creacin de prueba unitaria.......................................................................37

Prerequisitos
Verificacin del jdk configurado por defecto en eclipse
1. Se elige la opcin Window/Preferences

2. En la seccin 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, an y cuando se tenga unidad D, porque
en D se guardan datos, y en C el sistema operativo y software instalable.

a. Despus de instalado el jdk, se tiene que agregar en el eclipse con


la opcin Add de Installed JREs y en el cuadro de dilogo que
aparece elegir Standard VM:

b. Lo nico que se tiene que se configura es la ruta del jdk requerido


y se finaliza:

Configuracin de tomcat
Agregar el servidor
1. 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 versin a utilizar.

3. A continuacin 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:

4. En la ltima pantalla slo se elige Finish

Configuracin de deploy
1. 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:

Configuracin de puerto para el servidor tomcat


1. Con doble clic sobre el sevidor agregado se puede modificar el puerto
HTTP que utilizar el tomcat para desplegar las aplicaciones.

Implementacin de un servicio web con java


Creacin del proyecto para implementar el servicio web
1. Con un clic derecho sobre la vista de Project Explorer se elige
New/Project

2. Se elige un Java Project

3. Se asigna un nombre al proyecto y se configura el folder de cdigo


fuente eligiendo la opcin Configure default

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


Ok.

5. Al avanzar en el wizard de la creacin del proyecto ya se ver reflejado


el source folder configurado.

6. En la pestaa de Libraries se agregan todos los jar de framework de


axis2 que se ubican en su ruta donde se descomprimi (D:\opt\axis21.6.2\lib)

7. Al finalizar la creacin del proyecto se ver en la seccin de Project


Explorer como se muestra a continuacin:

8. Para que no est visible una lista tan grande de jars, se puede filtrar la
vista del Project Explorer eligiendo el pequeo tringulo que aparece
en su seccin superior y la opcin Customize View

9. Se elige que se quiere ocultar las libreras externas:

10.Se tendr la vista filtrada para tener ms limpio el proyecto:

11.Se elige la opcin de crear un nuevo folder (no source folder) en la raz
del proyecto:

12.Se crea el folder src/main/wsdl

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>

</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>

Implementacin de la parte servidora del servicio web


Generacin de clases del servicio web
1. Se copia el archivo build.xml en la raz 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\WEBINF\services"/>
<path id="axis-classpath">
<fileset dir="${axis-home}/lib" includes="**/*.jar"/>
</path>
<target name="all-client" depends="clean-client,generate-client,compileclient,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}"/>

<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}"/>
<!-- -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"/>
<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 tambin en la raz del proyecto

catalina-home=D:\\opt\\apache-tomcat-7.0.19
axis-home=D:\\opt\\axis2-1.6.2
wsdl.name=operacion
server.path=./server
server.package=edu.itq.soa.mioperacion.server
client.path=./client
client.package=edu.itq.soa.mioperacion.client
wsdl.uri=./src/main/wsdl/operacion.wsdl
a. catalina-home es la ruta del tomcat
b. axis-home es la ruta donde se descomprimi el axis2
c. wsdl.name es el nombre del archivo .wsdl y el nombre del
archivo .aar a generar.
d. server.path es la ruta donde se generarn las clases del servicio
web.
e. server.package es el paquete de las clases del servicio web a
generar.
f. client.path es la ruta donde se generarn 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 dnde se tomar el archivo .wsdl para
generar la parte servidora y cliente.
3. Se configuran las propiedades para que se pueda generar el cdigo de la
implementacin 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 ejecucin:

7. Se refresca el rbol del proyecto:

8. En la carpeta configurada se habrn generado las clases del servicio


web:

9. Para la implementacin 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.

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 mtodo que


representa al servicio web a exponerse. La implementacin 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;
}

13.Se copia el archivo descriptor del servicio web services.xml que se


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

Despliegue del servicio web


1. Ya que se tiene implementado el servicio web se procede a
empaquetarlo para poderlo desplegar. Esta operacin SE TIENE QUE
HACER CADA VEZ QUE SE EFECTE UN CAMBIO EN LA IMPLEMENTACIN
DEL SERVICIO WEB. Para empaquetar la implementacin 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 continuacin:

3. Se refresca el proyecto y se ver que en la raz qued generado el


archivo .aar

4. Se copia el archivo .aar generado y se despliega copindolo en la ruta de


servicios del axis2, dentro del servidor web tomcat.

5. Se inicia el servidor tomcat con el clic derecho y opcin 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.

Feb 24, 2015 10:32:21 PM org.apache.catalina.core.AprLifecycleListener init


INFO: 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:\Wind
ows;C:/opt/Java/jre7/bin/client;C:/opt/Java/jre7/bin;C:/opt/Java/jre7/lib/i386;C:\Progra
m 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\System
32\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\v
8.0\db2\SAMPLES\REPL;C:\Program Files\TortoiseSVN\bin;D:\opt\jboss4.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 init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Feb 24, 2015 10:32:21 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Feb 24, 2015 10:32:21 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 366 ms
Feb 24, 2015 10:32:21 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Feb 24, 2015 10:32:21 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.19
Feb 24, 2015 10:32:21 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive axis2.war
[INFO] Clustering has been disabled
[INFO] Deploying module: addressing-1.6.2 - file:/D:/opt/apache-tomcat7.0.19/webapps/axis2/WEB-INF/modules/addressing-1.6.2.mar
[INFO] Deploying module: metadataExchange-1.6.2 - file:/D:/opt/apache-tomcat7.0.19/webapps/axis2/WEB-INF/modules/mex-1.6.2.mar
[INFO] Deploying module: mtompolicy-1.6.2 - file:/D:/opt/apache-tomcat7.0.19/webapps/axis2/WEB-INF/modules/mtompolicy-1.6.2.mar
[INFO] Deploying module: ping-1.6.2 - file:/D:/opt/apache-tomcat7.0.19/webapps/axis2/WEB-INF/modules/ping-1.6.2.mar
[INFO] Deploying module: script-1.6.2 - file:/D:/opt/apache-tomcat7.0.19/webapps/axis2/WEB-INF/modules/scripting-1.6.2.mar
[INFO] Deploying module: soapmonitor-1.6.2 - file:/D:/opt/apache-tomcat7.0.19/webapps/axis2/WEB-INF/modules/soapmonitor-1.6.2.mar
[INFO] Deploying Web service: operacion.aar - file:/D:/opt/apache-tomcat7.0.19/webapps/axis2/WEB-INF/services/operacion.aar
[INFO] Deploying Web service: version.aar - file:/D:/opt/apache-tomcat7.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 deployDirectory
INFO: Deploying web application directory docs
Feb 24, 2015 10:32:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory examples
Feb 24, 2015 10:32:23 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Feb 24, 2015 10:32:23 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Feb 24, 2015 10:32:23 PM org.apache.catalina.core.ApplicationContext log
INFO: 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 deployDirectory
INFO: Deploying web application directory host-manager
Feb 24, 2015 10:32:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory manager
Feb 24, 2015 10:32:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory ROOT
Feb 24, 2015 10:32:23 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Feb 24, 2015 10:32:23 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Feb 24, 2015 10:32:23 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1447 ms

Implementacin del cliente del servicio web


Generacin de clases para el cliente
1. Se configuran el archivo build.properties para la generacin del cliente,
particularmente los siguientes datos:
client.path=./client
client.package=edu.itq.soa.mioperacion.client
2. Se ejecuta la tarea de ant generate-client

3. La consola debe mostrar la generacin exitosa de las clases necesarias


para el cliente web service:
Buildfile: D:\opt\ws\itq201501\MiServicio\build.xml
generate-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 SUCCESSFUL
Total time: 2 seconds

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

5. Observamos que tenemos la carpeta client en la raz del proyecto con la


clase MiOperacionServiceStub.java generada:

Creacin de prueba unitaria


6. El cliente que se crear usando la clase generada ser una prueba
unitaria, por lo que generaremos un nuevo source folder explcito para
pruebas llamado src/main/test, para el cul se da clic derecho en la raz
del proyecto y elegimos la opcin New/Source Folder.

7. Asignamos el nombre src/main/test.

8. En el source folder creado vamos a crear una nueva prueba unitaria,


para ello con clic derecho en l, se selecciona New/Other

9. Seleccionamos que queremos generar un nuevo JUnit Test Case

10.La prueba unitaria ser con la versin 4, para hacer uso de anotaciones,
por lo tanto seleccionamos esa opcin y proporcionamos el nombre de la
prueba unitaria, que por buena prctica le pondremos un nombre acorde
a su funcionalidad y la palabra Test al final. Adems tambin
proporcionaremos el nombre del paquete, que por buena prctica
tambin, se asignar el mismo paquete de la clase a probar.

11.Una vez finalizado el wizard de la prueba unitaria, aceptamos agregar la


librera de junit 4 a nuestro proyecto.

12.La prueba unitaria se genera con el contenido ms bsico:

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:

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

15.La implementacin 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 PARMETRO 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
mtodo, en este caso
* la clase Test del framework de junit, debe anteponerse la @ al
nombre de la clase.
* Si se quita la anotacin el mtodo DEJA de ser una prueba
unitaria.
* @throws RemoteException
*/
@Test
public 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 seccin service del wsdl.
Ejemplo: MiOperacionServiceStub miOperacionServiceStub =
new
MiOperacionServiceStub("http://localhost:8080/axis2/services/miOperaci
onService?wsdl");

*/
MiOperacionServiceStub miOperacionServiceStub = new
MiOperacionServiceStub();
/* Se debe crear el objeto que corresponda a la entrada de la
operacin 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 slo
se tiene el hijo cadena. */
request.setCadena("Cadena que se envia al servicio web");
/* La invocacin del servicio web es invocar al mtodo
definido como operacin en el wsdl. */
Response response =
miOperacionServiceStub.miOperacionOperation(request);
/* El xito de una prueba unitaria consiste en que se cumpla
una aseveracin, dicha aseveracin se
plantea con base al conocimiento que se tiene por
anticipado del comportamiento del mtodo, como
existen varios tipo de aseveraciones, junit proporciona
diverso mtodos assert */
Assert.assertEquals(MENSAJE_ESPERADO, response.getCadena());
}
}

16.Para ejecutar la prueba unitaria se da clic derecho y se elige Run


As/Junit Test sobre el mtodo a ejecutar o sobre la clase que contiene
varias pruebas unitarias si se quisieran correr todas.

17.La ejecucin exitosa del servicio web indicar que el assert se cumpli:

Anda mungkin juga menyukai