Creación de un paquete de servicios web para un modelo de datos JAVA

1 Estrella2 Estrellas3 Estrellas4 Estrellas5 Estrellas, Wow! (1 votos, media: 2,00 ,total: 5)

Una vez creado nuestro paquete con la aplicación Java para interactuar con los servicios web como hemos visto en la lección anterior, vamos a realizar las tareas que habíamos dicho paso por paso. Es decir, vamos a crear un servicio web con una operación para añadir un usuario con su nombre de usuario, password, un nombre de piloto y una nave con su cantidad de armamento, otro para obtener una lista de usuarios con pilotos y naves y otro para hacer un login con usuario y password, para ello:

CREAR DIRECTORIO DE XML:

  1. Dentro de las propiedades del Proyecto Java Web “Excalibur” en la categoría de Sources  -> Package Folder -> Add Folder -> creamos el directorio “XML” dentro de “src” y de etiqueta (label) ponemos “XML”. Aquí vamos a colocar nuestros ficheros WSDL para ver como se construyen servicios web a partir de estos, pero primero el método sencillo…ahora se puede añadir al esquema de forma gráfica cualquier dato y se formatea por el sistema ,podemos crear un servicio web a partir del fichero…

CREAR SERVICIO WEB

  1. En el paquete “es.ugr.battlegalactica.servicios” -> botón derecho  -> New -> Web services -> Web Service -> “construccionNexus”. Añadir el constructor de la clase y la variable estática Nexus nexus de ésta clase, que se incializa en dicho constructor…

CREAR OPERACIÓN PARA AÑADIR UN USUARIO CON SUS PILOTOS Y SUS NAVES ASOCIADAS

  1. Segundo botón en el código dentro de la clase “construccionNexus” -> “Insert Code…” -> “Add Web Service Operation” -> le llamamos “crearUsuarioConPilotosYnaves”
  2. En return type (tipos devueltos) ponemos java.lang.Long y así, si es -1 ha ocurrido un error y en otro caso es el ID del nuevo usuario
  3. Para los parámetros necesitamos que tenga: un nombre y password de usuario,un nombre de piloto  y un nombre de nave; por lo que empezamos por añadir el primer campo con name: “datos_usuario” , type: Choose -> find type -> buscamos “usuario” y seleccionamos el del modelo de datos de BSGModelo, ahora hacemos lo propio para “datos_piloto” -> Piloto y “datos_nave” -> Viper. Pinchamos en “OK” y se genera el código en Java, sólo hemos de meter los datos correspondientes que nos pasa tan amablemente el servicio web a la base de datos de Nexus ,tal como hacíamos en Prueba.java…
    la función de la operación debe quedar así:

    @WebMethod(operationName = "crearUsuarioConPilotosYnaves")
    public Long crearUsuarioConPilotosYnaves(@WebParam(name = "datos_usuario")
    Usuario datos_usuario, @WebParam(name = "datos_piloto")
    Piloto datos_piloto, @WebParam(name = "datos_nave")
    Viper datos_nave) {
    
    if (nexus.obtenerUsuario(datos_usuario.getUsuario())!=null ){
    //El usuario ya existe, salir!
    return new Long(-1);
    }
    
    //Añadir Viper
    Viper v  = null;
    try { //Buscar viper:
    v = nexus.obtenerViper(datos_nave.getNombre());
    } catch (ViperNoEncontradoException ex){
    //La nave no existe, la añadimos
    v = new Viper(datos_nave.getNombre());
    v.setArmamento(datos_nave.getArmamento());
    } finally {
    //En otro caso, la nave es la misma?
    if (!v.getId().equals(datos_nave.getId())){
    //No es la misma, error
    return new Long(-1);
    }
    }
    
    //Añadir piloto:
    Piloto p = null;
    try {
    p = nexus.obtenerPiloto(datos_piloto.getId());
    } catch (PilotoNoEncontradoException ex){
    //NO Existe el piloto, crearlo
    p = new Piloto(datos_piloto.getNombre(), datos_piloto.getDestreza(),
    v.getId());
    nexus.guardarPiloto(p);
    } finally {
    //El piloto existe, tiene la misma ID?
    if (!p.getId().equals(datos_piloto.getId())){
    return new Long(-1);
    }
    }
    ArrayList<Long> lista_pilotos = new ArrayList<Long>();
    lista_pilotos.add(p.getId());
    
    //Añadir el usuario con los datos almacenados ya en Nexus:
    Usuario u = new Usuario(
    datos_usuario.getUsuario(),
    datos_usuario.getPassword(),
    lista_pilotos );
    
    nexus.guardarUsuario(u);
    
    return u.getId();
    }
    

    Para probarla primero hacemos click con el segundo botón del ratón en el proyecto Excalibur > Deploy ,esto instalará la aplicación web con la nueva operación compilada, ahora vamos a la lista de servicios web y pulsamos en test Web Service, ya podemos añadir usuarios con un piloto y una nave

