java.lang.NoClassDefFoundError : com/sun/jersey/spi/container/servlet/WebConfig

标签 java jersey jax-rs

我将我的 Web 项目从 Jersey 1.x 升级到 2.5。现在我收到以下错误。不知道为什么它要寻找 WebConfig。

Jul 13, 2014 12:19:04 PM org.glassfish.jersey.server.ApplicationHandler initialize
INFO: Initiating Jersey application, version Jersey: 2.5.1 2014-01-02 13:43:00...
Jul 13, 2014 12:19:04 PM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: com/sun/jersey/spi/container/servlet/WebConfig
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getDeclaredMethods(Unknown Source)
    at org.glassfish.jersey.server.model.IntrospectionModeller$2.run(IntrospectionModeller.java:236)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.glassfish.jersey.server.model.IntrospectionModeller.getAllDeclaredMethods(IntrospectionModeller.java:230)
    at org.glassfish.jersey.server.model.IntrospectionModeller.checkForNonPublicMethodIssues(IntrospectionModeller.java:170)
    at org.glassfish.jersey.server.model.IntrospectionModeller.doCreateResourceBuilder(IntrospectionModeller.java:118)
    at org.glassfish.jersey.server.model.IntrospectionModeller.access$000(IntrospectionModeller.java:80)
    at org.glassfish.jersey.server.model.IntrospectionModeller$1.call(IntrospectionModeller.java:111)
    at org.glassfish.jersey.server.model.IntrospectionModeller$1.call(IntrospectionModeller.java:108)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255)
    at org.glassfish.jersey.server.model.IntrospectionModeller.createResourceBuilder(IntrospectionModeller.java:108)
    at org.glassfish.jersey.server.model.Resource.from(Resource.java:744)
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:379)
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:162)
    at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:304)
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289)
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:301)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:169)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:359)
    at javax.servlet.GenericServlet.init(GenericServlet.java:160)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:656)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1635)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.WebConfig
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    ... 45 more

最佳答案

您在某处引用 com.sun.jersey.spi.container.servlet.WebConfig 但该类在 Jersey 2.x 中不存在。如果您在项目中扩展了 com.sun.jersey.spi.container.servlet.WebConfig,请切换到 org.glassfish.jersey.servlet.WebConfig。

另请检查您的 web.xml 并验证 Jersey 的 Servlet 配置未引用任何 1.x 组件。对于 Tomcat 上的 2.x,它应该看起来像这样:

<servlet>
    <servlet-name>RestServlet</servlet-name>
    <!-- don't use the com.sun package! -->
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <!-- be sure this extends the org.glassfish WebConfig -->
        <param-value>com.yourproject.YourRestConfig</param-value>
    </init-param>
</servlet>

如果您使用 Maven 或其他依赖项管理工具,请分析您的依赖项并验证您的项目中是否构建有 Jersey 1.x 组件。

关于java.lang.NoClassDefFoundError : com/sun/jersey/spi/container/servlet/WebConfig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24727817/

相关文章:

java - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) FormParameter 为空

java - 在 JAX-RS 请求之间共享变量

jersey - java.lang.IllegalArgumentException jersey.repackaged.org.objectweb.asm.ClassReader.(ClassReader.java :170)

java - 将 Java pojo 转换为 json 字符串

Java Sound API - 捕获麦克风

java - 无法编译 Parquet 工具

java - 如何使用带有Jersey的JAX-RS处理CORS

java - 无法在 Spring Cloud Dataflow 上部署流

java - 如何在 Grizzly 2.3 中获取 X.509 客户端证书(使用客户端身份验证时)

java - ContainerRequestFilter 在 JAX-RS 服务方法中导致 NPE