ClassNotFoundException al iniciar tomcat


Estoy tratando de hacer un servicio web REST.

Mi proyecto se ve así:

introduzca la descripción de la imagen aquí

El rastreo es:

8 déc. 2011 18:31:36 org.apache.catalina.core.AprLifecycleListener init
INFO: The Apache Tomcat Native library which allows optimal performance in production     environments was not found on the java.library.path: C:\Program Files\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin;C:\Program Files\MyEclipse\Common\plugins\com.genuitec.eclipse.easie.tomcat.myeclipse_9.0.0.me201109141806\tomcat\bin
8 déc. 2011 18:31:36 org.apache.coyote.http11.Http11Protocol init
INFO: Initialisation de Coyote HTTP/1.1 sur http-8080
8 déc. 2011 18:31:36 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 394 ms
8 déc. 2011 18:31:37 org.apache.catalina.core.StandardService start
INFO: Démarrage du service Catalina
8 déc. 2011 18:31:37 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.13
8 déc. 2011 18:31:37 org.apache.catalina.startup.HostConfig deployWAR
INFO: Déploiement de l'archive Test-0.0.1-SNAPSHOT.war de l'application web
8 déc. 2011 18:31:37 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\Documents and Settings\Naya\Workspaces\MyEclipse 10\.metadata\.me_tcat\webapps\Test-0.0.1-SNAPSHOT\WEB-INF\lib\javax.servlet-3.0.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
8 déc. 2011 18:31:37 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\Documents and Settings\Naya\Workspaces\MyEclipse 10\.metadata\.me_tcat\webapps\Test-0.0.1-SNAPSHOT\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
8 déc. 2011 18:31:38 org.apache.catalina.core.ApplicationContext log
INFO: La servlet Test JAX-RS REST Servlet est marqué comme indisponible
8 déc. 2011 18:31:38 org.apache.catalina.core.ApplicationContext log
GRAVE: Error loading WebappClassLoader
delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@19e8329
 com.sun.jersey.spi.container.servlet.ServletContainer
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1083)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4042)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4348)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:825)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:714)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

Mi web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name> 
  <servlet>
    <display-name>Test JAX-RS REST Servlet</display-name>
    <servlet-name>Test JAX-RS REST Servlet</servlet-name>
    <servlet-class>
        com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Test JAX-RS REST Servlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

¿Alguien puede ayudarme ?

Author: ROMANIA_engineer, 2011-12-09

12 answers

Me he encontrado con el mismo problema. Estaba usando la versión 1.12.

No pude encontrar la clase com.sun.jersey.spi.container.servlet.ServletContainer en "jersey-server-1.12.jar "o" jersey-core-1.12.jar " como se sugirió en algunos otros foros.

Puede comprobar esto fácilmente en Eclipse, cuando lo agregue a la ruta de compilación y observe que no tiene esa clase en los archivos jar mencionados anteriormente.

Busqué alrededor y encontré lo siguiente:

Parece que la clase com.sun.jersey.spi.container.servlet.ServletContainer está en un archivo jar diferente ("jersey-servlet-1.12.frasco").

No encontré ninguna documentación sobre esto. Sin embargo, tener este archivo en mi WEB-INF/lib resolvió este problema.

Espero que esto ayude.

 32
Author: Anjaneya Reddy,
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-03-20 14:00:49

Solución:

Solo agregue la dependencia en pom.xml:

 <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-servlet</artifactId>
      <version>1.13</version>
 </dependency>

Ahora su aplicación tendrá la clase com.sol.Jersey.spi.contenedor.servlet.ServletContainer

Pd: Recuerde comprobar si las bibliotecas se están enviando a la implementación de tomcat.

Para comprobar:

Haga clic con el botón derecho en su proyecto -> Propiedades - > Ensamblador de implementación y asegúrese de que la pestaña Source contiene Maven Dependecies .

De lo contrario:

Haga clic en el botón Add -> Java Build Path -> Maven Dependecies -> Finish.

Listo cada vez que ejecute la aplicación, todas las libs se importarán en el deploy.

Pd: Donde se actualiza el proyecto Maven, debe rehacer estos pasos.

 35
Author: Diego,
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-04-20 21:28:01

Si estás trabajando con Maven, entonces el posible problema podría ser que tus jars no se implementen en tu Tomcat. Por lo tanto, tiene sus dependencias Maven en la ruta de compilación de Java (Proyecto > Propiedades > Ruta de compilación), pero cuando ejecuta el proyecto en su Tomcat desde las dependencias Maven de Eclipse no se implementa en TOmcat. Para resolver esto tiene que: haga clic derecho > propiedades y seleccione "Conjunto de implementación". Y agregue Entradas de Ruta de Compilación de Java. De esta manera le estás diciendo al plugin WTP (el uno ejecutando Tomcat dentro de Eclipse) que también debería copiar los frascos de Maven introduzca la descripción de la imagen aquí

 18
Author: luigi7up,
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
2012-12-10 16:21:03

