universidaddonbosco … · 2019-08-09 · 4 4. para crear los web services nos apoyaremos de la...

19
1 UNIVERSIDADDONBOSCO FACULTADDEESTUDIOSTECNOLÓGICOS COORDINACIÓNDECOMPUTACIÓN Y MÓVILES Ciclo II Desarrollo de aplicaciones con Web Frameworks Guía de Laboratorio No. 02 Web Services, SOAP I.OBJETIVOS. Que el alumno sea capaz de crear Web Services con Axis2. Que el alumno sea capaz de utilizar el SOAP UI, como herramienta de testeo. II. INTRODUCCIÓN. Los "Web services" son aplicaciones distribuidas que se basan en una serie de protocolos y estándares para intercambiar información. Tambien se definen como distintas aplicaciones de software desarrolladas en lenguajes de programación diferente y ejecutada sobre cualquier plataforma puede utilizar los Web Services para interactuar datos en redes de computadoras. Los Cliente puede ser: Un aplicativo móvil(Androi, IOS) Un aplicativo de Escritorio Una aplicación web que esté en PHP Los servicios SOAP o mejor conocimos simplemente como Web Services, son servicios que basan su comunicación bajo el protocolo SOAP (Simple Object Access Protocol) el cual este definido por protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML”. Por lo tanto, queda claro que la comunicación se realiza mediante XML. Los servicios SOAP funcionan por lo general por el protocolo HTTP que es lo más común cuando invocamos un Web Services, sin embargo, SOAP no está limitado a este protocolo, si no que puede ser enviado por FTP, POP3, TCP, Colas de mensajería (JMS, MQ, etc). Pero HTTP es el protocolo principal.

Upload: others

Post on 11-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

1

UNIVERSIDADDONBOSCO FACULTADDEESTUDIOSTECNOLÓGICOS

COORDINACIÓNDECOMPUTACIÓN Y MÓVILES

Ciclo II Desarrollo de aplicaciones con Web Frameworks

Guía de Laboratorio No. 02 Web Services, SOAP

I.OBJETIVOS.

• Que el alumno sea capaz de crear Web Services con Axis2.

• Que el alumno sea capaz de utilizar el SOAP UI, como herramienta de testeo.

II. INTRODUCCIÓN.

Los "Web services" son aplicaciones distribuidas que se basan en una serie de protocolos y estándares para intercambiar información. Tambien se definen como distintas aplicaciones de software desarrolladas en lenguajes de programación diferente y ejecutada sobre cualquier plataforma puede utilizar los Web Services para interactuar datos en redes de computadoras. Los Cliente puede ser:

• Un aplicativo móvil(Androi, IOS) • Un aplicativo de Escritorio • Una aplicación web que esté en PHP

Los servicios SOAP o mejor conocimos simplemente como Web Services, son servicios que basan su comunicación bajo el protocolo SOAP (Simple Object Access Protocol) el cual este definido por “protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML”. Por lo tanto, queda claro que la comunicación se realiza mediante XML. Los servicios SOAP funcionan por lo general por el protocolo HTTP que es lo más común cuando invocamos un Web Services, sin embargo, SOAP no está limitado a este protocolo, si no que puede ser enviado por FTP, POP3, TCP, Colas de mensajería (JMS, MQ, etc). Pero HTTP es el protocolo principal.

Page 2: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

2

III. PROCEDIMIENTO.

1. Abrir el IDE de eclipse y proceder a configurar la versión mas reciente de Axis2, realizarlo

de la siguiente manera.

Seleccionar Window -> Preferences Seleccionar Web Services -> Axis2 Preferences. En la pestaña Axis2 Runtime, buscar la ruta donde se encuentra la versión de Axis2, Click en aplicar y aparecerá el mensaje marcado en rojo.

2. Crear un nuevo proyecto Web (Dinamic Web Project), con la particularidad de que debe de

seleccionar la versión 2.5 ya que con las versiones posteriores existe una incompatibilidad, luego seleccionar Modify….

Seleccionar la opción “Axis2 Web Services”, dar click en OK y luego en Next, hasta llegar a la ventana Web Module.

Page 3: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

3

Seleccionar la opción “Generate web.xml deployment descriptor” y luego click en Finish.

3. El proyecto resultante creará toda la configuración necesaria para utilizar Axis2 y las páginas jsp, para poder ver los WebServices que se tengan deployados, pero en muchas ocasiones Eclipse no copia todas las librerías necesarias y genera algún error al intentar ver los wsdl, para evitar este error se deberá de buscar la Liberia “xmlschema-core-2.2.1”, que se encuentra en la carpeta lib de la carpeta de Axis2 y deberá copiarla en la carpeta lib del proyecto Creado, además, ya que nos conectaremos a la bd será necesario copiar el driver de mysql mysql-connector-java-5.1.45-bin.jar.

