Tiempo atrás hice un tutorial bastante detallado sobre como crear y consumir web services usando NetBeans y Glassfish. Hoy traigo lo mismo pero con un ejemplo mucho mas sencillo y fácil de entender y digerir.
Esta entrada trata sobre la exposición de un Web Service, en otra entrada explicaré cómo consumirlo.
El ejemplo expone dos métodos a través de Web Service para validar la existencia de un usuario (getUsuario) y para modificar sus datos (setUsuario).
Los datos del usuario están en un archivo XML para mantener el ejemplo sencillo y simple. La estructura del XML es la siguiente:
Esta entrada trata sobre la exposición de un Web Service, en otra entrada explicaré cómo consumirlo.
El ejemplo expone dos métodos a través de Web Service para validar la existencia de un usuario (getUsuario) y para modificar sus datos (setUsuario).
Los datos del usuario están en un archivo XML para mantener el ejemplo sencillo y simple. La estructura del XML es la siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<raiz>
<usuario id="1" user="metalklesk" passwd="metalklesk" activo="true" />
<usuario id="2" user="klesk" passwd="klesk" activo="false" />
</raiz>
como se puede ver a continuación:
El archivo se llama usuarios.xml y debe crearse (o copiarse) en el directorio home del usuario (en el caso de Windows creo que es el directorio del usuario dentro de Mis Documentos, corríjanme si me equivoco y en el caso de Linux es /home/usuario).
Una vez listo ya podemos crear el Web Service. Para esta tarea utilizaremos un contenedor EJB.
Abrimos NetBeans 6.5.1 -> New project -> Java EE -> EJB module
Una vez listo ya podemos crear el Web Service. Para esta tarea utilizaremos un contenedor EJB.
Abrimos NetBeans 6.5.1 -> New project -> Java EE -> EJB module
como nombre ingresamos EJBModuleWebService y seleccionamos Glassfish como servidor de aplicaciones.
Una vez listo creamos una clase java a la cual llamaremos Usuario y la agregamos al package org.modelo (como no existe, se creará al ingresarlo en la misma pantalla de creación de la clase). La clase Usuario tendrá el siguiente código:
Una vez listo creamos una clase java a la cual llamaremos Usuario y la agregamos al package org.modelo (como no existe, se creará al ingresarlo en la misma pantalla de creación de la clase). La clase Usuario tendrá el siguiente código:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.modelo;
/**
*
* @author metalklesk
*/
public class Usuario {
private int id;
private String user;
private String passwd;
private boolean activo;
public boolean isActivo() {
return activo;
}
public void setActivo(boolean activo) {
this.activo = activo;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.modelo;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
*
* @author metalklesk
*/
public class AccesoDatos {
private Document documento = null;
private String archivo = System.getProperty("user.home") + "/usuarios.xml";
private static AccesoDatos datos = new AccesoDatos();
private AccesoDatos() {
try {
documento = (Document) (((DocumentBuilderFactory.newInstance()).newDocumentBuilder()).parse(new File(archivo)));
} catch (SAXException ex) {
Logger.getLogger(AccesoDatos.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(AccesoDatos.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParserConfigurationException ex) {
Logger.getLogger(AccesoDatos.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static AccesoDatos getInstance() {
return datos;
}
public Usuario getUsuario(String user, String passwd) {
Element raiz = (Element) documento.getDocumentElement();
NodeList hijos = raiz.getElementsByTagName("usuario");
Usuario usuario = null;
for(int i=0; i<hijos.getLength(); i++) {
Element elemento = (Element) hijos.item(i);
String x = elemento.getAttribute("user");
String y = elemento.getAttribute("passwd");
if(x.equalsIgnoreCase(user) && y.equalsIgnoreCase(passwd)) {
usuario = new Usuario();
usuario.setId(Integer.parseInt(elemento.getAttribute("id")));
usuario.setUser(x);
usuario.setPasswd(y);
usuario.setActivo(Boolean.parseBoolean(elemento.getAttribute("activo")));
break;
}
}
return usuario;
}
public boolean setUsuario(Usuario usuario) {
Element raiz = (Element) documento.getDocumentElement();
NodeList hijos = raiz.getElementsByTagName("usuario");
boolean respuesta = false;
for(int i=0; i<hijos.getLength(); i++) {
Element elemento = (Element) hijos.item(i);
int id = Integer.parseInt(elemento.getAttribute("id"));
if(id == usuario.getId()) {
elemento.setAttribute("id", String.valueOf(id));
elemento.setAttribute("user", usuario.getUser());
elemento.setAttribute("passwd", usuario.getPasswd());
elemento.setAttribute("activo", String.valueOf(usuario.isActivo()));
respuesta = actualizarUsuarios();
break;
}
}
return respuesta;
}
private boolean actualizarUsuarios() {
documento.getDocumentElement().normalize();
try {
DOMSource source = new DOMSource(documento);
StreamResult result = new StreamResult(new FileOutputStream(archivo));
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.transform(source, result);
return true;
} catch (TransformerException ex) {
Logger.getLogger(AccesoDatos.class.getName()).log(Level.SEVERE, null, ex);
return false;
} catch (FileNotFoundException ex) {
Logger.getLogger(AccesoDatos.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
}
}
Una vez listo ya podemos crear el Web Service, para eso hacemos click derecho en el proyecto -> New -> Web service
Ingresamos como nombre UsuarioWebService y lo agregamos al package org.modelo.
Una vez listo, ingresamos el siguiente código con los métodos a exponer en el Web Service:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.modelo;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.ejb.Stateless;
/**
*
* @author metalklesk
*/
@WebService()
@Stateless()
public class UsuarioWebService {
/**
* Web service getUsuario
* @param user
* @param passwd
* @return
*/
@WebMethod(operationName = "getUsuario")
public Usuario getUsuario(@WebParam(name = "user")
String user, @WebParam(name = "passwd")
String passwd) {
AccesoDatos datos = AccesoDatos.getInstance();
return datos.getUsuario(user, passwd);
}
/**
* Web service getUsuario
* @param usuario
* @return
*/
@WebMethod(operationName = "setUsuario")
public Boolean setUsuario(@WebParam(name = "usuario")
Usuario usuario) {
AccesoDatos datos = AccesoDatos.getInstance();
return datos.setUsuario(usuario);
}
}
Ya con eso estamos listos con la exposición del Web Service, ahora para probarlo podemos ejecutar la aplicación haciendo click derecho -> Run y luego expandimos la carpeta Web Services, damos click derecho el web service UsuarioWebService y pinchamos la opción Test Web service, lo cual abrirá una ventana del navegador web predeterminado en NetBeans.
Espero les sea de utilidad y como siempre me pueden dejar un comentario con su dirección de correo y les reboto el proyecto NetBeans comprimido.
Saludos !!!
20 comentarios:
Que buen articulo, me gustaria que me enviaras el proyecto :P espaciolibertad@hotmail.com
Hola Daniel, me podrias enviar por favor el proyecto para hacer pruebas, gracias, danveg@gmail.com.
Buena!
Me puedes enviar el proyecto gracias!
ioset@hotmail.com
Excelente explicación. Por favor envíame tu proyecto para analizarlo. De antemano, gracias. juandie9@hotmail.com
Necesito el Fuente xfa
bscfernando@hotmail.com
okko esta bien as hecho lo facil ahora como haces para que el bton llo vas a programar para q sea del mismo metedo me expico como haces para q lo q ingreses en el textfield sea lo q tenga q buscar
muy buen aporte podrias enviarme el proyecto en windows a mi mail mled5@hotmail.com mucas gracias lo necesito para la u
Hola!
No entendi la parte de guardar el archivo xml en home del usuario. Por favor si me puedes explicar esta parte, tengo Windows.
Gracias
Todos los usuarios de todos los sistemas operativos tienen un home que es la carpeta raíz que les corresponde, en Windows no recuerdo cual es porque NO uso windows, pero es fácil saberlo si haces un pequeño programa que solo imprima la propiedad user.home usando: System.out.println(System.getProperty("user.home"))
Con eso ya podrás resolver tu duda y nos cuentas.
Una vez que ya sabes cual es el home que te corresponde, copias ahí el XML.
Saludos!!
Hola. Muy buen artículo. Yo estoy haciendo un proyecto web service también en Netbeans y Glassfish pero el view está en C#. Estoy totalmente ignorante de la sintaxis para envío y recepción de datos. Puede ayudarme en eso?
Muchas gracias.
hola...
me podrias enviar el proyecto.... te agradesco de antemano,
gracias
Luis fajardo
fajardotk@hotmail.com
XVR pero haber si me puedes decir las evntajas y utilidades que le puedo dar a este tipo de aplicaciones con web service ya q no tengo experiencia en esto recien toy averiguando!!! Pd si puedes mandas el proyecto mostrado en este bolg al corereo wdyl_2611@hotmail.com
hola amigo me parece interesante tu proyecto felicidades
podrias mandarmelo mi correo es unicomaster@hotmail.com.mx
hola me podrias mandar el proyecto please
frmaurei@alumnos.ubiobio.cl
de antemano muchas gracias
me parece genial el proyecto pero si pudieras enviarme el proyecto para fines practicos te lo agradeceria mucho (POR FAVOR)brenesyb@gmail.com
Hola, Muchas Gracias por este web service me sirvio mucho.
Hola muy buen articulo me gustaria tener el proyecto, Podrias porfavor enviarme el proyecto al gmcr05@hotmail.com. Gracias
buenisimo el ejmeplo aver si me envias el codigo!! andresmerida@hotmail.com
Excelente.. porfa lo envias a mi correo peque_taohotmail.com gracias
hola excelente ejemplo, serías tan amable de enviámelo a mi corre fernando.carcamo@gmail.com
Desde ya agradecido.
Saludos
Publicar un comentario