eclipse google-app-engine java-ee jersey jersey-2.0
jaxrs-ri-2.2.1.zipjaxrs-ri-2.2.1.zip

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



google-app-engine java-ee (17)

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 :

<?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 el JAX-RS 2.1 RI bundle Jersey JAX-RS 2.1 RI bundle desde here 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.


Añadir esto en pom

<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.17.1</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.17.1</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-servlet</artifactId> <version>1.17.1</version> </dependency>


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


Debes reemplazar en tu web.xml:

<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>

para esto:

<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.test.myproject</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

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:

<dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.X</version> </dependency>

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


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.


En el archivo pom.xml tenemos que agregar

<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.8</version> </dependency>


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 compilación Java -> Dependencias de Gradle -> Finalizar.

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


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 ( here ), 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.


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 frascos 1.x, necesitarás agregar las bibliotecas jersey a la carpeta WEB-INF / lib. Esto sin duda resolverá el problema.


Obtenemos este error debido a un problema de compilació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


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


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.

<servlet> <servlet-name>myrest</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>your.package.path</param-value> </init-param> <init-param> <param-name>unit:WidgetPU</param-name> <param-value>persistence/widget</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>myrest</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>


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.


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í! :)


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 compilar e implementar su proyecto.


necesitas agregar jersey-bundle-1.17.1.jar a lib 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>


prueba esto :

org.glassfish.jersey.servlet.ServletContainer

en servlet-class