Estructura del proyecto Librería copiada en el proyecto

Page 4: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

4

4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión

anterior donde se tenían los modelos para Autor, los Beans y la conexión, deberá de crear los paquetes que se muestran a continuación, además deberá de buscar las clases “Autor.java, AutoresModel.java y Conexión.java” y copiarlos en sus respectivos paquetes. Para que la Conexión funcione deberá de copiar el archivo contex.xml y copiarlo en la carpeta META-INF.

Clases a utilizar de la sesión anterior Archivo contex.xml

5. Para el caso del Bean llamado “Autor”, deberá de realizar una modificación la cual

consisten en implementarle Serialización, esto se debe a que estos vean son utilizados para el envio de información a nivel de la red, el cambio se puede ver marcado en rojo en la siguiente imagen..

6. Procederemos a crear una “Interface”, la cual contendrá todos los métodos que serán

implementados, para ello realizar click derecho sobre el pquete “sv.edu.udb.www.services”, luego seleccionar New -> Interface

Page 5: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

5

Aparecererá una imagen como la siguiente, en la cual deberán de ponerle el nombre de “AutorService”, click en Finish.

7. Modificiar la interface, para que contenga el siguiente código: package sv.edu.udb.www.services; import java.util.List; import sv.edu.udb.www.beans.Autor;; public interface AutorService { public List<Autor> listarAutores(); public int insertarAutor(Autor autor); public int deleteAutor(String codigo); public int modificarAutor(Autor autor); public Autor obtenerAutor(String codigo); public int totalAutores(); }

8. Crear la clase “AutorImpl” y modificar para que contenga el siguiente código: package sv.edu.udb.www.services; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import sv.edu.udb.www.beans.Autor; import sv.edu.udb.www.model.AutoresModel; public class AutorImpl implements AutorService{ @Override public List<Autor> listarAutores() { AutoresModel autor = new AutoresModel(); // TODO Auto-generated method stub List<Autor> lista = new ArrayList<>();

Page 6: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

6

try { lista = autor.listarAutores(); } catch (SQLException ex) { Logger.getLogger(AutoresModel.class.getName()).log(Level.SEVERE, null, ex); } return lista; } @Override public int insertarAutor(Autor autor) { int result = 0; AutoresModel aut = new AutoresModel(); // TODO Auto-generated method stub try { result = aut.insertarAutor(autor); } catch (SQLException ex) { Logger.getLogger(AutoresModel.class.getName()).log(Level.SEVERE, null, ex); } return result; } @Override public int deleteAutor(String codigo) { int result = 0; AutoresModel aut = new AutoresModel(); // TODO Auto-generated method stub try { result = aut.eliminarAutor(codigo); } catch (SQLException ex) { Logger.getLogger(AutoresModel.class.getName()).log(Level.SEVERE, null, ex); } return result; } @Override public int modificarAutor(Autor autor) { int result = 0; AutoresModel aut = new AutoresModel(); // TODO Auto-generated method stub try { result = aut.modificarAutor(autor); } catch (SQLException ex) { Logger.getLogger(AutoresModel.class.getName()).log(Level.SEVERE, null, ex); } return result; } @Override public Autor obtenerAutor(String codigo) { AutoresModel aut = new AutoresModel(); Autor autor = new Autor(); // TODO Auto-generated method stub try { autor = aut.obtenerAutor(codigo); } catch (SQLException ex) { Logger.getLogger(AutoresModel.class.getName()).log(Level.SEVERE, null, ex); } return autor; } @Override public int totalAutores() { int result = 0; AutoresModel aut = new AutoresModel(); // TODO Auto-generated method stub try { result = aut.totalAutores();

Page 7: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

7

} catch (SQLException ex) { Logger.getLogger(AutoresModel.class.getName()).log(Level.SEVERE, null, ex); } return result; } } 9. Ahora se procederá a crear el Web Services, para ello dar click derecho sobre la clase

“AutorImpl”, seleccionar Web Services -> Create Web Service.

10. Aparecera la siguiente pantalla, en la cual deberá seleccionar las siguientes opciones, luego de configuradas click en siguiente..

Opciones Configuracion Web Services Type Bottom up Java vean Web Service Service implementation sv.edu.udb.www.services.AutorImpl Server runtime Tomcat v8.0 (Esta aparece seleccionada ya que tenemos

configurada esta version para el desplieugue) Web service runtime Apache Axis2 (Click sobre la opción actual y buscar la

versión Apache Axis2, la cual fue configurada previamente en este proyecto).

