java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

Intento crear una aplicación hello world sencilla durante dos días utilizando el motor de la aplicación Jersey + Google. Para el simple proyecto de App Engine, 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 seguir este tutorial http://www.vogella.com/articles/REST/article.html .

Pero el servidor me sigue dando

java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

cuando agrego estas líneas en web.xml :

  TestServer  Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer  com.sun.jersey.config.property.packages com.test.myproject  1   Jersey REST Service /rest/*   

He descargado el JAX-RS 2.1 RI bundle Jersey JAX-RS 2.1 RI bundle desde aquí y he agregado todos los archivos jar en la carpeta WEB-INF/lib como se describe en el tutorial. E incluso después de dos días, nada está funcionando. He buscado varias veces en Google y, aparentemente, las personas que están usando Maven lo han resuelto de alguna manera, pero no estoy usando Maven ni el tipo que escribió ese tutorial.

Solo para comprobar si incluso com.sun.jersey.spi.container.servlet.ServletContainer existe en los com.sun.jersey.spi.container.servlet.ServletContainer importados de Jersey jars , intenté simplemente escribir este nombre totalmente calificado en Java y dejar que el intellisense terminara los nombres, pero no pude obtener ningún intellisense después de com.sun.je así que mi última conjetura es que ha habido algún cambio en el paquete en la última versión de Jersey y jersey ya no está dentro de com.sun . Estoy agotado y agradecería cualquier tipo de ayuda.

Ha descargado Jersey 2 (que RI de JAX-RS 2). El tutorial al que se refiere utiliza Jersey 1. Descargue Jersey 1.17.1 desde ( aquí ), debería ser suficiente para usted.

Jersey 1 usa com.sun.jersey , y Jersey 2 usa org.glassfish.jersey ahí la excepción.

También tenga en cuenta que también init-param comience con com.sun.jersey no será reconocido por Jersey 2.

Editar

El registro de recursos y proveedores en Jersey 2 contiene información adicional sobre cómo registrar clases / instancias en Jersey 2.

Si está usando jersey 2.x, entonces necesita una configuración diferente en web.xml ya que la clase de servlet es modificada. puedes actualizar tu web.xml con la siguiente configuración.

   myrest org.glassfish.jersey.servlet.ServletContainer  jersey.config.server.provider.packages your.package.path   unit:WidgetPU persistence/widget  1   myrest /rest/*  

Añadir esto en pom

  com.sun.jersey jersey-server 1.17.1   com.sun.jersey jersey-core 1.17.1   com.sun.jersey jersey-servlet 1.17.1  

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 su proyecto de eclipse Propiedades -> Ensamblaje de despliegue -> Agregar -> Entradas de ruta de comstackción Java -> Dependencias de Gradle -> Finalizar.

Entonces Eclipse no estaba usando las dependencias de Gradle cuando Apache estaba comenzando.

prueba esto :

org.glassfish.jersey.servlet.ServletContainer

en servlet-class

Tuve el mismo problema que tú, aunque seguí una guía diferente: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/

La parte extraña es que, en esta guía que he utilizado, no debería haber ningún problema con la compatibilidad entre las versiones (1.x contra 2.x) porque siguiendo la guía utilizas el jersey 1.8.x en pom.xml y en el web.xml se refiere a 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 las mías, no me ayudó, hice cambios en el pom.xml y en el web.xml el error cambió a: java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

¡Lo cual supuestamente debería existir!

Como resultado de este error, encontré una solución “nueva”: http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0-released/

Con Maven (arquetipos), generar un proyecto de jersey, le gusta esto:

 mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0 

¡Y funcionó para mí! 🙂

También me enfrenté a 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/

  • Lo principal que hay que notar es que las bibliotecas de jersey deben colocarse correctamente en la carpeta TOMCAT WEB-INF / lib. Se realiza automáticamente mediante la configuración de Eclipse mencionada en el enlace anterior. Creará un archivo WAR con los archivos JAR dependientes. De lo contrario, se encontrará con problemas con ClassNotFound Exception.

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 a.m. 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

  • El segundo tutorial explica cómo crear un servicio web que produce y consume salida JSON.

http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/

Ambos enlaces dieron una buena imagen de cómo funcionan las cosas y ahorran mucho tiempo.

Obtenemos este error debido a un problema de comstackción. Debería agregar bibliotecas ” Server Runtime ” en Build Path.

 "java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer" 

Por favor, siga los pasos a continuación para resolver la excepción de clase no encontrada.

Haga clic derecho en el project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0

Me encontré con el mismo error hoy, aunque estaba usando Jersey 1.x, y tenía los tarros correctos en mi classpath. Para aquellos que quieran seguir el tutorial de Vogella al pie de la letra y usar los flasks 1.x, necesitarás agregar las bibliotecas jersey a la carpeta WEB-INF / lib. Esto sin duda resolverá el problema.

necesitas agregar jersey-bundle-1.17.1.jar a lib del proyecto

Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages package.package.test 1

Debes reemplazar en tu web.xml:

  Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer  com.sun.jersey.config.property.packages com.test.myproject  1  

para esto:

  Jersey REST Service org.glassfish.jersey.servlet.ServletContainer  jersey.config.server.provider.packages com.test.myproject  1  

esto es Jersey 2.x utiliza paquetes org.glassfish.jersey en lugar de com.sun.jersey (que es usado por Jersey 1.x) y de ahí la excepción. Tenga en cuenta que también init-param que comience con com.sun.jersey no será reconocido por Jersey 2.x 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:

  org.glassfish.jersey.core jersey-server 2.X  

reemplace 2.X por la versión deseada, p. ej. 2.15

Una solución simple es verificar si tiene dependencias o libs en el ensamblado de implementación de eclipse. Probablemente si está usando tomcat, el servidor podría no haber identificado las librerías que estamos utilizando. en ese caso, especifíquelo explícitamente en el ensamblaje de implementación.

Volviendo al problema original: java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

Como se dijo anteriormente, en la versión JAX 2.x, la clase ServletContainer se ha movido al paquete – org.glassfish.jersey.servlet.ServletContainer. El contenedor relacionado es jersey-container-servlet-core.jar que se incluye dentro del jaxrs-ri-2.2.1.zip

JAX RS se puede resolver sin mvn copiando manualmente todos los archivos incluidos en el archivo zip jaxrs-ri-2.2.1.zip (he utilizado esta versión, funcionaría con cualquier versión 2.x) en la carpeta WEB-INF / lib. Copiar libs a la carpeta derecha los hace disponibles en tiempo de ejecución.

Esto es obligatorio si está utilizando eclipse para comstackr e implementar su proyecto.

En el archivo pom.xml tenemos que agregar

  com.sun.jersey jersey-core 1.8  

El mismo error y desperdicio 2+ horas de depuración y probando todas las opciones. No estaba usando el Maven / POM, así que no pude aprovechar esa solución dada por pocos.

Finalmente lo resolvió: Agregar los archivos JAR directamente a la carpeta tomcat / lib (NO WEB-INF \ lib) y reiniciar el tomcat.

Si alguien está intentando construir una aplicación de hello world utilizando Jersey, creo que una de las maneras más fáciles es seguir la documentación de Jersey.

https://jersey.github.io/download.html

Si ya está usando maven, tomaría solo unos minutos para ver el resultado.

Usé abajo.

 mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.26 

Básicamente depende de qué versión jersey estés usando. Si está usando Jersey ver.1.XX, necesita agregar

Jersey 1 usa ” com.sun.jersey “, y Jersey 2 usa org.glassfish . en la etiqueta de la clase servlet. Además, tenga en cuenta que también init-param que comience con com.sun.jersey no será reconocido por Jersey 2.

Y agregue todo el archivo jar a la carpeta lib de WEB-INF