CREAR OPERACIÓN PARA HACER UN LOGIN CON USUARIO Y PASSWORD

  1. Una vez creado un usuario en la base de datos la función para hacer un login es tan simple como esta:
    @WebMethod(operationName = "hacerLogin")
    public String operation(@WebParam(name = "usuario")
    String nombre_usuario, @WebParam(name ="password") String contrasena) {
    //TODO write your implementation code here:
    Usuario u = nexus.obtenerUsuario(nombre_usuario);
    if (u==null) return "El usuario no existe";
    else if (u.getPassword().equals(contrasena)){
    return "Acceso concedido";
    } else {
    return "Contraseña inválida";
    }
    }
    

    Recordar que para testear los servicios podemos hacerlo en SOAP UI:

CREAR OPERACIÓN PARA OBTENER UN LISTADO DE USUARIOS

  1. Es simplemente crear un listado a partir de recorrer el array de estos y devolverlo para que lo analice sintácticamente el sistema y devuelva la construcción XML correspondiente:
    public List<Usuario> listadoUsuarios() {
    List<Usuario> listado = null;
    for (Iterator<Usuario> iter = nexus.listarUsuarios(); iter.hasNext(); ){
    listado.add(iter.next());
    }
    return listado;
    }
    

Buenas prácticas de programación: Los servicios web son un tipo de comunicación, añadir lógica de programación resulta en algo no-generalizable y por lo tanto ,no reutilizable. Resumiento: hay que hacer una conversión de los datos de un modelo de datos en un modelo de datos de un servicio web,i.e.,las clases con su lógica de programación en Java a un modelo del servicio y luego el paso inverso. Entre medias están las páginas web u otros clientes que los utilizan con su propia lógica. Por ello se recomienda diseñar los servicios web lo último, cuando ya tenemos todo lo que necesitamos en cuanto a datos y lógica interna con ellos, separar cada fichero WSDL para cada servicio es recomendable por si necesitamos cambiar algo y nos cuesta menos trabajo.

CREAR CLIENTES PARA CONECTARSE A LOS SERVICIOS WEB

  1. En el proyecto “Excalibur” creamos el paquete “es.ugr.battlegalactica.servicios” y dentro de este -> segundo botón del ratón-> New -> Other -> Web Services -> Web Service Client -> seleccionamos del proyecto “Excalibur” el Servicio Web “construccionNexus” -> OK ; y ahora en package ponemos “es.ugr.battlegalactica.clientes”. Esto debe crearnos todas las clases Java para comunicarse con las operaciones del Servicio Web. Pero para saber que funcionan usamos un JUnit Test , creamos un paquete llamado “es.ugr.battlegalactica.clientes” y dentro un nuevo JUnit Test para clases existentes, elegimos la clase a testear y hacemos como en la primera lección las unidades de prueba.

< Volver al curso de Arquitectura de Servicios Web con JAVA y PHP

Artículos relacionados:

footer
jbelon ©