[Resolvido] Dúvida GSON

1 resposta
Z

Galera boa tarde!

Estou seguindo um tutorial onde explica como faço para comunicar um webservice desenvolvido através do Jersey com o Android.
Meu Webservice já está funcionando tudo certinho e minha aplicação Web também, o problema está sendo justamente na hora de obter as informações do Webservice na aplicação android.

Segundo o tutorial o Jersey não se entende com o GSON e é preciso tratar isso para não gerar um problema na aplicação Android.
No exemplo o camarada fez a seguinte codificação:

@GET
    @Path("/buscarTodosGSON")
    @Produces("application/json")
    public String selTodosGSON(){
     return new Gson().toJson(Banco.getBancoInstance().getListaClientes());
    }

Já na minha aplicação eu fiz a publicação dos métodos das classes FACADE, sendo assim a minha codificação ficou da seguinte forma:

@GET
	@Path("/listarTodosAndroid")
	@Produces("application/json")
	public String listarTodosAndroid() {
		grupoProdutoDAO.beginTransaction();
		ArrayList<GrupoProduto> grupoProduto = (ArrayList<GrupoProduto>) grupoProdutoDAO.findAll();
		grupoProdutoDAO.closeTransaction();
		return new Gson().toJson(grupoProduto);
	}

Beleza, consegui salvar e mandei compilar a aplicação. Porém quando tento acessar o endereço do WS tenho o seguinte erro:

type Exception report

message java.lang.NoClassDefFoundError: com/google/gson/Gson

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.NoClassDefFoundError: com/google/gson/Gson
	com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause

java.lang.NoClassDefFoundError: com/google/gson/Gson
	br.com.unip.menudroidweb.facade.GrupoProdutoFacade.listarTodosAndroid(GrupoProdutoFacade.java:63)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
	com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
	com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350)
	com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause

java.lang.ClassNotFoundException: com.google.gson.Gson
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
	br.com.unip.menudroidweb.facade.GrupoProdutoFacade.listarTodosAndroid(GrupoProdutoFacade.java:63)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
	com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
	com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350)
	com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.30 logs.

Caso seja necessário, vou anexar também a codificação da classe GrupoProdutoFacade

GrupoProdutoFacade

package br.com.unip.menudroidweb.facade;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

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

import com.google.gson.Gson;

import br.com.unip.menudroidweb.dao.GrupoProdutoDAO;
import br.com.unip.menudroidweb.model.GrupoProduto;

@Path("/grupoproduto")
public class GrupoProdutoFacade implements Serializable {
	private static final long serialVersionUID = -7914066672489151023L;
	private GrupoProdutoDAO grupoProdutoDAO = new GrupoProdutoDAO();
	
	@PUT
	@Produces("application/json")
	public void createGrupoProduto(GrupoProduto grupoProduto) {
		grupoProdutoDAO.beginTransaction();
		grupoProdutoDAO.save(grupoProduto);
		grupoProdutoDAO.commitAndCloseTransaction();
	}
	
	public void updateGrupoProduto(GrupoProduto grupoProduto) {
		grupoProdutoDAO.beginTransaction();
		GrupoProduto persistedGrupoProduto = grupoProdutoDAO.find(grupoProduto.getIdGrupoProduto());
		persistedGrupoProduto.setDescricao(grupoProduto.getDescricao());
		grupoProdutoDAO.update(persistedGrupoProduto);
		grupoProdutoDAO.commitAndCloseTransaction();
	}
	
	@Path("{id}")
	@GET
	@Produces("application/json")
	public GrupoProduto findGrupoProduto(@PathParam("id") int grupoProdutoId) {
		grupoProdutoDAO.beginTransaction();
		GrupoProduto grupoProduto = grupoProdutoDAO.find(grupoProdutoId);
		grupoProdutoDAO.closeTransaction();
		return grupoProduto;
	}
	
	public List<GrupoProduto> listAll() {
		grupoProdutoDAO.beginTransaction();
		List<GrupoProduto> grupoProduto = grupoProdutoDAO.findAll();
		grupoProdutoDAO.closeTransaction();
		return grupoProduto;
	}

	@GET
	@Path("/listarTodosAndroid")
	@Produces("application/json")
	public String listarTodosAndroid() {
		grupoProdutoDAO.beginTransaction();
		ArrayList<GrupoProduto> grupoProduto = (ArrayList<GrupoProduto>) grupoProdutoDAO.findAll();
		grupoProdutoDAO.closeTransaction();
		return new Gson().toJson(grupoProduto);
	}
	
	public void deleteGrupoProduto(GrupoProduto grupoProduto) {
		grupoProdutoDAO.beginTransaction();
		GrupoProduto persistedGrupoProduto = grupoProdutoDAO.findReferenceOnly(grupoProduto.getIdGrupoProduto());
		grupoProdutoDAO.delete(persistedGrupoProduto);
		grupoProdutoDAO.commitAndCloseTransaction();
	}
}

Alguém saberia me dizer o que estou fazendo de errado??

1 Resposta

Z

Galera, encontrei o erro aqui.

Foi marcação minha, fiz o build path das lib e esqueci de colocar elas na pasta lib.
:oops:

Agora deu tudo certo.

Criado 24 de outubro de 2012
Ultima resposta 24 de out. de 2012
Respostas 1
Participantes 1