6
respostas

Serialização JAXB com Json - Problema ao mudar para @Produces(MediaType.APPLICATION_JSON)

Me ajudem, para mim da o erro abaixo

out 11, 2017 9:26:29 AM org.glassfish.jersey.server.ApplicationHandler initialize INFORMAÇÕES: Initiating Jersey application, version Jersey: 2.5 2013-12-18 14:27:29... Exception in thread "main" java.lang.NoSuchMethodError: org.glassfish.jersey.CommonProperties.getValue(Ljava/util/Map;Ljavax/ws/rs/RuntimeType;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; at org.glassfish.jersey.jackson.JacksonFeature.configure(JacksonFeature.java:73) at org.glassfish.jersey.model.internal.CommonConfig.configureFeatures(CommonConfig.java:674) at org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:610) at org.glassfish.jersey.server.ResourceConfig.configureMetaProviders(ResourceConfig.java:800) at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:367) at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:162) at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:304) at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289) at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286) at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:301) at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:272) at org.glassfish.jersey.server.ContainerFactory.createContainer(ContainerFactory.java:79) at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory.createHttpServer(GrizzlyHttpServerFactory.java:110) at br.com.alura.loja.Servidor.startServer(Servidor.java:30) at br.com.alura.loja.Servidor.main(Servidor.java:16)

6 respostas

Oi Patricia, tudo bem?

Parece que você tem algum problema de versão nos jars do seu projeto. Se for mavenizado, tenta deixar as versões exatamente iguais ao do curso. Se forem os jars direto, tenta ver cada uma das versões do curso.

Oi Patricia,

conseguiu resolver o seu problema? Senão podes por favor partilhar o seu código da Classe Servidor?

Segue abaixo minhas classes @Path("projetos") public class ProjetoResource {

@Path("{id}") @GET @Produces(MediaType.APPLICATION_JSON) public Projeto busca(@PathParam("id") long id) { Projeto projeto = new ProjetoDAO().busca(id); return projeto; }

@POST @Consumes(MediaType.APPLICATION_XML) public Response adiciona(String conteudo) { Projeto projeto = (Projeto) new XStream().fromXML(conteudo); new ProjetoDAO().adiciona(projeto); URI uri = URI.create("/projetos/" + projeto.getId()); return Response.created(uri).build(); }

@Path("{id}") @DELETE public Response removeProjeto(@PathParam("id") long id) { new ProjetoDAO().remove(id); return Response.ok().build(); } }

@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Projeto { private Long id; private String name; private int year; public Projeto(long l, String string, int i) { this.id=l; this.name=string; this.year=i; }

public Projeto (){}

public String toXML() { return new XStream().toXML(this); }

public String toJson(){ return new Gson().toJson(this); }

public void setId(long id2) { this.id =id2; }

public Long getId() { return id; }

public void setId(Long id) { this.id = id; }

} public class ProjetoTest {

private HttpServer server;

@Test public void testaQueAConexaoComOServidorFuncionaNoPathDeProjetos() { //Crio conexão com web service Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://localhost:8080"); String conteudo = target.path("/projetos").request().get(String.class); System.out.println(conteudo); Assert.assertTrue(conteudo.contains("Minha loja"));

}

@Before public void startServer() throws IOException { this.server = Servidor.startServer(); }

@After public void stopServer() { server.stop(); } } public class Servidor {

public static void main(String[] args) throws IOException { HttpServer server = startServer(); System.out.println("Servidor rodando"); System.in.read(); stopServer(server); }

public static void stopServer(HttpServer server) { server.stop(); }

public static HttpServer startServer() { ResourceConfig config = new ResourceConfig().packages("br.com.alura.loja"); //ResourceConig config = new ResourceConfig().packages("br.com.alura.loja").register(JacksonJsonProvider); URI uri = URI.create("http://localhost:8080/"); HttpServer server = GrizzlyHttpServerFactory.createHttpServer(uri, config); return server; }

}

essas são as libs que tenho:

asm-all-repackaged-2.2.0-b21.jar cglib-2.2.0-b21.jar grizzly-framework-2.3.3.jar grizzly-http-2.3.3.jar grizzly-http-server-2.3.3.jar grizzly-rcm-2.3.3.jar gson-2.2.4.jar guava-14.0.1.jar hamcrest-core-1.1.jar hk2-api-2.2.0-b21.jar hk2-locator-2.2.0-b21.jar hk2-utils-2.2.0-b21.jar javax.annotation-api-1.2.jar javax.inject-2.2.0-b21.jar javax.ws.rs-api-2.0.jar jersey-client-2.5.jar jersey-common-2.5.jar jersey-container-grizzly2-http-2.4.1.jar jersey-container-servlet-core-2.5.jar jersey-json-1.18.6.jar jersey-media-json-jackson-2.25.jar jersey-server-2.5.jar json-20170516.jar json-path-2.1.0.jar junit-4.9.jar osgi-resource-locator-1.0.1.jar validation-api-1.1.0.Final.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar xstream-1.4.6.jar

Oi Patricia,

Peço desculpas pelo tempo de retorno, penso que o problema está no @Produces, mais concretamente no MediaType

@Path("projetos") 
public class ProjetoResource {

@Path("{id}") 
@GET 
@Produces(MediaType.APPLICATION_JSON)

deves alterar o media type do Produces para usar

@Path("{id}") 
@GET 
@Produces(MediaType.APPLICATION_XML)

mais quero fazer funcionar com JSON