Generación de Servicios Web Con JAVA



Comments



Description

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 Prerequisitos Verificación del jdk configurado por defecto en eclipse 1. Se elige la opción Window/Preferences 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. 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: Lo único que se tiene que se configura es la ruta del jdk requerido y se finaliza: .b. 19” para que coincida con la versión a utilizar. . Se elige el servidor Tomcat v7.0 Server y se modifica su nombre agregando “. Se da clic derecho en la vista de “Severs” y se elige New/Server: 2.Configuración de tomcat Agregar el servidor 1. . A continuación se elige el directorio donde se tenga descomprimido el tomcat (D:\opt\apache-tomcat-7.3.0.19. OJO: sobre opt para no tener espacios en blanco) y se elige Next: . 4. En la última pantalla sólo se elige “Finish” . y NO en una ruta temporal de eclipse. 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.Configuración de deploy 1. En el deploy path se modifica a “webapps” porque es la ruta que ya existe en el tomcat para desplegar aplicaciones: . Con doble clic sobre el sevidor agregado se puede modificar el puerto HTTP que utilizará el tomcat para desplegar las aplicaciones. .Configuración de puerto para el servidor tomcat 1. Con un clic derecho sobre la vista de Project Explorer se elige New/Project .Implementación de un servicio web con java Creación del proyecto para implementar el servicio web 1. 2. Se elige un Java Project . Se asigna un nombre al proyecto y se configura el folder de código fuente eligiendo la opción “Configure default…” .3. Se cambia el folder de fuentes por defecto a src/main/java y se da clic en Ok.4. . 5. Al avanzar en el wizard de la creación del proyecto ya se verá reflejado el source folder configurado. . 6.2\lib) . 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\axis21.6. Para que no esté visible una lista tan grande de jars.7. Al finalizar la creación del proyecto se verá en la sección de “Project Explorer” como se muestra a continuación: 8. 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” . 9.Se tendrá la vista filtrada para tener más limpio el proyecto: . Se elige que se quiere ocultar las librerías externas: 10. Se elige la opción de crear un nuevo folder (no source folder) en la raíz del proyecto: 12.11.Se crea el folder src/main/wsdl . w3.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xsd WSDL <?xml version="1.edu/soa/miOperacion" elementFormDefault="qualified"> <xs:include schemaLocation="operacion.org/2001/XMLSchema-instance" xmlns:tns="http://itq.xmlsoap.org/2001/XMLSchema" xmlns:soapenc="http://schemas.Dentro de la carpeta creada se copian los archivos .edu/soa/miOperacion" targetNamespace="http://itq.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.wsdl y .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> .xmlsoap.edu/soa/miOperacion"> <wsdl:types> <xs:schema targetNamespace="http://itq.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.13.0" encoding="UTF-8"?> <wsdl:definitions xmlns:wsdl="http://schemas.org/wsdl/http/" xmlns:xs="http://www.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xsi="http://www.xmlsoap.w3. 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> .edu/soa/miOperacion" targetNamespace="http://itq.</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.org/2001/XMLSchema" xmlns:miop="http://itq.w3. package-client"/> <target name="clean-client"> <echo message="Eliminando archivos java.generate-client.xml en la raíz del proyecto <?xml version="1.jar"/> </path> <target name="all-client" depends="clean-client. class y jar"/> <delete quiet="true" dir="${client-path}"/> <delete quiet="true" file="${wsdl-name}."> <property file="build. class y aar"/> <delete quiet="true" dir="${rutaserver}"/> <delete quiet="true" file="${wsdl-name}.compileclient.uri}"/> <property name="rutaserver" location="${server.aar"/> </target> <!-.Implementación de la parte servidora del servicio web Generación de clases del servicio web 1. Se copia el archivo build.path}"/> <property name="server-package-name" value="${server.jar"/> </target> <target name="clean-server"> <echo message="Eliminando archivos java.package}"/> <property name="server-wsdl-uri" value="${wsdl.path}"/> <property name="client-package-name" value="${client.name}"/> <property name="client-path" location="${client.package}"/> <property name="client-wsdl-uri" value="${wsdl.properties"/> <property name="axis-lib" location="${axis-home}/lib"/> <property name="wsdl-name" value="${wsdl.0" encoding="UTF-8"?> <project name="MiOperacion" default="package-server" basedir=".Generate server linkage code from WSDL--> <target name="generate-server"> <echo message="Eliminando archivos java.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="**/*. class y aar"/> <delete quiet="true" dir="${rutaserver}"/> .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"/> <echo message="Ejecutando WSDL2Java"/> <mkdir dir="${rutaserver}"/> <java classpathref="axis-classpath" fork="true" classname="org.wsdl.-ss parameter says generate server code --> <arg value="-ss"/> <!-.apache.-R Resources destination --> <arg value="-R"/> <arg value="src/main/resources"/> <!-.axis2.-d parameter selects the databinding framework --> <arg value="-d"/> <arg value="adb"/> .xml --> <arg value="-sd"/> <!-.Unpacks de databinding classes --> <!--arg value="-u"--> <!-.url o path --> <arg value="-uri"/> <arg value="${server-wsdl-uri}"/> </java> <!-.apache.-sd parameter says generate server deployment files .Valid databinding --> <arg value="-d"/> <arg value="adb"/> <!-.Specify a custom package name for the generated code --> <arg value="-p"/> <arg value="${server-package-name}"/> <!-.Path donde se generara el codigo --> <!--arg value="-o" /> <arg value="${rutaserver}"/--> <!-. i.-o parameter sets the output root directory --> <arg value="-o"/> <arg value="${client-path}"/> <!-.arg value="-a" --> <!-.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.axis2.Generate async style server-code --> <!-.Replace implementation class in deployment descriptor --> <!-.echo message="Copiando clase principal del archivo temporal"/--> <!--copy file="temp/VobbServiceConfServiceImpl.WSDL2Java"> <!-.replace file="src/main/resources/services.e services.<delete quiet="true" file="${wsdl-name}.-p parameter gives the package for Axis2 code generation --> <arg value="-p"/> <arg value="${client-package-name}"/> <!-.xml" token="Skeleton" value="Impl"/--> <!-.wsdl.-uw parameter unwraps the request messages --> <!--arg value="-uw"--> <!-.WSDL2Java"> <!-.-S Source destination --> <arg value="-S"/> <arg value="server"/> <!-. Package server code as .-s generates synchronous methods only --> <arg value="-s"/> <!-.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> <!-.<!-.wsdl"/> <metainf file="src/main/wsdl/*.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"/> <!-.-uw parameter unwraps the request messages --> <!--arg value="-uw"/--> <!-.xsd"/> <manifest> <attribute name="Funcionalidad" value="Web service de ejemplo"/> </manifest> .-u parameter unbundles data object classes --> <!--arg value="-u"/--> <!-.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.aar file --> <target name="package-server"> <echo message="Copiando clase principal del archivo temporal"/> <jar jarfile="${wsdl-name}.Compile server code for deployment --> <target name="compile-server"> <delete quiet="true" dir="${rutaserver}/bin"/> <mkdir dir="${rutaserver}/bin"/> <!-.xml"/> <metainf file="src/main/wsdl/${wsdl-name}.properties" todir="${client-path}/bin"/> </target> <!-.aar" basedir="bin"> <metainf file="src/main/wsdl/services.-uri parameter provides the WSDL input --> <arg value="-uri"/> <arg value="${client-wsdl-uri}"/> </java> </target> <!-. path=. .Package client code as ."/> </not> </condition> <fail unless="previousImplementation" message="A Previous Implementation exists.client wsdl. e.properties también en la raíz del proyecto catalina-home=D:\\opt\\apache-tomcat-7.server client.wsdl a. wsdl. f.mioperacion.name=operacion server. client.package=edu./client client.package es el paquete de las clases del servicio web a generar. catalina-home es la ruta del tomcat b.path es la ruta donde se generarán las clases para generar un cliente del servicio web.aar a generar.19 axis-home=D:\\opt\\axis2-1.soa. server.6. Se copia el archivo build.2 wsdl.wsdl y el nombre del archivo .uri=.aar"/> </target> <!-. server.package=edu. axis-home es la ruta donde se descomprimió el axis2 c.path=.jar" basedir="${client-path}/bin"/> </target> <target name="file-exists-then-fail"> <condition property="previousImplementation" value="true"> <not> <available file="log4j.itq. d.itq.jar file --> <target name="package-client"> <jar jarfile="${wsdl-name}.name es el nombre del archivo .soa. please run backup task"/> </target> </project> 2.mioperacion.0.</jar> </target> <target name="deploy" depends="package-server"> <echo message="Copiando archivo aar al directorio ${axis2_deployment}"/> <copy todir="${axis2_deployment}" file="${wsdl-name}.properties" filepath="./src/main/wsdl/operacion.path es la ruta donde se generarán las clases del servicio web./server server. xml en la vista de “Ant”.package es el paquete de las clases para generar un cliente del servicio web. Se arrastra el archivo build. ssdl. 4. Se configuran las propiedades para que se pueda generar el código de la implementación del servicio web.g.uri es la ruta de dónde se tomará el archivo . Se presentará en la consola el resultado de la ejecución: . Se expanden las tareas de ant y se ejecuta generate-server.wsdl para generar la parte servidora y cliente. h. 6. 5. 3. client. Se refresca el árbol del proyecto: 8. En la carpeta configurada se habrán generado las clases del servicio web: .7. 9.Se pega en la carpeta del source folder desde la vista de “Remote Systems” o el explorador de Windows. 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. . 2012 (05:33:49 IST) */ package edu.6.Request. } .11.Refrescando la vista del proyecto podremos ver las clases compiladas en el source folder: 12.mioperacion. import edu. return response. 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.mioperacion.mioperacion. /** * 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().itq.soa.itq.itq.soa.soa.Se implementa el Skeleton. import edu.2 Built on : Apr 17. en este caso es responder un objeto de tipo Response: /** * MiOperacionServiceSkeleton.server.setCadena("Hola mundo!").Response.java * * This file was auto-generated from WSDL * by the Apache Axis2 version: 1. response. Se copia el archivo descriptor del servicio web services.} 13.xml que se generó en src/main/resources a la carpeta src/main/wsdl . arr (Axis2 archive) se ejecuta la tarea “package-server” desde la vista Ant. Se obtiene un resultado exitoso como el que se muestra a continuación: 3.Despliegue del servicio web 1. Se refresca el proyecto y se verá que en la raíz quedó generado el archivo . 2. Ya que se tiene implementado el servicio web se procede a empaquetarlo para poderlo desplegar. Para empaquetar la implementación del servicio web en su correspondiente archivo .aar . Esta operación SE TIENE QUE HACER CADA VEZ QUE SE EFECTÚE UN CAMBIO EN LA IMPLEMENTACIÓN DEL SERVICIO WEB. . Se inicia el servidor tomcat con el clic derecho y opción “Start”: 6.4. 5.aar generado y se despliega copiándolo en la ruta de servicios del axis2. . Una vez levantado el servidor se tendrá una salida en la consola en la que se reporta el despliegue correcto del servicio web. dentro del servidor web tomcat. Se copia el archivo . C:\Program Files\TortoiseSVN\bin.C:\opt\Java\jdk1.0_51\bin.7.apache.mar [INFO] Deploying module: mtompolicy-1.2. 2015 10:32:21 PM org.core.library.C:/opt/Java/jre7/bin/client.C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL.mar [INFO] Deploying module: script-1.6.D:\opt\gradle-1.0..0\db2\FUNCTION.19/webapps/axis2/WEB-INF/modules/scripting-1.StandardEngine startInternal INFO: Starting Servlet Engine: Apache Tomcat/7.C:\Program Files (x86)\IBM\WebSphere MQ\bin64.19/webapps/axis2/WEB-INF/modules/mex-1.D:\opt\jboss4. 2015 10:32:21 PM org.9\bin.6.catalina.0.mar [INFO] Deploying module: soapmonitor-1.apache.StandardService startInternal INFO: Starting service Catalina Feb 24. 2015 10:32:21 PM org.19/webapps/axis2/WEB-INF/modules/soapmonitor-1.6.file:/D:/opt/apache-tomcat7.6.19/webapps/axis2/WEB-INF/services/version.0\.6.C:/opt/Java/jre7/bin.apache.GA\bin.C:\Program Files (x86)\Windows Live\Shared.C:\Wind ows.C:\IBM\BPM\v 8. 2015 10:32:21 PM org.6.2..C:\Program Files\OpenVPN\bin.3.C:\Progra m Files (x86)\IBM\WebSphere MQ\java\lib.file:/D:/opt/apache-tomcat7.C:\IBM\BPM\v8.6. 2015 10:32:21 PM org.C:\Windows\System 32\Wbem.C:\Windows.0_35\bin.0.startup.D:\opt\eclipse.aar .2 .19 Feb 24.2.C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT.path: C:\opt\Java\jdk1.mar [INFO] Deploying Web service: operacion.0\db2\BIN.file:/D:/opt/apache-tomcat7.2. 2015 10:32:21 PM org.0.AbstractProtocol init INFO: Initializing ProtocolHandler ["http-bio-8080"] Feb 24.c:\Program Files\Intel\iCLS Client\.file:/D:/opt/apache-tomcat7.0.19/webapps/axis2/WEB-INF/modules/ping-1.0.0\bin.core.C:\Program Files\Intel\Intel(R) Management Engine Components\DAL.AbstractProtocol init INFO: Initializing ProtocolHandler ["ajp-bio-8009"] Feb 24.catalina.8.C:\Program Files\Intel\WiFi\bin\.0.mar [INFO] Deploying module: metadataExchange-1.C:\Program Files (x86)\MySQL\MySQL Server 5.Catalina load INFO: Initialization processed in 366 ms Feb 24.C:\Program Files\Intel\Intel(R) Management Engine Components\IPT.catalina.C:\Program Files (x86)\CVSNT\. Feb 24.2.2 .6.0\server\bin.apache.C:\Windows\Sun\Java\bin.apache.6.file:/D:/opt/apache-tomcat7.mar [INFO] Deploying module: ping-1.0.aar .2.2.C:\Windows\system32.C:\Program Files\Common Files\Microsoft Shared\Windows Live.C:\Program Files (x86)\IBM\WebSphere MQ\java\lib64.C:\IBM\BPM\v8.catalina.6.HostConfig deployWAR INFO: Deploying web application archive axis2.apache.aar [INFO] Deploying Web service: version.6.file:/D:/opt/apache-tomcat7.AprLifecycleListener init INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.Feb 24.aar .war [INFO] Clustering has been disabled [INFO] Deploying module: addressing-1.C:\Program Files (x86)\SSH Communications Security\SSH Secure Shell.apache.C:\Program Files\Common Files\Intel\WirelessCommon\..6.2 .core.C:/opt/Java/jre7/lib/i386.0\bin.19/webapps/axis2/WEB-INF/modules/mtompolicy-1.C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live.2 .19/webapps/axis2/WEB-INF/services/operacion.D:\opt\apache-ant-1.2 .startup.0\db2\SAMPLES\REPL.C:\Program Files (x86)\IBM\WebSphere MQ\bin.coyote.2.6.C:\Windows\System32\WindowsPowerShell\v1.file:/D:/opt/apache-tomcat7.C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common.19/webapps/axis2/WEB-INF/modules/addressing-1.0.2 . 2015 10:32:21 PM org.C:\Windows\system32.catalina.C:\Program Files (x86)\IDM Computer Solutions\UltraEdit\.file:/D:/opt/apache-tomcat7.c:\Program Files (x86)\Intel\iCLS Client\.C:\oraclexe\app\oracle\product\11.coyote. catalina. 2015 10:32:23 PM org.apache.catalina.HostConfig deployDirectory INFO: Deploying web application directory docs Feb 24.AxisServletListener found.apache.apache.jasper.apache. 2015 10:32:23 PM org. An instance for HTTP will be configured automatically.apache.core.http.coyote.apache.catalina.core.compiler.startup.apache.ApplicationContext log INFO: SessionListener: contextInitialized() Feb 24.catalina. 2015 10:32:23 PM org.startup. 'org.ApplicationContext log INFO: ContextListener: contextInitialized() Feb 24.catalina.HostConfig deployDirectory INFO: Deploying web application directory host-manager Feb 24.HostConfig deployDirectory INFO: Deploying web application directory ROOT Feb 24.ApplicationContext log INFO: ContextListener: attributeAdded('org.xml file! Feb 24.startup.AbstractProtocol start INFO: Starting ProtocolHandler ["http-bio-8080"] Feb 24.compiler.apache. 2015 10:32:23 PM org.apache.jasper.HostConfig deployDirectory INFO: Deploying web application directory manager Feb 24.transport.TldLocationsCache'.apache.core. 2015 10:32:23 PM org.apache.HostConfig deployDirectory INFO: Deploying web application directory examples Feb 24.startup.startup. 2015 10:32:23 PM org.TldLocationsCache@1d90a5f') Feb 24.coyote.axis2.catalina.apache.startup.[WARN] No transportReceiver for org. 2015 10:32:23 PM org. 2015 10:32:23 PM org.catalina.apache.AbstractProtocol start INFO: Starting ProtocolHandler ["ajp-bio-8009"] Feb 24. 2015 10:32:23 PM org. Please update your axis2.catalina.Catalina start INFO: Server startup in 1447 ms .apache.catalina. 2015 10:32:23 PM org. 2015 10:32:23 PM org. wsdl'. La consola debe mostrará la generación exitosa de las clases necesarias para el cliente web service: Buildfile: D:\opt\ws\itq201501\MiServicio\build.package=edu. [java] log4j:WARN Please initialize the log4j system properly./src/main/wsdl/operacion. [java] Retrieving schema at 'operacion. [java] log4j:WARN No appenders could be found for logger (org./src/main/wsdl/operacion. Se configuran el archivo build.xsd'.WSDL11ToAllAxisServicesBuilder).description.itq.properties para la generación del cliente.axis2. particularmente los siguientes datos: client. BUILD SUCCESSFUL Total time: 2 seconds .xml generate-client: [echo] Running WSDL2Java task [mkdir] Created dir: D:\opt\ws\itq201501\MiServicio\client [java] Retrieving document at '.wsdl'. Se ejecuta la tarea de ant generate-client 3.soa.mioperacion.path=./client client. relative to 'file:/D:/opt/ws/itq201501/MiServicio/.client 2.Implementación del cliente del servicio web Generación de clases para el cliente 1.apache. java generada: .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. para el cuál se da clic derecho en la raíz del proyecto y elegimos la opción “New/Source Folder”. Asignamos el nombre src/main/test. El cliente que se creará usando la clase generada será una prueba unitaria. .Creación de prueba unitaria 6. por lo que generaremos un nuevo source folder explícito para pruebas llamado src/main/test. 7. En el source folder creado vamos a crear una nueva prueba unitaria. para ello con clic derecho en él.8. se selecciona New/Other . . Seleccionamos que queremos generar un nuevo JUnit Test Case 10.9. para hacer uso de anotaciones.La prueba unitaria será con la versión 4. que por buena práctica le pondremos un nombre acorde a su funcionalidad y la palabra Test al final. que por buena práctica también. Además también proporcionaremos el nombre del paquete. se asignará el mismo paquete de la clase a probar. por lo tanto seleccionamos esa opción y proporcionamos el nombre de la prueba unitaria. aceptamos agregar la librería de junit 4 a nuestro proyecto.Una vez finalizado el wizard de la prueba unitaria. 12.11.La prueba unitaria se genera con el contenido más básico: . . 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. . junit. 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).client.La implementación consiste en crear una instancia de la clase stub.client. /** * Prueba unitaria.itq. Ejemplo: MiOperacionServiceStub miOperacionServiceStub = new MiOperacionServiceStub("http://localhost:8080/axis2/services/miOperaci onService?wsdl"). en este caso * la clase Test del framework de junit. la cual recibirá un objeto con el nombre del request definido y responderá un objeto con el nombre del response definido en el archivo .Assert.soa.wsdl. debe anteponerse la @ al nombre de la clase. import java. * @throws RemoteException */ @Test public void miOperacionTest() throws RemoteException { /* la clase Stub tiene la funcionalidad requerida para conectarse al servicio web.mioperacion.MiOperacionServiceStub. En el constructor se debe proporcionar la URL del servicio si es que difiere de lo especificado en la sección service del wsdl. */ package edu.MiOperacionServiceStub.mioperacion. import edu.RemoteException.itq. import org.Request.soa. import org. import edu. */ private static final String MENSAJE_ESPERADO = "Hola mundo!".itq. /** * @author tlopez */ public class MiOperacionTest { /** * Mensaje esperado del servicio web.soa.junit.rmi.client. SI SE REQUIERE OTRA URL SE DEBE PROPORCIONAR COMO PARÁMETRO DEL CONSTRUCTOR. .Test.mioperacion. * Si se quita la anotación el método DEJA de ser una prueba unitaria. /** * Prueba unitaria para el servicio web expuesto "miOperacion".Response. * Las anotaciones es ligar la funcionalidad de una clase a un método.15. EL CONSTRUCTOR DE LA CLASE STUB POR DEFECTO APUNTA AL SERVICIO WEB CON LA URL DEFINIDA EN LA SECCION SERVICE DEL WSDL. */ Request request = new Request(). */ Response response = miOperacionServiceStub. */ request. /* Se debe crear el objeto que corresponda a la entrada de la operación definida en el wsdl.miOperacionOperation(request). en este caso sólo se tiene el hijo cadena. } } . como existen varios tipo de aseveraciones.*/ MiOperacionServiceStub miOperacionServiceStub = new MiOperacionServiceStub().assertEquals(MENSAJE_ESPERADO. dicha aseveración se plantea con base al conocimiento que se tiene por anticipado del comportamiento del método. /* Se asignan todos los hijos del elemento. /* La invocación del servicio web es invocar al método definido como operación en el wsdl. junit proporciona diverso métodos assert */ Assert. response.getCadena()). /* El éxito de una prueba unitaria consiste en que se cumpla una aseveración.setCadena("Cadena que se envia al servicio web"). en este caso coincide con el nombre Request. 17.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.16.La ejecución exitosa del servicio web indicará que el assert se cumplió: .
Copyright © 2024 DOKUMEN.SITE Inc.