web services - jax - ClassNotFoundException al iniciar tomcat
tomcat web services (12)
Estoy tratando de hacer un servicio web REST.
Mi proyecto se ve así:
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 ?
Al parecer, se requiere la falta de bibliotecas de su classpath de implementación.
Copie los siguientes archivos jar 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
Anjaneya Reddy, como has señalado, la clase ni siquiera está en el JAR en el que se supone que debe estar. Lo que me desconcierta, ¿dónde está y en qué parte de la documentación toca esto?
Ahora que todo es tan amigable con Maven, es difícil sacar un simple tutorial sin tener que depender de él.
Debe colocar Jersey JAR en su directorio WEB-INF / lib , ya sea que esté ejecutando Tomcat por separado o ejecutando con Eclipse.
Esto funcionó para mí.
El cargador de clases no puede encontrar la clase com.sun.jersey.spi.container.servlet.ServletContainer
.
Debe colocar Jersey JAR en su directorio WEB-INF/lib
.
Esto podría ayudar:
http://www.suryasuravarapu.com/2009/02/rest-jersey-configuration-on-tomcat.html
Ahora he visto la imagen que publicaste y veo tu problema: estás usando Eclipse y Maven, pero realmente no entiendes lo que están haciendo.
Debe terminar con un archivo WAR en el directorio Tomcat /webapps
que tiene todos los JAR de terceros que necesita en el directorio WEB-INF/lib
. Si no lo haces, Tomcat no los encontrará.
Recomiendo simplificar tu problema. Crea un archivo WAR a mano; deja a Eclipse y Maven fuera de esto. Una vez que lo haya hecho funcionar, agregue las cosas que se supone le harán la vida más fácil. Comprenderá lo que deben hacer, porque ya lo habrá hecho funcionar sin ellos.
En Jersey 2.0 , la implementación del contenedor de servlets cambió. Debe utilizar org.glassfish.jersey.servlet.ServletContainer en lugar del antiguo com.sun.jersey.spi.container.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>
Puede 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
He encontrado 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 sugiere en otros foros.
Puede verificar esto fácilmente en Eclipse, cuando lo agrega a la ruta de compilación y observa que no tiene esa clase en los archivos jar mencionados anteriormente.
Busqué 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.jar").
No encontré ninguna documentación sobre esto. Sin embargo, tener este archivo en mi WEB-INF / lib resolvió este problema.
Espero que esto ayude.
La publicación anterior 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 despliegue -> Haga clic en Agregar -> Entradas de ruta de compilación Java -> Dependencias de Maven seleccionadas. Luego hice clic en Aceptar.
Cuando probé esto por primera vez, noté que ya no recibía el error "java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer", pero noté que estaba obteniendo otra clase que no se encontraba ''mensajes (lamentablemente, no documenté qué mensajes eran). Estaba usando la siguiente dependencia jersey:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.17.1</version>
</dependency>
Lo saqué y puse en 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!
La siguiente dependencia ayuda:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>
Lo agregué al directorio WEB-INF/lib
pero no funcionó hasta que actualicé la carpeta lib de Eclipse y luego comenzó a funcionar.
de: http://jersey.java.net/nonav/documentation/latest/chapter_deps.html#d4e1687
La implementación de una aplicación en un contenedor de servlets requiere una dependencia de implementación con ese contenedor.
Consulte la documentación de Java aquí sobre cómo configurar el contenedor de servlets.
El uso de servlet: com.sun.jersey.spi.container.servlet.ServletContainer requiere una dependencia del módulo jersey-servlet.
Los desarrolladores de Maven que usan servlet: com.sun.jersey.server.impl.container.servlet.ServletAdaptor en un servlet no EE 5 requieren además una dependencia del módulo persistence-api.
Los desarrolladores que no son Maven requieren: persistence-api.jar
Si está trabajando con Maven , el posible problema podría ser que sus contenedores no se desplieguen en su 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 Eclipse, las Dependencias de Maven no se implementan en TOmcat. Para resolver esto, debe hacer lo siguiente: hacer clic con el botón derecho en> Propiedades y seleccionar "Ensamblaje de implementación". Y añada entradas de compilación Java Build. De esta forma le dices al plugin de WTP (el que ejecuta Tomcat dentro de Eclipse) que también debe copiar los frascos de Maven
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.sun.jersey.spi.container.servlet.ServletContainer
ps: Recuerde verificar si las bibliotecas se envían al despliegue de tomcat.
Verificar:
Haga clic derecho en su proyecto -> Propiedades -> Ensamblador de implementación y asegúrese de que la pestaña Fuente contiene Dependencias Maven .
De otra manera:
Haga clic en el botón Agregar -> Ruta de compilación de Java -> Dependencias de Maven -> Finalizar.
Listo siempre que ejecute la aplicación, todas las libs se importarán en la implementación.
ps: Donde se actualiza el proyecto Maven, debes rehacer estos pasos.