Estou tentando construir um aplicativo simples hello world para dois dias usando o mecanismo de aplicativo Jersey + Google. Para um projeto AppEngine simples, segui estes tutoriais e ambos funcionam perfeitamente https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform
Mas agora estou tentando adicionar Jersey e seguindo este tutorial http://www.vogella.com/articles/REST/article.html .
Mas o servidor continua me dando
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
quando adiciono essas linhas no web.xml :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TestServer</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.test.myproject</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Tenho baixado Jersey JAX-RS 2.1 RI bundle
a partir de aqui e ter adicionado todos os arquivos jar em WEB-INF/lib
pasta, conforme descrito no tutorial. E mesmo depois de dois dias nada está funcionando. Pesquisei várias vezes no Google e, aparentemente, as pessoas que estão usando o Maven resolveram de alguma forma, mas eu não estou usando o Maven nem o cara que escreveu aquele tutorial.
Apenas para verificar se com.sun.jersey.spi.container.servlet.ServletContainer
existe mesmo no importado Jersey jars
, tentei escrever este nome totalmente qualificado em Java e deixar o intellisense terminar os nomes, mas não consegui obter nenhum intellisense depois, com.sun.je
então meu último palpite é que houve algum rearranjo de pacote na última compilação de Jersey e jersey
não está mais dentro com.sun
. Estou exausto e agradeceria qualquer tipo de ajuda.
fonte
Respostas:
Você baixou Jersey 2 (que RI de JAX-RS 2). O tutorial ao qual você está se referindo usa Jersey 1. Baixe Jersey 1.17.1 ( aqui ), deve ser suficiente para você.
Jersey 1 usa
com.sun.jersey
e Jersey 2 usaorg.glassfish.jersey
portanto, a exceção.Observe também que
init-param
começar comcom.sun.jersey
não será reconhecido por Jersey 2.Editar
O Registro de Recursos e Provedores em Jersey 2 contém informações adicionais sobre como registrar classes / instâncias em Jersey 2.
fonte
Se estiver usando jersey 2.x, você precisará de uma configuração diferente no web.xml, pois a classe do servlet é alterada nele. você pode atualizar seu web.xml com a seguinte configuração.
fonte
Adicione isso no pom
fonte
É um problema de configuração do eclipse, não de Jersey.
Deste thread ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
Clique com o botão direito do mouse em Propriedades do projeto Eclipse -> Montagem de Implementação -> Incluir -> Entradas do Caminho de Construção Java -> Dependências do Gradle -> Concluir.
Portanto, o Eclipse não estava usando as dependências do Gradle quando o Apache estava iniciando.
fonte
tente isto:
na classe de servlet
fonte
Tive o mesmo problema que você, embora tenha seguido um guia diferente: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/
O estranho é que, neste guia que utilizei, não devo ter nenhum problema de compatibilidade entre as versões (1.x contra 2.x) porque seguindo o guia você usa a camisa 1.8.x no
pom.xml
e no queweb.xml
você se refere uma classe (com.sun.jersey.spi.container.servlet.ServletContainer
) como dito antes da versão 1.x. Portanto, posso inferir que isso deve estar funcionando.Meu palpite é que, como estou usando o JDK 1.7, essa classe não existe mais.
Depois, tentei resolver com as respostas antes da minha, não adiantou, fiz alterações no
pom.xml
e noweb.xml
erro mudou para:java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
Que supostamente deveria existir!
Como resultado desse erro, encontrei uma "nova" solução: http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0-released/
Com Maven (arquétipos), gere um projeto de camisa, assim:
E funcionou para mim! :)
fonte
Eu também enfrentei um problema semelhante. Resolvido o problema através do tutorial passo a passo no link abaixo.
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-hello-world-example/
apache-tomcat-7.0.56-windows-x64 \ apache -tomcat-7.0.56 \ webapps \ JerseyJSONExample \ WEB-INF \ lib
"23/11/2014 12h06 130.458 jersey-client-1.9.jar
23/11/2014 12h06 458.739 jersey-core-1.9.jar
23/11/2014 12h06 147.952 jersey-json-1.9.jar
23/11/2014 12:06 713.089 jersey-server-1.9.jar "4 Arquivo (s) 1.450.238 bytes
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/
Ambos os links deram uma boa imagem de como as coisas funcionam e economizam muito tempo.
fonte
Recebemos este erro devido ao problema do caminho de construção. Você deve adicionar bibliotecas " Server Runtime " no Build Path.
Siga as etapas abaixo para resolver a exceção de classe não encontrada.
Clique com o botão direito em
project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0
fonte
Encontrei o mesmo erro hoje, embora estivesse usando Jersey 1.x, e tivesse os jars certos em meu caminho de classe. Para aqueles que desejam seguir o tutorial da vogela à risca e usar os jars 1.x, você precisará adicionar as bibliotecas de camisas à pasta WEB-INF / lib. Isso certamente resolverá o problema.
fonte
você precisa adicionar
jersey-bundle-1.17.1.jar
à biblioteca do projeto<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <!-- <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> --> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <!-- <param-name>jersey.config.server.provider.packages</param-name> --> <param-value>package.package.test</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
fonte
Você deve substituir em seu web.xml:
por esta:
este é Jersey 2.x usa pacotes org.glassfish.jersey em vez de com.sun.jersey (que é usado por Jersey 1.x) e, portanto, a exceção. Observe que também init-param começando com com.sun.jersey não será reconhecido pelo Jersey 2.x depois que você migrar para JAX-RS 2.0 e Jersey 2.x
se em algum momento você usar maven, seu pom.xml seria este:
substitua 2.X por sua versão desejada, por exemplo, 2.15
fonte
Uma solução simples é verificar se você tem dependências ou libs no conjunto de implantação do eclipse. Provavelmente, se você estiver usando o tomcat, o servidor pode não ter identificado as libs que estamos usando. nesse caso, especifique-o explicitamente no assembly de implantação.
fonte
Voltando ao problema original - java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
Como corretamente dito acima, na versão JAX 2.x, a classe ServletContainer foi movida para o pacote - org.glassfish.jersey.servlet.ServletContainer. O jar relacionado é jersey-container-servlet-core.jar que vem junto com jaxrs-ri-2.2.1.zip
JAX RS pode ser trabalhado sem mvn copiando manualmente todos os jars contidos no arquivo zip jaxrs-ri-2.2.1.zip (usei esta versão, funcionaria com qualquer versão 2.x) para a pasta WEB-INF / lib. Copiar libs para a pasta certa os torna disponíveis em tempo de execução.
Isso é necessário se você estiver usando o eclipse para construir e implementar seu projeto.
fonte
No arquivo pom.xml, precisamos adicionar
fonte
O mesmo erro e desperdício de 2+ horas depurando e tentando todas as opções. Não estava usando o Maven / POM, então não pude aproveitar essa solução dada por poucos.
Finalmente, o seguinte resolveu: Adicionar os jars diretamente à pasta tomcat / lib (NÃO WEB-INF \ lib) e reiniciar o tomcat.
fonte
Se alguém está tentando construir um aplicativo hello world usando Jersey, acho que uma das maneiras mais fáceis é seguir a documentação de Jersey.
https://jersey.github.io/download.html
Se você já estiver usando o maven, levará apenas alguns minutos para ver o resultado.
Usei abaixo.
fonte
Basicamente, depende de qual versão de jersey você está usando. Se você estiver usando Jersey ver.1.XX, você precisa adicionar
Jersey 1 usa " com.sun.jersey " e Jersey 2 usa org.glassfish . na tag de classe de servlet. Além disso, observe que o init-param começando com com.sun.jersey não será reconhecido pelo Jersey 2.
E adicione todo o arquivo jar na pasta WEB-INF lib
fonte