Primer WebService REST en Java

services

Un Web Service es una tecnología que permite utilizar un conjunto de protocolos y estándares  para intercambiar datos entre aplicaciones. Esto permite comunicar distintas aplicaciones desarrolladas en lenguajes de programación diferentes y ejecutadas en distintas plataformas, esto es posible cuando se adoptan estándares abiertos, uno de los más utilizadas es XML.

Este ejemplo se desarrollara en lenguaje java sobre el IDE eclipse.

– El primer paso es crear un nuevo proyecto. Pulsamos sobre New y seleccionamos un Dynamic Web Project. Aparecerá una pantalla en la que introduciremos el nombre del proyecto.

 

 

Sin título-1

– El siguiente paso es descargar las librerías necesarias de Jersey se puede descargar aquí. Se descargara un archivo zip, en el interior hay una carpeta lib copiamos los archivos .jar en nuestro proyecto en la carpeta lib que se encuentra en WebContent -> Web-INF. Los archivos jar que necesitaremos son:

  1. asm-3.1.jar
  2. jersey-client-1.17.1.jar
  3. jersey-core-1.17.1.jar
  4. jersey-server-1.17.1.jar
  5. jersey-servlet-1.17.1.jar
  6. jsr311-api-1.1.1.jar

Sin título-2

– En la carpeta src que se encuentra dentro de Java Resources creamos un paquete en el que introduciremos las clases con las que trabajaremos. Creamos un clase java, mi clase consta de un método al que se le pasa un nombre y devuelve un saludo y otro método que recibe dos números y los suma.

package clases;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("InfoService") //Esta ruta indica la clase a la que se accederá
public class Service {

 @GET //Indica el tipo del método que determina como se recibe la información en este caso es get
 @Path("/saludo/name={nombre}") //Ruta que se indica para llamar al método y la estructura para mandar los parámetros
 @Produces(MediaType.TEXT_XML)
 public String saludo (@PathParam("nombre") String nombre){
 return "Hola "+nombre;
 }
 

 @GET
 @Path("/suma/n1={valorn1}&n2={valorn2}")
 @Produces(MediaType.TEXT_XML)
 public String suma(@PathParam("valorn1") int n1,@PathParam("valorn2") int n2){
 return "El suma de "+n1 +"+"+n2+" es "+(n1+n2);
 }
}

– Con la clase terminada queda modificar el archivo xml web que se encuentra en la carpeta WebContent -> Web-INF.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 <display-name>WebServiceRest</display-name>
 <servlet> 
 <servlet-name>Jersey REST Service</servlet-name> 
 <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
 <init-param> 
 <param-name>com.sun.jersey.config.property.packages</param-name> 
 <param-value>clases</param-value> <!---paquete en el que se encuentran nuestras clases -->
 </init-param> 
 <load-on-startup>1</load-on-startup> 
 </servlet> 
 <servlet-mapping> 
 <servlet-name>Jersey REST Service</servlet-name> 
 <url-pattern>/restService/*</url-pattern> <!--- ruta de nuestro web service -->
 </servlet-mapping> 
</web-app>

La ruta de nuestro de web service es: http://localhost:8080/Display-name (se encuentra en el web.xml)/url-pattern (se encuentra en el web.xml)/Path de nuestra clase(se encuentra en el  java)/Path de nuestro método(se encuentra en el  java)/parámetros. en mi caso seria “http://localhost:8080/WebServiceRest/restService/InfoService/saludo/name=Pepe

Ya tenemos nuestro web service, lo siguiente es probarlo creando un cliente. Creamos un proyecto nuevo, un proyecto java normal añadimos al proyecto las librerías de de Jersey, creamos una clase java que tendrá el siguiente código.

import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
public class Client {
 public static final String BASE_URI = "http://localhost:8080/WebServiceRest";
 public static final String PATH_NAME = "/InfoService/saludo/";
 public static final String PATH_AGE = "/InfoService/suma/";
 
 public static void main (String [] args){
 String name ="Pepe";
 int n1 = 2;
 int n2 = 4;
 
 ClientConfig config = new DefaultClientConfig();
 Client client = Client.create(config);
 WebResource resource = client.resource(BASE_URI);
 
 WebResource nameResource = resource.path("restService").path(PATH_NAME+"name="+name);
 System.out.println("Cliente Response \n" + getClientResponse(nameResource));
 System.out.println("Response \n" + getResponse(nameResource) +"\n\n");
 
 WebResource ageResource = resource.path("restService").path(PATH_AGE+"n1="+n1+"&n2="+n2);
 System.out.println("Cliente Response \n" + getClientResponse(ageResource));
 System.out.println("Response \n" + getResponse(ageResource) +"\n\n");
 }
 
 private static String getClientResponse(WebResource resource){
 return resource.accept(MediaType.TEXT_XML).get(ClientResponse.class).toString();
 }
 
 private static String getResponse(WebResource resource){
 return resource.accept(MediaType.TEXT_XML).get(String.class);
 }
}

Para terminar lanzamos nuestro servidor y ejecutamos el cliente, el resultado sera:

Cliente Response
GET http://localhost:8080/WebServiceRest/restService/InfoService/saludo/name=Pepe returned a response status of 200 OK
Response
Hola Pepe
Cliente Response
GET http://localhost:8080/WebServiceRest/restService/InfoService/suma/n1=2&n2=4 returned a response status of 200 OK
Response
El suma de 2+4 es 6

Se pueden ver los proyectos completos en el los siguientes enlaces de GitHub:

WebServices: https://github.com/ronocid/WebServiceRest.git

Cliente: https://github.com/ronocid/ClienteWebServiceRest.git

Anuncios

Publicado el 02/10/2014 en Web Service y etiquetado en , , . Guarda el enlace permanente. Comentarios desactivados en Primer WebService REST en Java.

Los comentarios están cerrados.

A %d blogueros les gusta esto: