Por que usar REST/Jersey para transporta dados, Tutorial

Na minha rotina profissional houve a necessidade de transportar informações de um servidor para outro, esses servidores ficavam em locais diferentes e so um deles tinha acesso ao banco de dados que no caso era ORACLE, a solução mais pratica que encontrei foi criando um serviço REST,nesse exemplo ele retorna duas strings Json de estado e cidade um exemplo bem simples de retorno, poderia ser em formato xml, separado por “;” para ser visualizado em Excel em fim N possibilidades, muito útil


imagens passo a passo …
https://drive.google.com/open?id=0B7K8qkuBiLoCNjdlQ196MG5ERlk 1
https://drive.google.com/open?id=0B7K8qkuBiLoCZ1dleGJKZjZMREU 2
https://drive.google.com/open?id=0B7K8qkuBiLoCdzNvd2tnR3FmMnM 3
https://drive.google.com/open?id=0B7K8qkuBiLoCVTB3N29lSVI3bGc 4
https://drive.google.com/open?id=0B7K8qkuBiLoCcGVRSXItbTgzc3M 5
https://drive.google.com/open?id=0B7K8qkuBiLoCZDBVaDBWM3FyT2M 6
https://drive.google.com/open?id=0B7K8qkuBiLoCcEZjNUhUN2ZSd3c 7
https://drive.google.com/open?id=0B7K8qkuBiLoCSzhRUnRkd0xxcTA 8
https://drive.google.com/open?id=0B7K8qkuBiLoCS0VZdzBvb0E0LUE 9
https://drive.google.com/open?id=0B7K8qkuBiLoCODBxbFV6amh6ZDA 10
https://drive.google.com/open?id=0B7K8qkuBiLoCYV9iVTZPU1hzaWs 11
https://drive.google.com/open?id=0B7K8qkuBiLoCMzRrQWlXTGVocGM 12
https://drive.google.com/open?id=0B7K8qkuBiLoCdHBQeVVPblBTVWc 13
https://drive.google.com/open?id=0B7K8qkuBiLoCbnlVWDViYk43SVk 14
https://drive.google.com/open?id=0B7K8qkuBiLoCcXp1Qm5SbGdwYzg 15
https://drive.google.com/open?id=0B7K8qkuBiLoCWWxySjBndmJtU2s 16
https://drive.google.com/open?id=0B7K8qkuBiLoCX1BSSXI1UVAtVTg 17

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>RESTJerseyExemplo</groupId>
  <artifactId>RESTJerseyExemplo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>RESTJerseyExemplo</name>
  <description>RESTJerseyExemplo</description>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <!-- COLOCAR DEPEDENCIAS A BAIXO -->
  <dependencies>
		<dependency>
			<groupId>asm</groupId>
			<artifactId>asm</artifactId>
			<version>3.3.1</version>
		</dependency>
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-bundle</artifactId>
			<version>1.19</version>
		</dependency>
		<dependency>
			<groupId>org.json</groupId>
			<artifactId>json</artifactId>
			<version>20140107</version>
		</dependency>
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-server</artifactId>
			<version>1.19</version>
		</dependency>
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-core</artifactId>
			<version>1.19</version>
		</dependency>
	</dependencies>
</project>

web.xml


<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
	<display-name>RESTJerseyExemplo</display-name>
	<welcome-file-list>
		<welcome-file>inicio.jsp</welcome-file>
	</welcome-file-list>
 
	<servlet>
		<servlet-name>Jersey Web Application</servlet-name>
		<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Jersey Web Application</servlet-name>
		<url-pattern>/RESTJerseyExemplo/*</url-pattern>
	</servlet-mapping>
</web-app>

exemploJon.java

package br.com.restjersey.testeWs;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Thiago Araujo - tjca1@hotmail.com
 */
 
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.Response;
import org.json.JSONException;
import org.json.JSONObject;
 
@Path("/servicoJson")
public class exemploJson {
      
