Semana 3/Unidad I
SERVICIOS WEB
Actividad de Evaluación Formativa
EJERCICIOS
1. Instrucciones generales
Estimado(a) estudiante:
Una vez realizada la lectura comprensiva del material de estudio de la semana 3,
lo(a) invitamos a realizar una serie de ejercicios de questionamiento y aplicación de
conocimientos.
Para responder las preguntas y/o realizar los ejercicios, refiérase principalmente a
los contenidos trabajados en las semanas previas. También puede recurrir a fuentes
de información segura en Internet.
2. Ejercicios
En los siguientes ejercicios de conocimiento tendrá que marcar una
alternativa dentro de las 4 disponibles
Ejercicio #1
¿SoapUI en qué está desarrollada?
a.- pyton
b.- C++
c.- Java
d.- php
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Ejercicio #2
Preguntas:
¿Que utiliza XML-RPC?
a.- http
b.- html
c.- xml
d.- Todas las anteriores
Ejercicio #3
¿Para qué se usa generalmente XML-RPC?
a.- Como un medio de comunicación entre 2 plataformas y efectuar cambio de
datos
b.- Se usa comúnmente para probar los servicios remotos
c.- Para hacer pruebas de manejo de datos
d.-Ninguna de las anteriores
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Ejercicio #4
¿Que Tags generalmente tiene que contener un protocolo WSDL?
a.- Etiqueta WSDL,<declarations>,<types>,<text>,<portType>,<port>,<service>
b.- Etiqueta
WSDL,<definitions>,<types>,<message>,<typeRoute>,<binding>,<services>
c.- Etiqueta
XML,<definitions>,<types>,<message>,<portType>,<binding>,<service>
d.- Etiqueta
XML,<declarations>,<types>,<message>,<portType>,<links>,<services>
CASOS
En el grupo ECTGroup requieren de unos que permitan que unas app de diferentes
proveedores logrén mantener a sus diferentes clientes centralizadamente, para esto se ha
solicitado desarrollar un conjunto de webservices que permitan agregar, modificar,
eliminar y consultar a los clientes.
Recientemente los diferentes proveedores se han puesto de acuerdo que para poder
representar correctamente al cliente los datos que necesitan son los siguientes:
Cliente
Rut: Representa al identificador del cliente
Nombres: Representa al primer y segundo nombre (opcional)
Apellidos: Representa ambos apellidos
ProveedorCodigo: Representa a un número único que tiene cada proveedor
Modelo de datos
Tecnológico Nacional Iplacex
Semana 3/Unidad I
CREATE TABLE CLIENTE
(
RUT INT NOT NULL,
NOMBRES VARCHAR(50),
APELLIDOS VARCHAR(50),
PROVEEDOR_COD INT,
CONSTRAINT CLIENTE_PK PRIMARY KEY (RUT)
);
Requerimiento 1
Consultar Cliente: Para poder consultar un cliente es necesario el identificador rut, una vez
entregado la salida esperada es que entre los datos separados por comas
NOMBRE,APELLIDOS,PROVEEDOR_COD
Ejemplo:
JUAN ALBERTO, PEREZ LLANOS, 1
En el caso que no existe el cliente la salida es el mensaje
“Cliente no existe”
Agregar clientes: Para agregar un cliente es necesario comprobar si el cliente existe, si el
cliente ya existe debe indicar una salida al usuario en el retorno del servicio “Cliente ya
existe”
Modificar cliente, Para modificar el cliente es necesario entregar todos los datos del
cliente nuevamente Rut, nombres, apellidos, proveedor_cod, en el caso que el cliente no
exista se debe entregar el mensaje “Cliente no existe”
Nota: Un tema importante en los servicios, es que si ya existe un servicio esté debe ser
usado, por ejemplo: El servicio modificar cliente puede reutilizar el servicio consultar
cliente para mostrar el mensaje de Cliente no existe
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Desarrollo problema
Para el desarrollo de la actividad se requiere una instalación de un IDE (NetBeans Java) y
un servidor independiente (XAMPP) para la posterior prueba de servicios en Soap UI
Primero que todo creamos un proyecto en Java con un nombre representativo
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Nos aseguramos que el server contenga “Apache Tomcat or TomEE” para hacer uso de Tomcat en
XAMPP
Luego presionamos siguiente hasta que termine la creación de la Web application, no
seleccionaremos ningún Framework ya que solo estamos viendo servicios Web
NetBeans creará el proyecto con una página de inicio que por ahora ignoraremos ([Link])
Tecnológico Nacional Iplacex
Semana 3/Unidad I
En su lugar seleccionaremos la sección de packages y crearemos uno nuevo con el nombre de
“Services”
Nombre del Package*
Una vez creado el proyecto y el paquete dentro de el empezamos creando una clase simple de
java de la mísma manera que creamos el package anterior
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Esta clase se llamará WSCliente (WS por Web Service ya que tiene que ser representativo)
Primera cosa a hacer es agregar las etiquetas @WebService, NetBeans detectará que faltan
llamadas de librerías por lo que las agregamos seleccionando en las sugerencias cada vez que nos
notifique
Agregando librería*
Resultado de agregar Librería
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Creamos método de consultar cliente con un parámetro de Rut ya que esto lo identifica
Creamos método de crear cliente con todos los parámetros que el cliente contiene (@WebParam)
Creamos finalmente el modificar cliente con los mismos parámetros que en la creación
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Una vez creada la clase y métodos dentro de ella NetBeans detectará que se está haciendo uso de
los WebService y agregará por defecto una sección de WebService, dentro de el se debería ver el
servicio en sí y los métodos que ya creamos
En los métodos podemos agregar respuestas Dummy para probar el funcionamiento de los
servicios en SoapUI
Crear Cliente
Agragar Cliente
Modificar Cliente
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Luego de esto Hacemos el Deploy del proyecto para que el TomCat pueda obtenerlo
TomCat Pide autentificación por lo que pedirá contraseña y usuario definidos por usuario al
momento de configurar el servidor, mientras se realiza el deploy se pedirá inicio de sesión
Nos movemos a SoapUI donde probaremos nuestro servicio de crud cliente.
Posterior al Deploy nos dirigimos al WSCliente y seleccionamos “Test Web Service”, esto nos
dirigirá a una pagina donde se nos desplegará la url con wsdl que podremos usar en Soap UI
Parte de la pagina con wsdl, esta url nos servirá para ingresarla en un proyecto SOAP y probar los
métodos del WebService
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Iniciamos SOAP UI y creamos un proyecto UI
Esto nos dará como resultado una serie de requests que nos deberían dar como respuesta los
mensajes que dejamos en los métodos.
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Ejemplo de Agregar Cliente
Luego de presionar Play
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Una vez tenemos los servicios funcionales nos dedicamos a crear la base de datos en Java para
almacenar datos de cliente
NetBeans, para que pueda hacer uso de los WebService y del TomCat requiere de una serie de
librerías
Además de esto, generalmente en tiempo de programación el mísmo IDE advertirá sobre la falta
de librerías
Luego de comprobar el uso de librerías dentro de NetBeans nos dirigimos a Servicios y nos
conectamos al servidor MYSQL
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Ya con la conexión hecha y el servidor corriendo creamos una nueva base de datos con el nombre
de “bdcliente”
En bdcliente seleccionamos ejecutar un comando y pegamos el script proporcionado en el
enunciado del ejercicio
Una vez pegado el script ejecutamos
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Y para comprobar que se creó la tabla correctamente nos dirigimos a la conexión en si,
desplegamos las tablas y quedaría algo así
A continuación necesitamos crear una clase extra que cumple el rol de conectar la base de datos
con el proyecto que ya tenemos hecho, esta clase tiene que estar dentro del package “services”
Esta clase tiene atributos que sirven de contraseña, nombre de usuario, el uso de los drivers y
finalmente una url, la cual dirige a la base de datos ya creada, esta URL es conseguible dentro de
las conexiones que ya hemos visto y debe estar dentro del atributo “DB_URL”
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Copiamos y pegamos la url hasta el “?” y tendríamos la clase conexión lista para ser usada
Metodo Consultar cliente, que busca dentro de la base de datos un cliente usando el id como
índice de búsqueda.
Connection con; Es una variable de conexión
PreparedStatement stmt; es para guardar instrucciones sql a usar a futuro
Tecnológico Nacional Iplacex
Semana 3/Unidad I
ResultSet rs; es para guardar los resultados de la instrucción
Se crea un Try / catch para controlar excepciones dentro del evento de consultar el cliente
Conexión c = new conexión(); es una instancia de clase propia dentro del proyecto creada para
utilizar las librerias java que conectan a la base de datos MySql con los Webservice.
conn = [Link](); se utiliza el método conectar dentro de la clase conexión con el usuario, pass,
y los parámetros que se van a utilizar
Se crea un variable String sql; para guardar la consulta sql
Y se le asigna una consulta donde pregunte con el signo “?” el rut del cliente que se quiere
desplegar los datos dentro de la BD
stmt = [Link](sql); se entrega ese sql y reconoce la pregunta
[Link](1, rut); el uno es la primera incognita en la consulta de sql y se le asigna RUT dentro de
esa incognita
rs = [Link](); Ejecuta simplemente la statement
List array = new ArrayList(); se instancia una lista y ahí se guardarán los eventos de la consulta
Cuando es solo un registro el que uno va a utilizar se utiliza un if para desplegar la salida, en caso
contrario se usaría un while para desplegar multiples registros.
if([Link]()){
salida = [Link]("NOMBRES") + "," + [Link]("APELLIDOS") + "," +
[Link]("PROVEEDOR_COD");
Se crea un if para controlar que la base de datos no reconozca ninguna id de cliente como valida y
se despliega un mensaje de error en el caso correspondiente
if([Link]("")){
return "No existe cliente";
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Se cierra la conexión, la statement y finalmente se devuelve la salida la cual será o el registro de
cliente o el error de que no lo encontró
[Link]();
[Link]();
return salida;
Metodo AgregarCliente
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Primero que nada dentro de los argumentos que van a ser ingresados se consideran como
@WebParam, y en este caso serían el rut, nombres, apellidos y el código de proveedor
@WebParam(name = "rut")int rut
@WebParam(name = "nombres")String nombres
@WebParam(name = "apellidos")String apellidos
@WebParam(name = "proveedorCodigo")int proveedorCodigo
Se crea un IF que valide que el cliente no exista, este toma el método ya creado y lo utiliza para
recorrer la base de datos en busca de un rut igual al ingresado
if(!(consultarCliente(rut).equals("No existe cliente")))
return "Cliente ya existe";
Y en caso contrario se ingresa al ELSE, el cual contendrá un try catch con similares características a
el ConsultarCliente
Try{
Conexion c =new Conexion(); Nuevamente se genera una conexión
conn = [Link](); Se utiliza el método conectar
String sql; Creación de String que contenga la consulta
sql="INSERT INTO CLIENTE(RUT, NOMBRES, APELLIDOS, PROVEEDOR_COD) VALUES (?,?,?,?)";
Asignación de valores mediante incognitas
stmt = [Link](sql); se asigna la consulta para ser utilizada
[Link](1, rut); asignación de rut a primer incognita
[Link](2, nombres); asignación de nombres a segunda incognita
[Link](3, apellidos); asignación de apellidos a tercera incognita
[Link](4, proveedorCodigo); asignación de proveedorCodigo a cuarta incognita
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Se cierra conexión, statement y se devuelve una salida nuevamente
Y finalmente un catch al terminar el TRY para controlar cualquier inconveniente dentro de la
operación
catch(Exception e)
return [Link](); Mensaje de vuelta en caso de haber algun problema
Metodo Modificar cliente, que toma un id de cliente para modificar sus datos dentro de la BD
Tecnológico Nacional Iplacex
Semana 3/Unidad I
Parametros que se van a utilizar dentro del metodo
@WebParam(name = "rut")int rut,
@WebParam(name = "nombres")String nombres,
@WebParam(name = "apellidos")String apellidos,
@WebParam(name = "proveedorCodigo")int proveedorCodigo)
Nuevamente se utiliza un if para consultar si el cliente existe o no.
if((consultarCliente(rut).equals("No existe cliente")))
return "¡Cliente no existe!"; mensaje en caso de error
Luego de crear el ELSE y el TRY, dentro de este mísmo se utiliza el siguiente código
sql= "UPDATE CLIENTE SET NOMBRES=?, APELLIDOS=?, PROVEEDOR_COD=? WHERE RUT=?";
Esta vez se cambia de orden las variables y dejamos la id del cliente al final
stmt = [Link](sql); se asigna la statement para ser usada
[Link](1, nombres); asignación de primer incognita a nombres
[Link](2, apellidos); asignación de primer incognita a apellidos
[Link](3, proveedorCodigo); asignación de primer incognita a proveedorCodigos
[Link](4, rut); asignación de primer incognita a rut
[Link](); Se utiliza esta sentencia ya que en la consulta SQL
utilizamos un UPDATE
salida = "Cliente modificado"; Se asigna el mensaje de modificación exitosa a la variable
salida
[Link](); Cierre de statement
[Link](); Cierre de conexión
return salida; Retorno de salida
Tecnológico Nacional Iplacex
Semana 3/Unidad I
catch(Exception e) Creacion de el catch para control de exepciones
return [Link](); Despliege de mensaje en caso de encontrar error
Clase conexión dentro del package services
En esta clase requerimos de imports para la correcta conexión a la base de datos
import [Link];
import [Link];
Dentro de la clase Conexión creamos un método llamado conectar
En este método creamos una serie de variables String que contendrán variable de conexión
String JDBC_DRIVER = "[Link]"; Señalamos el driver para la
conexión a MySql
String DB_URL = "jdbc:mysql://localhost:3306/bdcliente"; URL de la BD
Tecnológico Nacional Iplacex
Semana 3/Unidad I
String USER = "root"; Usuario de la BD
String PASS = ""; Pass de la BD
Connection conn =null; Para controlar la conexión correcta
a la BD se coloca como null por
defecto
[Link]("[Link]"); Busca si existe dentro del proyecto,
en caso de no encontrarlo genera una exception
conn = [Link](DB_URL,USER,PASS); Da la conexión a la BD con la url,
pass y usuario
return conn; Retorna la conexión
Catch al final del TRY para controlar cualquier evento externo que genere una exception
catch(Exception e)
return null;
Tecnológico Nacional Iplacex