TDSI – Web Services com GlassFish, JTA / JPA / JSON – CRUD completo

Leia antes:

TDSI – Configurando o GlassFish para trabalhar com JTA / JPA – parte 1

TDSI – Configurando o GlassFish para trabalhar com JTA / JPA – parte 2

TDSI – Configurando o GlassFish para trabalhar com JTA / JPA – parte 3

TDSI – Web Services com GlassFish, JTA / JPA e JSON – parte 1

TDSI – Web Services com GlassFish, JTA / JPA e JSON – parte 2

TDSI – Web Services com GlassFish, JTA / JPA e JSON – parte 3

TDSI – Web Services com GlassFish, JTA / JPA e JSON – parte 4

TDSI – Web Services com GlassFish, JTA / JPA e JSON – parte 5

TDSI – Web Services com GlassFish, JTA / JPA e JSON – parte 6

TDSI – Web Services com GlassFish, JTA / JPA e JSON – parte 7

Projeto(s) completo(s) Cliente e Servidor em NetBeans 8: (não é virus ehehe) FabricaWS.rar e consomeFabrica.rar.

Abir o NetBeans e criar o seguinte projeto, conforme figuras abaixo:

Neste artigo vamos implementar um web service com CRUD completo e um cliente. As tabelas do banco de dados são as mesmas,  Marca.java e Modelo.java usando a biblioteca Jackson (não esqueça de adicionar os .jars).

Vamos usar novamente os POJOs Marca.java e Modelo.java.

Baseado no seu conhecimento adquirido para construção de  web services, crie um aplicativo chamado  FabricaWS. Abaixo uma parte do código.

package servicos.
imports ...
@Stateless
@Path("marcas")
public class MarcaResource {

 @PersistenceContext(unitName="FabricaWSPU")
 private EntityManager manager;
 private final ObjectMapper mapper = new ObjectMapper();
 private Marca marca = new Marca();

 public MarcaResource() {
 }

 @PUT
 @Path("insere")
 @Consumes("application/json")
 public Response insertMarca(String json) {
 try {
 marca = mapper.readValue(json,Marca.class);
 manager.persist(marca);
 } catch (Exception ex) {
 Logger.getLogger(MarcaResource.class.getName()).log(Level.SEVERE, null, ex);
 return Response.status(500).build();
 }
 return Response.status(201).build();
 }

 @PUT
 @Path("altera")
 @Consumes("application/json")
 public Response updateMarca(String json) {
 try {
 marca = mapper.readValue(json,Marca.class);
 manager.merge(marca);
 } catch (Exception ex) {
 Logger.getLogger(MarcaResource.class.getName()).log(Level.SEVERE, null, ex);
 return Response.status(500).build();
 }
 return Response.status(201).build();
 }

 @PUT
 @Path("elimina/{id}")
 public Response deleteMarca(@PathParam("id") String id) {
 try {
 manager.remove(manager.find(Marca.class, Long.parseLong(id)));
 } catch (Exception ex) {
 Logger.getLogger(MarcaResource.class.getName()).log(Level.SEVERE, null, ex);
 return Response.status(500).build();
 }
 return Response.status(200).build();
 }

 @GET
 @Path("buscamarca/{id}")
 @Produces("application/json")
 public Response getMarca(@PathParam("id") String id){
 String saidajson = null;
 try {
 marca = manager.find(Marca.class,Long.parseLong(id));
 saidajson = mapper.writeValueAsString(marca);
 } catch (NumberFormatException | JsonProcessingException ex) {
 Logger.getLogger(MarcaResource.class.getName()).log(Level.SEVERE, null, ex);
 }
 return Response.ok(saidajson,MediaType.APPLICATION_JSON).build();
 }

 @GET
 @Path("listamarcas")
 @Produces("application/json")
 public Response getMarcas(){
 List<Marca> marcas = manager.createNamedQuery("Marca.listar").getResultList();
 String saidajson = null;
 try {
 saidajson = mapper.writeValueAsString(marcas);
 } catch (JsonProcessingException ex) {
 Logger.getLogger(MarcaResource.class.getName()).log(Level.SEVERE, null, ex);
 Response.status(500).build();
 }
 return Response.ok(saidajson,MediaType.APPLICATION_JSON).build();
 }

Criando a aplicação Cliente chamada ConsomeFabrica.java que é uma aplicação java desktop que consome o web service. Foi criado também uma classe chamada HttpUtil.java que faz uso comum para conexões via protocolo http para realização do CRUD usando strings no formato JSON.

package util;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.logging.Logger;

/**
 *
 * @author Alex
 * references :http://stackoverflow.com/questions/1051004/how-to-send-put-delete-http-request-in-httpurlconnection
 * initial author:http://stackoverflow.com/users/4023/matthew-murdoch
 */
public class HttpUtil {

 private int codestatus;

 public int getCodestatus() {
 return codestatus;
 }

 public String httpMetodo(String url, String type, String reqbody) {

 HttpURLConnection con = null;
 String jsonresultado = null;

 try {
 con = getHttpConnection(url, type);

 if (reqbody != null) {
 con.setDoInput(true);
 con.setDoOutput(true);
 try (DataOutputStream out = new DataOutputStream(con.getOutputStream())) {
 out.writeBytes(reqbody);
 out.flush();
 }

 }
 con.connect();
 this.codestatus = con.getResponseCode();

 try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
 String temp = null;
 StringBuilder sb = new StringBuilder();
 while ((temp = in.readLine()) != null) {
 sb.append(temp).append(" ");
 }
 jsonresultado = sb.toString();
 in.close();
 }
 } catch (Exception e) {
 Logger.getLogger(e.getMessage());

 }
 return jsonresultado;
 }

