Java.lang.ClassNotFoundException: com.sol.Jersey.spi.contenedor.servlet.ServletContainer


Estoy tratando de construir una simple aplicación hello world durante dos días usando Jersey + Google app engine. Para el proyecto simple 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.sol.Jersey.spi.contenedor.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 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 la gente que está usando Maven lo han resuelto de alguna manera, pero no estoy usando Maven ni tampoco lo hizo el tipo que escribió ese tutorial.

Solo para comprobar si incluso com.sun.jersey.spi.container.servlet.ServletContainer existe en imported Jersey jars Traté de escribir este nombre completo en Java y dejar que los nombres de acabado intellisense, pero no pude obtener ningún intellisense después de com.sun.jepor lo que mi última suposición es que ha habido algún reordenamiento de paquetes en la última compilación de Jersey y jersey ya no está dentro de com.sun. Soy agotado y agradecería cualquier tipo de ayuda.

Author: M-WaJeEh, 2013-08-06

17 answers

Has descargado Jersey 2 (que RI de JAX-RS 2). El tutorial al que te refieres usa Jersey 1. Descargar 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 de ahí la excepción.

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

Editar

Registro de Recursos y Proveedores en Jersey 2 contiene información adicional sobre cómo registrarse clases / instancias en Jersey 2.

 141
Author: Michal Gajdos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-03 10:02:17

Si está usando jersey 2.x entonces necesita una configuración diferente en la web.xml como clase servlet es un cambio en él. 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>
 28
Author: p27,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-05 10:54:39

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>
 22
Author: user1249655,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-31 18:48:20

Es un problema de configuración de eclipse, no un problema de Jersey.

De este hilo ClassNotFoundException: com.sol.Jersey.spi.contenedor.servlet.ServletContainer

Haga clic con el botón derecho en las propiedades de su proyecto eclipse -> Conjunto de implementación -> Agregar -> Entradas de ruta de compilación de Java -> Dependencias de Gradle -> Finalizar.

Así que Eclipse no estaba usando las dependencias de Gradle cuando se iniciaba Apache .

 8
Author: Adi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-04 18:58:45

Prueba esto:

Org.glassfish.Jersey.servlet.ServletContainer

En la clase servlet

 3
Author: Pichitron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-23 19:20:28

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 utilizado, no debería tener ningún problema con la compatibilidad entre versiones (1.x contra 2.x) porque siguiendo la guía utilizas el maillot 1.8.x on pom.xml and in the web.xml you refer to a class (com.sun.jersey.spi.container.servlet.ServletContainer) as said before of 1.versión x. Así que como puedo inferir esto debe ser trabajo.

Mi conjetura es porque estoy usando JDK 1.7 esta clase ya no existe.


Después, traté de resolver con las respuestas antes de la mía, no ayudó, he hecho cambios en el pom.xml y en el web.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 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 jersey, le gusta esto:

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

¡Y funcionó para mí! :)

 2
Author: Paulo Oliveira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-27 09:41:57

También me enfrenté a un problema similar. Resuelto el problema pasando por el paso paso tutorial desde el siguiente enlace.

Http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-hello-world-example/

  • Lo principal a tener en cuenta 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. Else, se encontrará con problemas con ClassNotFound Exception.

Apache-tomcat-7.0.56-windows-x64\apache -tomcat-7.0.56\webapps \ JerseyJSONExample \ WEB-INF \ lib

"11/23/2014 12:06 AM 130,458 jersey-cliente-1.9.jar

23/11/2014 12:06 AM 458,739 jersey-core-1.9.jar

23/11/2014 12:06 AM 147,952 jersey-json-1.9.jar

23/11/2014 12:06 AM 713,089 jersey-server-1.9.frasco" 4 Expediente(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 ahorraron mucho tiempo.

 2
Author: yogishaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-22 19:49:16

Obtenemos este error debido al problema de la ruta de compilación. Debe agregar las bibliotecas" Server Runtime " en la ruta de compilación.

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

Siga los pasos a continuación para resolver la excepción de clase no encontrada.

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

 1
Author: Sachin G N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-08 00:18:18

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

 0
Author: rickygrimes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-06 21:46:33

Necesitas agregar jersey-bundle-1.17.1.jar a la 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>

 0
Author: AhmadReza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-23 07:50:40

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>

Esta es Jersey 2.x usa org.glassfish.paquetes jersey en lugar de com.sol.jersey (que es utilizado por Jersey 1.x) y de ahí la excepción. Tenga en cuenta que también init-param a partir de com.sol.jersey no será reconocido por Jersey 2.x una vez que migres a JAX-RS 2.0 y Jersey 2.x

Si en algún momento usas maven, tu pom.xml sería esto:

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

Sustitúyase 2.X para su versión del deseo, e. g. 2.15

 0
Author: Juan David Grisales Garzon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-21 22:31:07

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

 0
Author: shine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-15 12:06:00

Volviendo al problema original - java.lang.ClassNotFoundException: com.sol.Jersey.spi.contenedor.servlet.ServletContainer

Como bien se dijo anteriormente, en JAX 2.versión x, la clase ServletContainer se ha movido al paquete-org.glassfish.Jersey.servlet.ServletContainer. El tarro relacionado es jersey-container-servlet-core.jar que viene incluido en el jaxrs-ri-2.2.1.zip

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

Esto es necesario si está utilizando eclipse para compilar e implementar su proyecto.

 0
Author: Andy1625,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-17 19:14:24

En pom.archivo xml que necesitamos agregar

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.8</version>
</dependency>
 0
Author: KARTHIKEYAN.A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-31 12:05:17

El mismo error y desperdició más de 2 horas depurando y probando todas las opciones. No estaba usando el Maven / POM, así que no podía aprovechar esa solución dada por pocos.

Finalmente se resolvió lo siguiente: Añadiendo los jars directamente a la carpeta tomcat/lib (NO WEB-INF\lib) y reiniciando el tomcat.

 0
Author: Velu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-13 00:24:45

Si alguien está tratando de construir una aplicación hello world 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á usando maven, solo le tomará unos minutos ver el resultado.

He utilizado a continuación.

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.26
 0
Author: Chathuranga Jayamal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-19 02:26:04

Básicamente depende de la versión jersey que esté utilizando. Si está usando Jersey ver.1.X. X necesita agregar

Jersey 1 utiliza " com.sol.jersey ", y Jersey 2 utiliza org.glassfish. en la etiqueta de clase servlet. También, tenga en cuenta que también init-param a partir de com.sol.jersey no será reconocido por Jersey 2.

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

 0
Author: Arun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-05 07:56:02