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:
CREAR SERVICIO WEB
CREAR OPERACIÓN PARA AÑADIR UN USUARIO CON SUS PILOTOS Y SUS NAVES ASOCIADAS
@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
@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
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
< Volver al curso de Arquitectura de Servicios Web con JAVA y PHP
Deja tu comentario