tutorial servletcontainer servlet org containerexception container java tomcat jersey glassfish classnotfoundexception

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