Service Project AutorWebServices Checkear Publish the Web Service.

Page 8: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

8

11. Aparecera la siguiente pantalla, dejar configurada la opción “Generate a default services.xml file”, click en siguiente

12. Aparecera la siguiente pantalla, favor quitar los checkes que aparecen por defecto, para que esta quede como se muestra en la imagen, click en Finish.

13. Proceder a deployar el proyecto, como lo realizo en el turial anterior, click derecho sobre el proyecto, seleccionar Run As -> Run on Server.

Page 9: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

9

14. Si todo se realizo de manera exitosa, aparecerá la siguiente pantalla en la cual puedo listar los servicios y ver el wsdl creado.

Lista de Operaciones disponibles, para este servicio web.

Page 10: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

10

Visualizacion del wsld, creado, esta url es de mucha importancia, ya que es la que utilizaremos desde nuestros clientes, para consumir el web services.

TEST DE WEBSERVICES Muchos proveedores de WebServices además de crear el servicio en sí, crea una simple aplicación cliente con la cual se puede comprender el funcionamiento y el uso del Webservice, por otra parte hay herramientas muy completas que nos ayudan en el debug y creación de los servicios. Existen herramientas simples como POSTMAN, Avanced Rest Client, entre otros. Por otra parte existen aplicaciones de Testing completas y robustas como lo es SoapUI. Nota, su docente le proporcionará SoapUI o puede descargarlo en la versión freeware http://www.soapui.org/ PROCEDA A INSTALAR SOAP UI. NO ES UN PROCESO COMPLICADO. Inicie la aplicación y defina que no utilizará proxy para las pruebas:

Page 11: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

11

Probar el WebService con SoapUI

1. Crear un nuevo proyecto Soap, seleccionar File -> New SOAP Project

2. Aparecerá la siguiente ventana, en la cual deberemos de configurar las opciones como se muestran a continuación.

Opciones Valores Project Name WebServicesClienteAutor Initial WSDL http://localhost:8080/AutorWebServices/services/AutorImpl?wsdl

Page 12: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

12

Veremos el proyecto con las opciones definidas dentro de nuestro Servicio Web.

3. Al intentar hacer pruebas sobre uno de los métodos, para este caso “totalAutores”, nos muestra el siguiente error.

Esto se debe a que de la versión principal de Apaches Axis2 1.7, URL de patrón de intercambio de mensajes (MEP) en el formato http://www.w3.org/2004/08/wsdl/XXX y http://www.w3.org/2006/01/wsdl/XXX ya no son compatibles. En su lugar, use http://www.w3.org/ns/wsdl/XXX. 4. Para solventar este inconveniente, deberá de buscar el archivo “services.xml”, que se

encuentran en WebContent-> Web-INF -> services -> services.xml

5. Sustituir el condido del archivo, por el que se muestra a continuación, el principal cambio se muestra marcado en amarillo, luego volver a deployar el proyecto.

<service name="AutorImpl" > <Description>

Page 13: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

13

Please Type your service description here </Description> <messageReceivers> <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parameter name="ServiceClass" locked="false">sv.edu.udb.www.services.AutorImpl</parameter> </service>

6. Realizando la prueba de totalAutores nuevamente, ahora se observa que devuelve el valor

de autores de la BD.

7. Prueba de insertarAutor, el resultado es 1 el cual nos indica que el proceso se realizo con éxito.

8. Prueba de listarAutores, el resultado será un listado con todos los autores registrados.

Page 14: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

14

9. Prueba de modificarAutor, resultado es 1 el cual nos indica que el proceso se realizo con éxito.

10. Prueba de obtenerAutor, el resultado es la información del autor que se ha solicitado.

CLIENTE WEB SERVICES CON JAVA

1. Crear un Proyecto Java Aplication en Netbeans, con el nombre “ClienteWebAutor”.

Page 15: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

15

2. Click derecho sobre el paquete creado automáticamente, y seleccionar New -> Web Service Client…

3. Aparecera la siguiente ventana, seleccionar la opción WSDL URL y utilizar la url del web services: http://localhost:8080/AutorWebServices/services/AutorImpl?wsdl

4. El proceso anterior, creó en el proyecto las clases necesarias y la creación del WSDL, para poder invocar los servicios web, en muchas ocasiones no detecta el paque ws creado, para ello deberá de de dar un Clean and Build al proyecto..

Page 16: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

16

5. Modificar la clase “ClienteWebAutor”, con el codigo que se muestra a continuación: Nota: Usted puede agregar las funciones generadas para las operaciones del CRUD disponible en el WebService:

El código de la clase principal debe ser el siguiente: package sv.edu.udb.wwww; import java.util.List; import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; import sv.edu.udb.client.Autor; public class ClienteWebAutor { /** * @param args the command line arguments */ public static void main(String[] args) { Autor autor = new Autor(); autor.setCodigoAutor(new JAXBElement<>(new QName("http://beans.www.udb.edu.sv/xsd","codigoAutor"),String.class,"AUT021") ); autor.setNombreAutor(new JAXBElement<>(new QName("http://beans.www.udb.edu.sv/xsd","nombreAutor"),String.class,"Nadia Alfaro") ); autor.setNacionalidad(new JAXBElement<>(new QName("http://beans.www.udb.edu.sv/xsd","nacionalidad"),String.class,"Salvadorena") ); System.out.println("Insertar: " + insertarAutor(autor)); List<sv.edu.udb.client.Autor> l = listarAutores(); for(sv.edu.udb.client.Autor a:l){ System.out.println("******************" + a.getCodigoAutor().getValue()+"******************" ); System.out.println("Nombre: " + a.getNombreAutor().getValue()); System.out.println("Nacionalidad: " + a.getNacionalidad().getValue()); } } /*AUTOGENERADO*/ private static java.util.List<sv.edu.udb.client.Autor> listarAutores() { sv.edu.udb.client.AutorImpl service = new sv.edu.udb.client.AutorImpl(); sv.edu.udb.client.AutorImplPortType port = service.getAutorImplHttpSoap11Endpoint(); return port.listarAutores(); } /*AUTOGENERADO*/ private static int insertarAutor(sv.edu.udb.client.Autor autor) { sv.edu.udb.client.AutorImpl service = new sv.edu.udb.client.AutorImpl();

Page 17: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

17

sv.edu.udb.client.AutorImplPortType port = service.getAutorImplHttpSoap11Endpoint(); return port.insertarAutor(autor); } /*AUTOGENERADO*/ private static int deleteAutor(java.lang.String codigo) { sv.edu.udb.client.AutorImpl service = new sv.edu.udb.client.AutorImpl(); sv.edu.udb.client.AutorImplPortType port = service.getAutorImplHttpSoap11Endpoint(); return port.deleteAutor(codigo); } } Cómo establecer los parámetros de QName:

Para generar los QName puede ir a la petición desde soap ui e identificar los campos:

6. Para probar el funcionamiento. Note que hará la operación de insertar y listar al mismo

tiempo. Puede comentariar la línea: System.out.println("Insertar: " + insertarAutor(autor)); Esto evitará hacer la inserción extra.

7. Prueba de ListarAutores:

Page 18: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

18

IV. EJERCICIOS COMPLEMENTARIOS

• El cliente Java, modificarlo para que utilice una interfaz grafica con swing para todos los

métodos incluyendo los que faltan por implementar, modificar autor, eliminar autor, obtener autor.

• Crear un Cliente que sea capaz de consumir el Web Services creado en este tutorial, este cliente deberá ser en un lenguaje diferente a JAVA, por ejemplo PHP, ASP, C#, etc.

V. REFERENCIA BIBLIOGRAFICA

• Libros en biblioteca UDB. • https://axis.apache.org/axis2/java/core/download.html

Última fecha de visita: 06/8/2019 • https://medium.com/@PrakhashS/apache-axis-2-errors-and-exceptions-fdc4919197f2

Última fecha de visita: 06/8/2019 • https://www.journaldev.com/9131/soap-webservices-in-java-example-eclipse

Última fecha de visita: 06/8/2019

Page 19: UNIVERSIDADDONBOSCO … · 2019-08-09 · 4 4. Para crear los Web Services nos apoyaremos de la lógica de negocio creada en la sesión anterior donde se tenían los modelos para

19

HOJA DE EVALUACIÓN

Actividad a

evaluar Criterio a evaluar

Cumplió Puntaje

SI NO

Discusión de

resultados

Realizó los ejemplos de guía de práctica (40%)

Presentó todos los problemas resueltos (20%)

Funcionan todos correctamente y sin errores (30%)

Envió la carpeta comprimida y organizada

adecuadamente en subcarpetas de acuerdo al tipo de

recurso (10%)

PROMEDIO:

Investigación

complementaria

Envió la investigación complementaria en la fecha

indicada (20%)

Resolvió todos los ejercicios planteados en la

investigación (40%)

Funcionaron correctamente y sin ningún mensaje de error

a nivel de consola o ejecución (40%)

PROMEDIO:

Hoja de cotejo:

2

Alumno: Carnet:

Docente: Fecha:

Título de la guía: No.: