java - servletcontainer - org glassfish jersey containers jersey container servlet
org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException (8)
Debajo del código funciona para mí en el archivo web.xml
<servlet>
<servlet-name>WebService</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.example.demo.webservice</param-value>
//Package
</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>WebService</servlet-name>
<url-pattern>/webservices/*</url-pattern>
</servlet-mapping>
He estado obteniendo una ClassNotFoundException con org.glassfish.jersey.servlet.ServletContainer
pero curiosamente comenzó anoche cuando traté de iniciar / reiniciar mi servidor Tomcat (v7) con Eclipse Juno.
No estoy seguro de lo que está pasando. Lo extraño es que recién comenzó anoche mientras funcionaba perfectamente bien antes de eso.
Aquí está la stacktrace:
Feb 25, 2014 11:11:19 AM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet com.att.ucomm.admin.UCommAdminFunctions as unavailable
Feb 25, 2014 11:11:19 AM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /UCommAdminFunctions threw load() exception
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1671)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118 )
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:996)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4762)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5045)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3670)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:424)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1207)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1393)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1403)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1403)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1382)
at java.lang.Thread.run(Unknown Source)
Feb 25, 2014 11:11:19 AM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/UCommAdminFunctions] is completed
Feb 25, 2014 11:13:33 AM org.apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet com.att.ucomm.admin.UCommAdminFunctions is currently unavailable
Aquí está mi web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<servlet>
<servlet-name>com.att.ucomm.admin.UCommAdminFunctions</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Register JAX-RS Application, if needed. -->
<init-param>
<param-name>com.att.ucomm.admin.UCommAdminFunctions</param-name>
<param-value>my.package.MyApplication</param-value>
</init-param>
<!-- Register resources and providers under my.package. -->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.att.ucomm.admin</param-value>
</init-param>
<!-- Register my custom provider (not needed if it''s in my.package) AND LoggingFilter. -->
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>com.att.ucomm.admin.SecurityRequestFilter;org.glassfish.jersey.filter.LoggingFilter</param-value>
</init-param>
<!-- Enable Tracing support. -->
<init-param>
<param-name>jersey.config.server.tracing</param-name>
<param-value>ALL</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>com.att.ucomm.admin.UCommAdminFunctions</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
Me aseguré de que los archivos jar para jersey todavía estuvieran allí en WEB-INF / lib:
El jersey-container-servlet
realmente usa la dependencia jersey-container-servlet-core
. Pero si usas maven, eso realmente no importa. Si solo define el uso del jersey-container-servlet
, también descargará automáticamente la dependencia.
Pero para aquellos que agregan archivos jar a su proyecto manualmente (es decir, sin maven) es importante saber que realmente necesita ambos archivos jar . La clase org.glassfish.jersey.servlet.ServletContainer
es en realidad parte de la dependencia principal.
El problema:
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
indica que intenta utilizar el servlet Jersey 2.x , pero está suministrando las libs de Jersey 1.x.
Para Jersey 1.x tienes que hacerlo así:
<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>sample.hello.resources</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>
Para obtener más información, consulte la documentación de Jersey 1.x.
Si en su lugar desea utilizar Jersey 2.x , deberá proporcionar las libs de Jersey 2.x. En un proyecto basado en maven puede usar lo siguiente:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.xx</version>
</dependency>
<!-- if you are using Jersey client specific features without the server side -->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.xx</version>
</dependency>
Para Jersey 2.x no necesita configurar nada en su web.xml
, es suficiente proporcionar una clase similar a esta:
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("rest")
public class ApplicationConfig extends Application {
}
Para obtener más información, consulte la documentación de Jersey .
Ver también:
Es un problema de configuración de eclipse, no un problema de Jersey.
De este hilo ClassNotFoundException: org.glassfish.jersey.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.
Estoy de acuerdo con la respuesta aceptada. Pero para mí, el problema no era eso, sino que tuve que modificar mi nombre de Servlet-Class de:
<servlet-class>org.glassfish.jersey.servlet.ServletContainer.class</servlet-class>
A:
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
Entonces, eliminar .class funcionó bien en mi caso. Espero que ayude a alguien!
Si está utilizando Jersey 2.x use la siguiente dependencia:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.XX</version>
</dependency>
Donde XX
podría ser cualquier versión particular que busque. Contenedores de jersey .
Supongamos que usa Jersey 2.25.1, esto funcionó para mí: estoy usando el contenedor web Apache Tomcat:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.25.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.25.1</version>
</dependency>
NB: reemplace la versión con la versión que está utilizando
Tuve el mismo problema con eclipse, la solución de WA fue copiar las bibliotecas a WEB-INF / lib