	  @GET
	  @Produces("application/json")
	  //@Produces("application/xml")
	  public Response estados() throws JSONException {
		  
		  List<String> list_estados = new ArrayList<String>();	  
	      JSONObject jo = new JSONObject();
	    ///////PODERIA SER UMA CHAMADA DE BANCO USANDO ENTIDADES HIBERNATE ou jdbc etc.. O IMPORTANTE MESMO É POPULAR A LISTA APARTIR DO PARAMETRO e levar pra outro servidor!
	    	  int count = 0;
	    	  list_estados.add("sp");
	    	  while(count<30){
	    		  list_estados.add("_estado_"+count);
	    		  count++;
	    	  }
	    ///////PODERIA SER UMA CHAMADA DE BANCO USANDO ENTIDADES HIBERNATE ou jdbc etc.. O IMPORTANTE MESMO É POPULAR A LISTA APARTIR DO PARAMETRO e levar pra outro servidor!
		    jo.put("est", list_estados);
			String result = "" + jo;
			return Response.status(200).entity(result).build();
		  }
	  
	  ///////////////////////////////////////////////
	  @Path("{cid}")
	  @GET
	  @Produces("application/json")
	  public Response cidades(@PathParam("cid") String cid) throws JSONException {
	  List<String> list_cid = new ArrayList<String>();	  
      JSONObject jo = new JSONObject();
      ///////PODERIA SER UMA CHAMADA DE BANCO USANDO ENTIDADES HIBERNATE ou jdbc etc.. O IMPORTANTE MESMO É POPULAR A LISTA APARTIR DO PARAMETRO e levar pra outro servidor!
      if(cid.equalsIgnoreCase("sp")){
    	  int count = 0;
    	  while(count<30){
    		  list_cid.add(cid+"_cidade_"+count);
    		  count++;
    		  
    	  }
       ///////PODERIA SER UMA CHAMADA DE BANCO USANDO ENTIDADES HIBERNATE O IMPORTANTE MESMO É POPULAR A LISTA APARTIR DO PARAMETRO
    	  
       }else{ /*....*/
    	   list_cid.add("VAZIO");
    	   
       }
       ////
	   jo.put("cids", list_cid);
		String result = "" + jo;
		return Response.status(200).entity(result).build();
	  }
	  
}

urls para teste!
http://localhost:8181/RESTJerseyExemplo/RESTJerseyExemplo/servicoJson/
http://localhost:8181/RESTJerseyExemplo/RESTJerseyExemplo/servicoJson/sp
///////////////////////////////////
cliente em outro servidor !

package br.com.restjersey.testeWsCliente;
 
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
 
/**
 * @author Thiago Araujo - tjca1@hotmail.com
 * 
 */
 
public class exemploJsonCliente {
	//ip ficticio(não existe !)  so para demostração 
	private final String  IP_SERVER = "200.178.175.253";
 
	public static void main(String[] args) {
 
		exemploJsonCliente client = new exemploJsonCliente();
		client.getCidFResponse();
		client.getEstadoCResponse();
	}
 
	private void getEstadoCResponse() {
		try {
 
			Client client = Client.create();
			WebResource webResource2 = client.resource("http://"+IP_SERVER+"/RESTJerseyExemplo/RESTJerseyExemplo/servicoJson/");
			ClientResponse response2 = webResource2.accept("application/json").get(ClientResponse.class);
			if (response2.getStatus() != 200) {
				throw new RuntimeException("Failed : CODIGO DO ERRO :  " + response2.getStatus());
			}
 
			String output2 = response2.getEntity(String.class);
			System.out.println(output2);
 
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	private void getCidFResponse() {
		try {
 
			Client client = Client.create();
			WebResource webResource = client.resource("http://"+IP_SERVER+"/RESTJerseyExemplo/RESTJerseyExemplo/servicoJson/sp");
			ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);
			
			if (response.getStatus() != 200) {
				throw new RuntimeException("Failed : CODIGO DO ERRO : " + response.getStatus());
			}
 
			String output = response.getEntity(String.class);
			System.out.println(output);
 
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

////////////////////////////////////
download projeto Eclipse
http://www.mediafire.com/download/89lrfnyisn856th/RESTJerseyExemplo.rar

Thiago Araujo - tjca1@hotmal.com

Java Standard Edition 5 Programmer Certified Professional