 private HttpURLConnection getHttpConnection(String url, String type) {
 URL uri = null;
 HttpURLConnection conexao = null;
 try {
 uri = new URL(url);
 conexao = (HttpURLConnection) uri.openConnection();
 conexao.setRequestMethod(type); //type: POST, PUT, DELETE, GET
 conexao.setDoOutput(true);
 conexao.setDoInput(true);
 conexao.setConnectTimeout(60000); //60 secs
 conexao.setReadTimeout(60000); //60 secs
 conexao.setRequestProperty("Accept-Encoding", "UTF-8");
 conexao.setRequestProperty("Content-Type", "application/json");
 } catch (Exception e) {
 Logger.getLogger("erro"+e.getMessage());
 }
 return conexao;
 }

}

Classe consomeFabrica.java

package consomefabrica;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.Marca;
import util.HttpUtil;

public class ConsomeFabrica {

private static final String targetURL =
 "http://localhost:8080/FabricaWS/webresources/marcas"; 

 public static void main(String[] args) {

 Marca marca = new Marca();

 // gravando a marca
 marca.setCodMarca(Long.parseLong("10"));
 marca.setNomeMarca("VOLVO");
 gravaMarca(marca);

 // buscando (recuperando) uma marca gravada, outro código 1 por exemplo
 marca = buscaMarca(Long.parseLong("3"));

 // alterando a marca recuperada era VW agora trocando para :
 marca.setNomeMarca("VOLKSWAGEN");
 alteraMarca(marca);

 // elinina marca 10
 eliminaMarca(Long.parseLong("10"));

 // bucando uma lista de marcas
 Marca[] marcas;
 marcas = listaMarcas();

 for(Marca m : marcas){
 System.out.println("Marca: "+m.getCodMarca()+" "+m.getNomeMarca());
 }

 }

 public static Marca buscaMarca(Long id){

 String stringjson = new String();
 ObjectMapper mapper = new ObjectMapper();
 HttpUtil httpserver = new HttpUtil();
 String acaocaminho = new String();

 acaocaminho = targetURL + "/buscamarca/"+id.toString();

 stringjson = httpserver.httpMetodo(acaocaminho,"GET",null);

 Marca marca = new Marca();

 try {
 // convertendo o json em objeto
 marca = mapper.readValue(stringjson, Marca.class);
 } catch (IOException ex) {
 Logger.getLogger(ConsomeFabrica.class.getName()).log(Level.SEVERE, null, ex);
 }

 return marca;
 } 

 public static void gravaMarca(Marca marca){

 String stringjson = new String();
 ObjectMapper mapper = new ObjectMapper();
 HttpUtil httpserver = new HttpUtil();
 String acaocaminho = new String();

 // convertendo o objeto em json
 try {
 stringjson = mapper.writeValueAsString(marca);
 } catch (JsonProcessingException ex) {
 Logger.getLogger(ConsomeFabrica.class.getName()).log(Level.SEVERE, null, ex);
 }

 acaocaminho = targetURL+"/insere/";

 httpserver.httpMetodo(acaocaminho,"PUT",stringjson);
 }

 public static void alteraMarca(Marca marca){

 String stringjson = new String();
 ObjectMapper mapper = new ObjectMapper();
 HttpUtil httpserver = new HttpUtil();
 String acaocaminho = new String();

 // convertendo o objeto em json
 try {
 stringjson = mapper.writeValueAsString(marca);
 } catch (JsonProcessingException ex) {
 Logger.getLogger(ConsomeFabrica.class.getName()).log(Level.SEVERE, null, ex);
 }

 acaocaminho = targetURL+"/altera/";

 httpserver.httpMetodo(acaocaminho,"PUT",stringjson);
 }

 public static void eliminaMarca(Long id){

 HttpUtil httpserver = new HttpUtil();
 String acaocaminho = new String();

 acaocaminho = targetURL + "/elimina/"+id.toString();

 httpserver.httpMetodo(acaocaminho,"PUT",null);
 } 

 public static Marca[] listaMarcas(){

 String stringjson = new String();
 ObjectMapper mapper = new ObjectMapper();
 HttpUtil httpserver = new HttpUtil();
 String acaocaminho = new String();

 acaocaminho = targetURL + "/listamarcas";

 stringjson = httpserver.httpMetodo(acaocaminho,"GET",null);

 Marca[] marcas = null;

 try {
 // convertendo o json em um vetor de objetos
 marcas = mapper.readValue(stringjson,Marca[].class);
 } catch (IOException ex) {
 Logger.getLogger(ConsomeFabrica.class.getName()).log(Level.SEVERE, null, ex);
 }

 return marcas;
 }
}

Imagem das estruturas criadas

Links dos códigos:  Marca.java , Modelo.java  , HttpUtil.javaFabricaWS.java e consomeFabrica.java 

Projetos completos em NetBeans 8: (não é virus ehehe) FabricaWS.rar e consomeFabrica.rar.

 

 

Esse post foi publicado em Web Services Java Rest. Bookmark o link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s