java.lang.NoClassDefFoundError:启动时的org / glassfish / jersey / internal / inject / Binder Tomcat服务器 [英] java.lang.NoClassDefFoundError: org/glassfish/jersey/internal/inject/Binder when started Tomcat Server

查看:808
本文介绍了java.lang.NoClassDefFoundError:启动时的org / glassfish / jersey / internal / inject / Binder Tomcat服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Jersey和Maven构建了Java中的REST API。我用Tomcat 9作为我的服务器。一切正常,直到我今天尝试安装 RestAssured, Hamcrest JUnit 。突然间,我的所有端点都抛出了500个内部服务器错误。 500错误的根本原因是 java.lang.NoClassDefFoundError:org / glassfish / jersey / internal / inject / Binder。



我做了2个小时:


  • 我试图找到这个类: org / glassfish / jersey / internal / inject / Binder 在谷歌上,但没有用。

  • 我试图卸载 RestAssured Hamcrest JUnit ,但没有任何帮助。



这个问题让我很沮丧。任何想法为什么这个错误发生?提前感谢!



以下是服务器日志摘录: SEVERE:为servlet Jersey Web Application分配异常java.lang.ClassNotFoundException:org.glassfish.jersey.internal.inject.Binder

org.apache.catalina.loader中。在
org.apache.catalina.loader.WebappClassLoaderBase.loadClass WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1275)
(WebappClassLoaderBase.java:1109)
。在org.glassfish.jersey.servlet。 ServletContainer.init(ServletContainer.java:178)
在org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370)
在javax.servlet.GenericServlet.init(GenericServlet.java:在org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183 158)

。在org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099)
在org.apache.catalina.core.StandardWrapper.all ocate(StandardWrapper.java:779)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve。的java:96)$在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475 b $ b)
。在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)

在org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
at org.apache .coyote.http11.Http11Processor.service(Http11Processor.java:498)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at or g.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:796)
at org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1368)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)$ b $在java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)
在java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source )


以下是我的 pom.xml 文件:(用RestAssured,Hamcrest ,和JUnit)

 <依赖项> 
< dependency>
< groupId> org.glassfish.jersey.containers< / groupId>
< artifactId> jersey-container-servlet-core< / artifactId>
<! - 如果您不需要servlet 2.x兼容性,请使用以下artifactId - >
<! - artifactId> jersey-container-servlet< / artifactId - >
< /依赖关系>
< dependency>
< groupId> org.glassfish.jersey.media< / groupId>
< artifactId> jersey-media-moxy< / artifactId>
< /依赖关系>
< dependency>
< groupId> com.google.code.gson< / groupId>
< artifactId> gson< / artifactId>
< version> 2.8.0< / version>
< /依赖关系>
< dependency>
< groupId> mysql< / groupId>
< artifactId> mysql-connector-java< / artifactId>
< version> 5.1.6< / version>
< /依赖关系>
< dependency>
< groupId> junit< / groupId>
< artifactId> junit< / artifactId>
< version> 4.12< / version>
< scope> test< / scope>
< /依赖关系>
< dependency>
< groupId> org.hamcrest< / groupId>
< artifactId> hamcrest-all< / artifactId>
< version> 1.3< / version>
< scope> test< / scope>
< /依赖关系>
< dependency>
< groupId> com.jayway.restassured< / groupId>
< artifactId>其余放心< / artifactId>
< version> 2.9.0< / version>
< scope> test< / scope>
< /依赖关系>
< /依赖关系>

以下是我的web.xml文件:

 < web-app version =2.5xmlns =http://java.sun.com/xml/ns/javaeexmlns:xsi =http:// www .w3.org / 2001 / XMLSchema-instancexsi:schemaLocation =http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5的.xsd> 
< servlet>
< servlet-name> Jersey Web Application< / 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.accelbyte.vincent.emailist.resources< / param-value>
< / init-param>
1< / load-on-startup>
< / servlet>
< servlet-mapping>
< servlet-name> Jersey Web Application< / servlet-name>
< url-pattern> / webapi / *< / url-pattern>
< / servlet-mapping>



以下是我的项目结构:

电子邮件清单项目结构 核心Jersey和导入该Binder类的Jersey扩展库之一之间存在版本不匹配的情况。 确保泽西岛相关的所有模块都有明确的版本(并且它们相互匹配)。或者更好,通过导入球衣来修复你的版本。例如:

 < dependencyManagement> 
<依赖关系>
< dependency>
< groupId> org.glassfish.jersey< / groupId>
< artifactId> jersey-bom< / artifactId>
< version> 2.26-b03< / version>
< type> pom< / type>
< scope> import< / scope>
< /依赖关系>
< /依赖关系>
< / dependencyManagement>

之后,您的主要< debendencies> 部分可能会省略版本。


I am building REST API in Java with Jersey and Maven. I used Tomcat 9 as my server. Everything works fine until I tried to install RestAssured, Hamcrest, and JUnit today. Suddenly all of my endpoints threw out 500 Internal server errors. The root cause of the 500 error is java.lang.NoClassDefFoundError: org/glassfish/jersey/internal/inject/Binder.

What I have done this 2 hours:

  • I have tried to find this class: org/glassfish/jersey/internal/inject/Binder on google, but no avail.
  • I have tried to uninstall RestAssured, Hamcrest, and JUnit but it didn't help.

This problem makes me frustrated. Any idea why this errors happened? Thanks in advance!

Here is the excerpt of the server log:

SEVERE: Allocate exception for servlet Jersey Web Application java.lang.ClassNotFoundException: org.glassfish.jersey.internal.inject.Binder at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1275) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1109) at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178) at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370) at javax.servlet.GenericServlet.init(GenericServlet.java:158) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:779) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1368) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)

Below is my pom.xml file: (with RestAssured, Hamcrest, and JUnit)

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
        <!-- artifactId>jersey-container-servlet</artifactId -->
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-all</artifactId>
        <version>1.3</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.jayway.restassured</groupId>
        <artifactId>rest-assured</artifactId>
        <version>2.9.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Below is my web.xml file:

<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>Jersey Web Application</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.accelbyte.vincent.emailist.resources</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/webapi/*</url-pattern>
</servlet-mapping>

Below is my project structure:

Email list project structure

解决方案

Very likely there is a version mismatch between core Jersey and one of the Jersey extension libraries that imports that Binder class. Make sure all Jersey-related modules have explicit versions (and they match each other). Or even better, fix your versions by importing the jersey-bom. E.g.:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>2.26-b03</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

After which your main <debendencies> section may omit the versions.

这篇关于java.lang.NoClassDefFoundError:启动时的org / glassfish / jersey / internal / inject / Binder Tomcat服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