Ir al contenido principal

RESTful Webservices con Java (Jersey / JAX-RS) - Tutorial Uno

REST con Java (JAX-RS) usando Jersey

Este articulo explica como desarrollar RESTful web services en Java con JAX-RS implementacion de Jersey.


En este ejemplo se usara SpringSource Tools Suite(Eclipse Helios), Java 1.6, SpringSource TC Server and JAX-RS 1.1. (Jersey 1.4).


1. REST - Representational State Transfer

1.1 Informacion General:
En una Arquitectura REST tipicamente se tiene un REST server, el cual provee acceso a los Clientes REST  que acceden a consultar, modificar un Recurso REST.

REST permite que los recursos sean presentados en diferentes tipos de datos, "text, html, xml, JSON".  El Cliente REST puede generar una peticion de un tipo de dato via el protocolo HTTP.

1.2. HTTP metodos

Los metodos estandar HTTP usados en en REST son  PUT, GET, POST, DELETE.

1.3. RESTFul webservices

Un RESTFul webservices es basados en metodos HTTP y en el concepto REST. Por lo general se define URI base para los servicios, los MIME-types sus soportes (XML, Text, JSON, user-defined,..) y un conjunto de operaciones (POST, GET, PUT, DELETE) que seran soportados. JAX-RS soporta la creacion de XML y JSON.

1.4. Java, REST and Jersey

Java define el estandar de  REST  via JAX-RS (The Java API for RESTful Web Services) en JSR 311 . Jersey es la implementación de referencia de esta especificación. Jersey contiene basicamente el core server y el core client. El core client provee una libreria para comunicar con el Server. 
JAX-RS usa  anotaciones que definen las clases pertinentes de REST.




2. Instalacion

2.1.  Jersey

Download Jersey de Jersey Homepage . extraer el zip y usar los JARS de la carpeta lib

2.2.  STS(Eclipse) y  STS Server(Tomcat)

Descargar 


SpringSource Tool Suite STS server viene incluido  en el STS. 



3. Crear tu primer RESTful Webservice


Crear un nuevo proyecto "Dynamic Web Project" "WebServiceOne". 




Copiar todo los  jars de la carpeta lib de zip Jersey dentro de "WEB-INF/lib".

3.2.  Java Class

Crear la clase domain.


package com.android.peru.wsone;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class WSOneAll {
 private String summary;
 private String description; 
 public String getSummary() {
  return summary;
 }
 public void setSummary(String summary) {
  this.summary = summary;
 }
 public String getDescription() {
  return description;
 }
 public void setDescription(String description) {
  this.description = description;
 }
}


Crear la siguiente clase.

package com.android.peru.wsone;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/WSOneAll")
public class WSOneAllResource {

 @GET
 @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
 public WSOneAll getXML() {
  WSOneAll wsOneAll = new WSOneAll();
  wsOneAll.setSummary("Este es mi primer WS.");
  wsOneAll.setDescription("JSON: Este es mi primer WS con XML, JSON");
  return wsOneAll;
 }

 // This can be used to test the integration with the browser
 @GET
 @Produces( { MediaType.TEXT_XML })
 public WSOneAll getHTML() {
  WSOneAll wsOneAll = new WSOneAll();
  wsOneAll.setSummary("Este es mi primer WS.");
  wsOneAll.setDescription("XML: Este es mi primer WS con XML, JSON");
  return wsOneAll;
 }
}

3.3.  Definir Jersey Servlet dispatcher

Necesitas registrar Jersey como servlet dispatcher para REST requests. abrir el archivo "web.xml" y modificar lo siguiente.



Tip

El parametro  "com.sun.jersey.config.property.package" define en que package buscara las clases Web Service.


3.4.  Run your rest service

Correr la  aplicacion web en el STS Server. Probar tu REST service con la siguiente url: "http://localhost:8080/WebServiceOne/rest/WSOneAll"..

El Explorer debe mostrar:

  xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <wsOneAll>
  <description>JSON: Este es mi primer WS con XML, JSONdescription>
  <summary>Este es mi primer WS.summary>
  wsOneAll>


3.5. Crear un cliente

Jersey contiene una libreria REST client. Esta libreria es usada para  testing o para construir un REST client en Java.
Crear una nueva clase Java "com.android.peru.wsone.client.WSOneClient".



package com.android.peru.wsone.client;

