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:
[code]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.[/code]
Caso seja necessário, vou anexar também a codificação da classe GrupoProdutoFacade
GrupoProdutoFacade
[code]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();
}
}
[/code]
Alguém saberia me dizer o que estou fazendo de errado??