En Jersey 2.0, la implementación del contenedor servlet cambió. Necesitas usar org.glassfish.Jersey.servlet.ServletContainer en lugar de la antigua com.sol.Jersey.spi.contenedor.servlet.ServletContainer

La clase está en

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.0-m11</version>
    </dependency>

Puedes crear un proyecto esquelético usando:

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeGroupId=org.glassfish.jersey.archetypes -
DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example -DarchetypeVersion=2.0-m11
 9
Author: JasonPlutext,
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-01-11 07:48:35

Debe poner el JAR Jersey en su directorio WEB-INF/lib, ya sea que esté ejecutando Tomcat por separado o con Eclipse.

Esto funcionó para mí.

 3
Author: Anupam,
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
2012-04-25 05:21:34

El cargador de clases no puede encontrar la clase com.sun.jersey.spi.container.servlet.ServletContainer.

Necesitas poner el JAR Jersey en tu directorio WEB-INF/lib.

Esto podría ayudar:

Http://www.suryasuravarapu.com/2009/02/rest-jersey-configuration-on-tomcat.html

Ahora he mirado la imagen que publicaste y veo tu problema: Estás usando Eclipse y Maven, pero realmente no entiendes lo que están haciendo.

Tienes que terminar con un archivo WAR en el directorio Tomcat /webapps que tiene todo los tarros de terceros que necesita en el directorio WEB-INF/lib. Si no lo haces, Tomcat no los encontrará.

Yo recomendaría simplificar su problema. Crea un archivo WAR a mano; deja a Eclipse y Maven fuera de él. Una vez que lo tengas funcionando, agrega las cosas que se supone que deben hacer tu vida más fácil. Entenderás lo que necesitan hacer, porque ya habrás hecho que funcione sin ellos.

 1
Author: duffymo,
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
2011-12-09 10:29:32

El post de Luigi7up funcionó para mí. Estoy usando tomcat 7.0.37, maven 3.1.1 y jersey 1.17.1. Hice el clic derecho - > propiedades - > Ensamblaje de implementación -> Clic en Agregar -> Entradas de ruta de compilación de Java - > Dependencias Maven seleccionadas. Luego hice clic en aceptar.

Cuando probé esto por primera vez, me di cuenta de que ya no recibí el "java.lang.ClassNotFoundException: com.sol.Jersey.spi.contenedor.servlet.Error "ServletContainer", pero luego me di cuenta de que estaba recibiendo otros mensajes de' clase no encontrada' (desafortunadamente, no documenté qué mensajes eran). Estaba usando la siguiente dependencia de jersey:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.17.1</version>
</dependency>

Saqué eso y puse las siguientes dependencias:

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

Las cosas comenzaron a funcionar después de eso.

Espero que esto ayude a alguien!

 1
Author: Stephen Spalding,
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-01-20 01:00:26

Anjaneya Reddy, como has señalado, la clase ni siquiera está en el FRASCO en el que se supone que debe estar. ¿Qué me desconcierta, dónde está y en qué parte de la documentación toca esto?!?

Con todo siendo tan amigable Maven ahora, es difícil hacer un tutorial simple sin necesidad de depender de él.

 0
Author: Half_Duplex,
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
2012-09-25 19:05:43

Lo agregué al directorio WEB-INF/lib pero no funcionó hasta que actualizé la carpeta lib de Eclipse y luego comenzó a funcionar.

 0
Author: Milind,
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
2012-10-29 18:29:16

Aparentemente se le requieren bibliotecas faltantes de su ruta de clase de implementación.

Copie los siguientes jars en el directorio WEB-INF/lib

asm-3.1.jar
jackson-core-asl-1.9.2.jar
jackson-jaxrs-1.9.2.jar
jackson-mapper-asl-1.9.2.jar
jackson-xc-1.9.2.jar
jersey-client-1.15.jar
jersey-core-1.15.jar
jersey-json-1.15.jar
jersey-server-1.15.jar
jersey-servlet-1.15.jar
jettison-1.1.jar
jsr311-api-1.1.1.jar
 0
Author: bavan,
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
2012-11-28 21:33:14

De: http://jersey.java.net/nonav/documentation/latest/chapter_deps.html#d4e1687

La implementación de una aplicación en un contenedor servlet requiere una dependencia de implementación con ese contenedor.

Vea la documentación de Java aquí sobre cómo configurar el contenedor servlet.

Usando servlet: com.sol.Jersey.spi.contenedor.servlet.ServletContainer requiere una dependencia del módulo jersey-servlet.

Desarrolladores Maven usando servlet: com.sol.Jersey.servidor.impl.contenedor.servlet.ServletAdaptor en un servlet que no sea EE 5 requiere además una dependencia del módulo persistence-api.

Los desarrolladores no maven requieren: persistence-api.jar

 0
Author: Leonid,
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-01-29 10:05:33

La siguiente dependencia ayuda:

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

Véase: http://www.mkyong.com/webservices/jax-rs/classnotfoundexception-com-sun-jersey-spi-container-servlet-servletcontainer/

 0
Author: Benny Neugebauer,
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-06-14 23:30:09