import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
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 WSOneClient {

 public static void main(String[] args) {
  WSOneAllClient();
 }

 private static void WSOneAllClient(){
  ClientConfig config = new DefaultClientConfig();
  Client client = Client.create(config);
  WebResource service = client.resource(getBaseURIWS());
  System.out.println(service.path("rest").path("WSOneAll").accept(
    MediaType.TEXT_XML).get(String.class));
  System.out.println(service.path("rest").path("WSOneAll").accept(
    MediaType.APPLICATION_JSON).get(String.class));
  System.out.println(service.path("rest").path("WSOneAll").accept(
    MediaType.APPLICATION_XML).get(String.class));
 }

 private static URI getBaseURIWS() {
  return UriBuilder.fromUri(
    "http://localhost:8080/WebServiceOne").build();
 }
}



Thank you

Gracias, Espero sirva de ayuda a la gente que esta iniciando con Web Service, en especial REST.

David Motta B.


Comentarios

  1. en el item 3.3 dice que "Necesitas registrar Jersey como servlet dispatcher para REST requests. abrir el archivo "web.xml" y modificar lo siguiente.", despues no aparece los que se debe modificar. gracias

    ResponderEliminar
  2. Copio la configuracion del Web.xml
    com.android-peru.wsone

    Jersey REST Service
    com.sun.jersey.spi.container.servlet.ServletContainer

    com.sun.jersey.config.property.packages
    com.android.peru.wsone

    1


    Jersey REST Service
    /rest/*

    ResponderEliminar
  3. El blogger no soporta comentar codigos XML,

    ResponderEliminar
  4. favor por casualidad no tienes como hacerlo co Netbeans.
    enviar al eitimfernando@hotmail.com

    gracias.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Java POI HSSFCell : añadir comentario en una celda

POI HSSFComment: Una manera simple de añadir un comentario en una celda de excel usando el metodo cell.setCellComment(). public class ExcelTools { public static void main(String[] args){ //escribirExcel(); //leerExcel(); validarValoresDuplicadosLista(); System.out.println("Ejemplo Finalizado."); } public static void escribirExcel(){ try{ //Se crea el libro Excel HSSFWorkbook wb = new HSSFWorkbook(); //Se crea una nueva hoja dentro del libro HSSFSheet sheet = wb.createSheet("HojaEjemplo"); //Se crea una fila dentro de la hoja HSSFRow row = sheet.createRow((short)0); HSSFPatriarch patr = sheet.createDrawingPatriarch(); //Creamos celdas de varios tipos row.createCell((short)0).setCellValue(1); row.createCell((short)1).setCellValue(1.2); row.createCell((short)2).setCellValue("ejemplo&

Debugging Remoto con Eclipse + WebSphere 7 + Maven

Tienes proyectos java en Maven y no puedes ubicar bugs fácilmente a falta de junit. Sin embargo, existe la alternativa de debugear la aplicación web a través de Java Debugger (jdb). Aquí les muestro una guía de como hacer un debug remoto de la aplicación web en Eclipse y WebSphere 7 a través de Java Debugger (JDB). Eclipse <----> Java Debugger (jdb) <----> WebSphere 7 1. Habilitar el WebSphere en modo Debug. Para esto seguir los siguientes pasos:  1. Servers –> Server Types –> WebSphere application servers 2. Under Server Infrastructure section –> expandir Java and Process Management –> Process definition 3. dentro de la seccion Additional Properties –> click Java Virtual Machine 4. clic en el check “Debug Mode” 5. En texbox Debug arguments, poner este valor:  -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 6. Reiniciar el servidor WebSphere. Ahora, WebSphere se inicia en modo debug, y escuchando en el pu

DB2 Error SQL20054N

Ejecutando un alter table me da el  siguiente error: db2 "ALTER TABLE PRG_REC.ESTIMADO_OBJETIVO DROP COLUMN VTA_OBJ_CAMP_FALTA_EXTRANJERA"; Error:  [db2inst1@ibmdb2test]:/home/db2inst1/1223/REQ1223/rollback$ db2 "ALTER TABLE PRG_REC.ESTIMADO_OBJETIVO DROP COLUMN VTA_OBJ_CAMP_FALTA_EXTRANJERA"; DB21034E  The command was processed as an SQL statement because it was not a valid Command Line Processor command.  During SQL processing it returned: SQL20054N  The table "PRG_REC.ESTIMADO_OBJETIVO" is in an invalid state for the operation.  Reason code="23" .  SQLSTATE=55019 Segun IBM la descripcion del error: SQL20054N:  La tabla   nombre-tabla   está en un estado no válido para la operación. Código de razón= código-razón . 23 Se ha realizado el número máximo de modificaciones recomendadas de REORG. Se permite un máximo de tres modificaciones recomendadas de REORG en una tabla antes de que se deba realizar reorg, para actualizar las fila