简体   繁体   English

org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

[英]org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

I have been getting a ClassNotFoundException with org.glassfish.jersey.servlet.ServletContainer but it peculiarly started last night when I tried to start/re-start my Tomcat server (v7) with Eclipse Juno.我一直在使用org.glassfish.jersey.servlet.ServletContainer获取 ClassNotFoundException,但昨晚当我尝试使用 Eclipse Juno 启动/重新启动我的 Tomcat 服务器 (v7) 时,它异常启动。

Not sure what is going on.不确定发生了什么。 What's bizarre is that it just started happening last night while it was working perfectly well before that.奇怪的是,它昨晚才开始发生,而在此之前它运行良好。

Here is the 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

Here is my web.xml这是我的 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>

I made sure that the jar files for jersey were still there in WEB-INF/lib:我确保 jersey 的 jar 文件仍然存在于 WEB-INF/lib 中:

带球衣罐的 WEB-INF/lib

The problem: 问题:

java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

indicates that you try to use the Jersey 2.x servlet, but you are supplying the Jersey 1.x libs. 表示您尝试使用Jersey 2.x servlet,但是您正在提供Jersey 1.x库。

For Jersey 1.x you have to do it like this: 对于Jersey 1.x你必须这样做:

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

For more information check the Jersey 1.x documentation . 有关更多信息,请查看Jersey 1.x文档

If you instead want to use Jersey 2.x then you'll have to supply the Jersey 2.x libs. 如果您想要使用Jersey 2.x,那么您将必须提供Jersey 2.x库。 In a maven based project you can use the following: 在基于maven的项目中,您可以使用以下内容:

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

For Jersey 2.x you don't need to setup anything in your web.xml , it is sufficient to supply a class similar to this: 对于Jersey 2.x,您不需要在web.xml设置任何内容,只需提供类似于此的类即可:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("rest")
public class ApplicationConfig extends Application {

}

For more information, check the Jersey documentation . 有关更多信息,请查看Jersey文档

See also: 也可以看看:

It's an eclipse setup issue, not a Jersey issue. 这是一个日食设置问题,而不是泽西岛问题。

From this thread ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer 从这个线程ClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer

Right click your eclipse project Properties -> Deployment Assembly -> Add -> Java Build Path Entries -> Gradle Dependencies -> Finish. 右键单击您的eclipse项目Properties - > Deployment Assembly - > Add - > Java Build Path Entries - > Gradle Dependencies - > Finish。

So Eclipse wasn't using the Gradle dependencies when Apache was starting . 所以Eclipse在Apache启动时没有使用Gradle依赖项。

If you are using Jersey 2.x use following dependency: 如果您使用的是Jersey 2.x,请使用以下依赖项:

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

Where XX could be any particular version you look for. XX可以是您寻找的任何特定版本。 Jersey Containers . 泽西容器

Below code work for me in web.xml file 下面的代码在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>

I agree with the accepted answer. 我同意接受的答案。 But for me, the issue was not that, instead I had to modify my Servlet-Class name from:- 但对我来说,问题不在于,而是我必须修改我的Servlet-Class名称: -

<servlet-class>org.glassfish.jersey.servlet.ServletContainer.class</servlet-class> 

To: 至:

<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

So, removing .class worked fine in my case. 因此,删除.class在我的情况下工作正常。 Hope it will help somebody! 希望它会帮助别人!

The jersey-container-servlet actually uses the jersey-container-servlet-core dependency. jersey-container-servlet实际上使用了jersey-container-servlet-core依赖。 But if you use maven, that does not really matter. 但是如果你使用maven,这并不重要。 If you just define the jersey-container-servlet usage, it will automatically download the dependency as well. 如果您只是定义了jersey-container-servlet用法,它也会自动下载依赖项。

But for those who add jar files to their project manually (ie without maven) It is important to know that you actually need both jar files . 但对于那些手动将jar文件添加到项目中的人(即没有maven)重要的是要知道你实际上需要两个jar文件 The org.glassfish.jersey.servlet.ServletContainer class is actually part of the core dependency. org.glassfish.jersey.servlet.ServletContainer类实际上是核心依赖项的一部分。

如果您不使用maven,请尝试将您的罐子放到WEB-INF / lib中,它对我有用。

Suppose you are usin Jersey 2.25.1, this worked for me - I am using Apache Tomcat web container: 假设您使用的是Jersey 2.25.1,这对我有用 - 我正在使用Apache Tomcat Web容器:

    <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: Replace version with the version you are using 注意:用您正在使用的版本替换版本

我遇到了与eclipse相同的问题,WA解决方案是将libs复制到WEB-INF / lib

For me it seems like the issue was Eclipse not recognizing the Maven dependencies of my project.对我来说,问题似乎是 Eclipse 无法识别我项目的 Maven 依赖项。

What I did:我做了什么:

Right click on project > Configure > Convert to Maven Project右键单击项目 > 配置 > 转换为 Maven 项目

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer - ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer 球衣-ClassNotFoundException org.glassfish.jersey.servlet.ServletContainer - jersey - ClassNotFoundException org.glassfish.jersey.servlet.ServletContainer Tomcat 7 ClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer - Tomcat 7 ClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer java.lang.ClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer - java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer 服务器启动时org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException - org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException on server startup 泽西岛-java.lang.ClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer - Jersey - java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer Tomcat Jersey Eclipse ClassNotFound org.glassfish.jersey.servlet.ServletContainer - Tomcat Jersey Eclipse ClassNotFound org.glassfish.jersey.servlet.ServletContainer 找不到类:org.glassfish.jersey.servlet.ServletContainer - Class Not found: org.glassfish.jersey.servlet.ServletContainer 如何解决“weblogic.application.ModuleException: java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer”错误 - how to solve "weblogic.application.ModuleException: java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer" error java.lang.ClassCastException:org.glassfish.jersey.servlet.ServletContainer无法转换为javax.servlet.Servlet - java.lang.ClassCastException: org.glassfish.jersey.servlet.ServletContainer cannot be cast to javax.servlet.Servlet
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM