jueves, 3 de junio de 2010

Restful Server & Client

Para este ejemplo estoy utilizando Netbeans 6.8, Glassfish V3, JDK1.6 y Windows 7
Primeramente abrimos Netbeans
Luego creamos un nuevo proyecto web

Le damos el nombre RestfulServer
Seleccionamos Glassfish V3 como servidor y la versión Java EE 6 Web
Luego creamos una nueva clase java
Le llamaremos Restful
La clase tiene el código siguiente(Llaman la atención las anotaciones) para saber que path es que se usará y que función se ejecutará de acuerdo tipo de método llamado

package com.web.ws;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;


@Path("/mensaje")
public class Restful {
public Restful() {
}

@GET
@Produces("text/html")
public String getHtml() {
return "<html><body><h1>Hello World!</body></h1></html>";
}

@PUT
@Consumes("text/html")
public void putHtml(String nombre) {
System.out.println("Saludos(PUT):"+nombre);
}
}


En el momento de guardar la clase, se mostrará esta ventana. La misma que nos ayuda a configurar la información en el descriptor (web.xml) de manera automática
Existe otra manera de crear la clase Restful del servidor con anotaciones, esta es por medio de la opción RESTful Web Services from Patterns
Si seleccionamos esta via para crear el web service, crearemos una clase con las anotaciones antes mostradas de manera automática
Luego hagamos un "Test RESTful Web Services"
Nos hará una pregunta de seguridad y Aceptaremos
El explorador de internet, nos mostrará los métodos disponibles y podremos hacer pruebas sobre los mismos:
Para la creación del cliente, vamos a crear una aplicación Java
A la aplicación le daremos el nombre de Cliente

La variable URL debe ser cambiada al URL que se muestra en Resource. Podemos ver esta variable cuando probamos el servicio Restful tres pantallas atrás

El código es el siguiente:

package cliente;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class Main {

private static String ruta="http://localhost:21405/RestfulServer/resources/mensaje";
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
get();
put();
}

public static void get() {
String respuesta = "";
BufferedReader buffer = null;
try {
URL url = new URL(ruta);
URLConnection conn = url.openConnection();
buffer = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = buffer.readLine()) != null) {
respuesta += line;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (buffer != null) {
try {
buffer.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
System.out.println(respuesta);
}

public static void put() {
String respuesta = "";
OutputStreamWriter wr = null;
BufferedReader rd = null;
try {
URL url = new URL(ruta);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("PUT");
conn.setDoOutput(true);
wr = new OutputStreamWriter(conn.getOutputStream());
wr.write("Santiago");
wr.flush();
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
respuesta += line;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (wr != null) {
wr.close();
}
if (rd != null) {
rd.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
System.out.println(respuesta);
}
}
Ejecutamos el servidor y luego el cliente
Con lo cual obtenemos las siguientes salidas:

No hay comentarios:

Publicar un comentario