GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Erro ao implementar Jersey

java
webservice
Tags: #<Tag:0x00007f79979cc850> #<Tag:0x00007f79979cc6e8>

#1

Boa noite pessoal, estou tentando aprender a desevolver com Jersey, mas tem 2 dias inteiros que tento implementar e atualmente estou travado no seguinte erro: HTTP Status [500] – [Internal Server Error]

javax.servlet.ServletException: Servlet.init() for servlet [jersey-servlet] threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1366)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
Root Cause

java.lang.NoClassDefFoundError: Could not initialize class org.glassfish.jersey.internal.inject.Providers
org.glassfish.jersey.model.internal.ComponentBag.modelFor(ComponentBag.java:518)
org.glassfish.jersey.model.internal.ComponentBag.lambda$registerModel$10(ComponentBag.java:477)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:228)
org.glassfish.jersey.model.internal.ComponentBag.registerModel(ComponentBag.java:469)
org.glassfish.jersey.model.internal.ComponentBag.register(ComponentBag.java:380)
org.glassfish.jersey.model.internal.CommonConfig.register(CommonConfig.java:454)
org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:450)
org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:330)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1366)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
Note The full stack trace of the root cause is available in the server logs.

vou colocar aqui o meu pom.xml mas ja tentei com varias versões das dependências, tentei colocando só 1, 2, e etc, tentei toda combinação de dependências e versões mas foi em vão:

  <dependency>
  	<groupId>org.hibernate</groupId>
  	<artifactId>hibernate-core</artifactId>
  	<version>5.2.10.Final</version>
  </dependency>
  <dependency>
  	<groupId>org.hibernate</groupId>
  	<artifactId>hibernate-entitymanager</artifactId>
  	<version>5.2.10.Final</version>
  </dependency>
  <dependency>
  	<groupId>org.hibernate.javax.persistence</groupId>
  	<artifactId>hibernate-jpa-2.0-api</artifactId>
  	<version>1.0.0.Final</version>
  </dependency>
  <dependency>
  	<groupId>mysql</groupId>
  	<artifactId>mysql-connector-java</artifactId>
  	<version>5.1.34</version>
  	<scope>compile</scope>
  </dependency>
  <dependency>
  	<groupId>org.hibernate.validator</groupId>
  	<artifactId>hibernate-validator</artifactId>
  	<version>6.0.0.Beta2</version>
  </dependency>
  <!-- Jersey e JAX-RS -->
  <dependency>
  	<groupId>javax.ws.rs</groupId>
  	<artifactId>javax.ws.rs-api</artifactId>
  	<version>2.0</version>
  </dependency>
  <dependency>
  	<groupId>org.glassfish.jersey.containers</groupId>
  	<artifactId>jersey-container-servlet</artifactId>
  	<version>2.26-b04</version>
  </dependency>
  <dependency>
  	<groupId>org.glassfish.jersey.core</groupId>
  	<artifactId>jersey-server</artifactId>
  	<version>2.26-b04</version>
  </dependency>
  <dependency>
  	<groupId>org.glassfish.jersey.core</groupId>
  	<artifactId>jersey-client</artifactId>
  	<version>2.26-b04</version>
  </dependency>

e meu web.xml

<servlet>
        <servlet-name>jersey-servlet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
             <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>firstapi.api</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>jersey-servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

#2
<init-param>
             <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>firstapi.api</param-value>
        </init-param>

Essa configuração diz ao jersey onde ele deve procurar por classes anotadas com @Provider e @Path pra que ele possa registrá-las. COmo está a estrutura de pacotes do seu projeto?
Como está declarada sua classe de recurso com uma das anotações supracitadas?


#3

Minha estrutura de pacotes esta assim:

minha classe que uso os recursos:

package api;

import java.util.List;

import javax.persistence.EntityManager;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;

import dao.JPAUtil;
import model.ModuloModel;

@Path("/curso")
public class ModuloService {
	
	
	private EntityManager manager = JPAUtil.getEntityManager();
	
	@GET
	@Path("/teste")
	@Produces("application/json")
	public String teste(){
		return "Testando deste Jeito";
	}
	
	
	
	@GET
	@Path("/listar")
	@Produces("application/json")
	public List<ModuloModel> listar(){
		
		try{
			
			List<ModuloModel> modulos = manager.createQuery("from Modulo",ModuloModel.class).getResultList();
			manager.close();
			return modulos;
		}catch(Exception e){
			throw new WebApplicationException(500);
		}
		
	}
	
	
	@GET
	@Path("/buscar/{id}")
	@Produces("application/json")
	public ModuloModel buscar(@PathParam("id") int id){
		try{ ModuloModel moduloModel = manager.find(ModuloModel.class,id);
		manager.close();
		return moduloModel;
		}catch(Exception e){
			e.printStackTrace();
			
		}
		return null;
	}

