Estoy tratando de crear una aplicación simple de hola mundo durante dos días utilizando el motor de aplicaciones Jersey + Google. Para un proyecto simple de AppEngine, seguí estos tutoriales y ambos funcionan bien https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform
Pero ahora estoy tratando de agregar Jersey y siguiendo este tutorial http://www.vogella.com/articles/REST/article.html .
Pero el servidor sigue dándome
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
cuando agrego estas líneas en 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>
He descargado Jersey JAX-RS 2.1 RI bundle
desde aquí y he agregado todos los archivos jar en la WEB-INF/lib
carpeta como se describe en el tutorial. E incluso después de dos días, nada funciona. He buscado varias veces en Google y aparentemente las personas que están usando Maven lo han resuelto de alguna manera, pero yo no estoy usando Maven ni tampoco el tipo que escribió ese tutorial.
Solo para verificar si incluso com.sun.jersey.spi.container.servlet.ServletContainer
existe en importado Jersey jars
, intenté escribir este nombre completamente calificado en Java y dejar que el intellisense termine los nombres, pero no pude obtener ningún intellisense después, com.sun.je
por lo que mi última suposición es que ha habido una reorganización del paquete en la última compilación de Jersey y jersey
ya no está adentro com.sun
. Estoy agotado y agradecería cualquier tipo de ayuda.
fuente
Respuestas:
Ha descargado Jersey 2 (que RI de JAX-RS 2). El tutorial al que te refieres usa Jersey 1. Descarga Jersey 1.17.1 desde ( aquí ), debería ser suficiente para ti.
Jersey 1 utiliza
com.sun.jersey
, y Jersey 2 utiliza, pororg.glassfish.jersey
tanto, la excepción.También tenga en cuenta que Jersey 2 no reconocerá también
init-param
comenzar concom.sun.jersey
.Editar
Registro de recursos y proveedores en Jersey 2 contiene información adicional sobre cómo registrar clases / instancias en Jersey 2.
fuente
Si está utilizando jersey 2.x, entonces necesita una configuración diferente en web.xml ya que la clase de servlet está cambiando. puede actualizar su web.xml con la siguiente configuración.
fuente
Agrega esto en pom
fuente
Es un problema de configuración de eclipse, no un problema de Jersey.
De este hilo ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
Haga clic con el botón derecho en Propiedades de su proyecto de eclipse -> Ensamblaje de implementación -> Agregar -> Entradas de ruta de compilación Java -> Dependencias de Gradle -> Finalizar.
Entonces, Eclipse no estaba usando las dependencias de Gradle cuando Apache se estaba iniciando.
fuente
prueba esto :
en clase de servlet
fuente
Tuve el mismo problema que tú, aunque he seguido una guía diferente: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/
Lo extraño es que, en esta guía que he usado, no debería tener ningún problema con la compatibilidad entre versiones (1.x contra 2.x) porque siguiendo la guía usas la camiseta 1.8.xy
pom.xml
en la queweb.xml
te refieres una clase (com.sun.jersey.spi.container.servlet.ServletContainer
) como se dijo antes de la versión 1.x. Entonces, como puedo inferir, esto debería estar funcionando.Supongo que porque estoy usando JDK 1.7, esta clase ya no existe.
Después, traté de resolver con las respuestas antes que la mía, no ayudó, hice cambios en
pom.xml
y enweb.xml
el error cambió a:java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
¡Que supuestamente debería existir!
Como resultado de este error, encontré una "nueva" solución: http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0-released/
Con Maven (arquetipos), genere un proyecto de jersey, le gusta esto:
¡Y funcionó para mí! :)
fuente
También enfrenté un problema similar. Resolvió el problema siguiendo el tutorial paso a paso del siguiente enlace.
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 12:06 a. M. 130,458 jersey-client-1.9.jar
23/11/2014 12:06 AM 458,739 jersey-core-1.9.jar
23/11/2014 12:06 a.m. 147,952 jersey-json-1.9.jar
23/11/2014 12:06 AM 713,089 jersey-server-1.9.jar "4 Archivo (s) 1,450,238 bytes
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/
Ambos enlaces ofrecen una buena imagen de cómo funcionan las cosas y ahorran mucho tiempo.
fuente
Recibimos este error debido a un problema de ruta de compilación. Debe agregar bibliotecas " Server Runtime " en Build Path.
Siga los pasos a continuación para resolver la excepción de clase no encontrada.
Clic derecho en
project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0
fuente
Hoy encontré el mismo error aunque estaba usando Jersey 1.xy tenía los frascos correctos en mi classpath. Para aquellos que deseen seguir el tutorial de vogella al pie de la letra y usar los frascos 1.x, deberán agregar las bibliotecas de jersey a la carpeta WEB-INF / lib. Sin duda, esto resolverá el problema.
fuente
necesitas agregar
jersey-bundle-1.17.1.jar
a la biblioteca del proyecto<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>
fuente
Debe reemplazar en su web.xml:
para esto:
esto es Jersey 2.x usa paquetes org.glassfish.jersey en lugar de com.sun.jersey (que es usado por Jersey 1.x) y por lo tanto la excepción. Tenga en cuenta que también Jersey 2.x no reconocerá init-param que comience con com.sun.jersey una vez que migre a JAX-RS 2.0 y Jersey 2.x
si en algún momento usa maven, su pom.xml sería este:
reemplace 2.X por la versión que desee, por ejemplo, 2.15
fuente
Una solución alternativa simple es verificar si tiene dependencias o bibliotecas en el ensamblaje de implementación de eclipse. Probablemente, si está usando tomcat, es posible que el servidor no haya identificado las bibliotecas que estamos usando. en ese caso, especifíquelo explícitamente en el ensamblaje de implementación.
fuente
Volviendo al problema original: java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
Como se dijo correctamente anteriormente, en la versión JAX 2.x, la clase ServletContainer se ha movido al paquete: org.glassfish.jersey.servlet.ServletContainer. El jar relacionado es jersey-container-servlet-core.jar que viene incluido dentro del jaxrs-ri-2.2.1.zip
JAX RS se puede resolver sin mvn copiando manualmente todos los frascos contenidos en el archivo zip jaxrs-ri-2.2.1.zip (he usado esta versión, funcionaría con cualquier versión 2.x) a la carpeta WEB-INF / lib. Copiar las bibliotecas en la carpeta correcta las hace disponibles en tiempo de ejecución.
Esto es necesario si está utilizando eclipse para construir e implementar su proyecto.
fuente
En el archivo pom.xml debemos agregar
fuente
El mismo error y perdí más de 2 horas depurando y probando todas las opciones. No estaba usando Maven / POM, por lo que no pude aprovechar esa solución dada por pocos.
Finalmente lo siguiente lo resolvió: agregar los frascos directamente a la carpeta tomcat / lib (NO WEB-INF \ lib) y reiniciar el tomcat.
fuente
Si alguien está intentando crear una aplicación de saludo mundial usando Jersey, creo que una de las formas más fáciles es seguir la documentación de Jersey.
https://jersey.github.io/download.html
Si ya está utilizando maven, solo le tomará unos minutos ver el resultado.
Usé a continuación.
fuente
Básicamente depende de la versión de jersey que estés usando. Si está utilizando Jersey ver.1.XX, debe agregar
Jersey 1 usa " com.sun.jersey " y Jersey 2 usa org.glassfish . en la etiqueta de clase de servlet. Además, tenga en cuenta que Jersey 2 no reconocerá también init-param que comience con com.sun.jersey.
Y agregue todo el archivo jar en la carpeta lib de WEB-INF
fuente