	@POST
	@Path("/cadastrar")
	@Consumes("application/json")
	public Response cadastrar(ModuloModel moduloModel){
		
		try{
			manager.getTransaction().begin();
			manager.persist(moduloModel);
			manager.getTransaction().commit();
			manager.close();
			return Response.status(200).entity("Cadastro Realizado com Sucesso").build();
		}catch (Exception e) {
	e.printStackTrace();
			
		}
		return null;
	}
	
	@PUT
	@Path("/alterar")
	@Consumes("application/json")
	public Response alterar(ModuloModel moduloModel){
		try{
			manager.getTransaction().begin();
			manager.merge(moduloModel);
			manager.getTransaction().commit();
			manager.close();
			
			return Response.status(200).entity("cadastro alterado com sucesso").build();
		}catch(Exception e){
	e.printStackTrace();
			
		}
		return null;
	}
	
	@DELETE
	@Path("/excluir/{id}")
	public Response excluir(@PathParam("id") int id){
		try{
			ModuloModel moduloModel = manager.find(ModuloModel.class, id);
			manager.getTransaction().begin();
			manager.remove(moduloModel);
			manager.getTransaction().commit();
			manager.close();
			return Response.status(200).entity("cadastro excluido com sucesso").build();
		}catch(Exception e){
	e.printStackTrace();
			
		}
		return null;
		
		
	}
	
	
}

#4

Tenta mudar para 2.26-b03 . Aqui eu estava com problemas na b04.

Aparentemente seu package ta errado.

Tem que ser firstapi.api e não api.


#5

alterei a versão mas o problema persiste.
O package declarado na classe foi gerado automaticamente pelo eclipse ao criar a classe. Eu mudei o pagckage para firstapi.api mas o eclipse acusou erro, a solução dada pelo eclipse era criar um package chamado firstapi e colocar o package api dentro. no caso firstapi era o nome do projeto.
De qualquer forma o erro ainda continua, eu literalmente nao sei mais oque fazer…


#6

package firstapi.api;


#7

sim, apos a alteração ficou desta forma


#8

Altere o valor do parametro para api, somente

<init-param>
             <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>api</param-value>
        </init-param>

De acordo com o print que vc colocou, firstapi é o seu contexto e ele não faz parte do pacote. Da forma que vc configurou, seria necessário ter um nível de diretório superior ao api com o nome firstapi.

Se não der certo, altere o param-name para com.sun.jersey.config.property.packages

<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>api</param-value>
</init-param>

#9

Voltei o valor e o package para api apenas

alterando este param-name ainda continua dando erro, porém em vez de dar

java.lang.NoClassDefFoundError: Could not initialize class org.glassfish.jersey.internal.inject.Providers

esta dando:

java.lang.NoClassDefFoundError: javax/ws/rs/client/RxInvokerProvider

segue o erro completo:

javax.servlet.ServletException: Servlet.init() for servlet [jersey-servlet] threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1366)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
Root Cause

java.lang.NoClassDefFoundError: javax/ws/rs/client/RxInvokerProvider
org.glassfish.jersey.internal.inject.Providers.getJaxRsProviderInterfaces(Providers.java:117)
org.glassfish.jersey.internal.inject.Providers.(Providers.java:90)
org.glassfish.jersey.model.internal.ComponentBag.modelFor(ComponentBag.java:518)
org.glassfish.jersey.model.internal.ComponentBag.lambda$registerModel$10(ComponentBag.java:477)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:228)
org.glassfish.jersey.model.internal.ComponentBag.registerModel(ComponentBag.java:469)
org.glassfish.jersey.model.internal.ComponentBag.register(ComponentBag.java:380)
org.glassfish.jersey.model.internal.CommonConfig.register(CommonConfig.java:454)
org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:450)
org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:330)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1366)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
Root Cause

java.lang.ClassNotFoundException: javax.ws.rs.client.RxInvokerProvider
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1275)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1109)
org.glassfish.jersey.internal.inject.Providers.getJaxRsProviderInterfaces(Providers.java:117)
org.glassfish.jersey.internal.inject.Providers.(Providers.java:90)
org.glassfish.jersey.model.internal.ComponentBag.modelFor(ComponentBag.java:518)
org.glassfish.jersey.model.internal.ComponentBag.lambda$registerModel$10(ComponentBag.java:477)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:228)
org.glassfish.jersey.model.internal.ComponentBag.registerModel(ComponentBag.java:469)
org.glassfish.jersey.model.internal.ComponentBag.register(ComponentBag.java:380)
org.glassfish.jersey.model.internal.CommonConfig.register(CommonConfig.java:454)
org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:450)
org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:330)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1366)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
Note The full stack trace of the root cause is available in the server logs.


#10

Pessoal muito obrigado mesmo pela ajuda de vocês, consegui rodar o código, para isso tive que adicionar algumas dependências e alterei a versão de algumas que eu estava usando no final ficou assim:

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
</dependency>

 <dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.21</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.21</version>
</dependency>
 
 
 <dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>2.2.3</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.21</version>
</dependency>

<dependency>
<groupId>org.glassfish.jersey.bundles</groupId>
<artifactId>jaxrs-ri</artifactId>
<version>2.21</version>
</dependency>