web-dev-qa-db-ger.com

java.lang.NoClassDefFoundError: org/glassfish/jersey/internal/inject/Binder beim Start von Tomcat Server

Ich baue REST API in Java mit Jersey und Maven. Ich habe Tomcat 9 als Server verwendet. Alles funktioniert gut, bis ich versucht habe, RestAssured, Hamcrest, und JUnit heute zu installieren. Plötzlich haben alle meine Endpunkte 500 interne Serverfehler ausgegeben. Die Hauptursache für den Fehler 500 ist Java.lang.NoClassDefFoundError: org/glassfish/jersey/internal/inject/Binder.

Was ich diese 2 Stunden gemacht habe:

  • Ich habe versucht, diese Klasse zu finden: org/glassfish/jersey/internal/inject/Binder bei Google, aber ohne Erfolg.
  • Ich habe versucht, RestAssured , Hamcrest und JUnit zu deinstallieren, aber es hat nicht geholfen.

Dieses Problem macht mich frustriert. Irgendeine Idee, warum dieser Fehler passiert ist? Danke im Voraus!

Hier ist der Auszug aus dem Serverprotokoll:

SEVERE: Ausnahme für Servlet-Jersey-Webanwendung zuordnen Java.lang.ClassNotFoundException: org.glassfish.jersey.internal.inject.Binder at org.Apache.catalina.loader.WebappClassLoaderBase.loadClass (WebappClassLoaderBase.Java:1275 ) unter org.Apache.catalina.loader.WebappClassLoaderBase.loadClass (WebappClassLoaderBase.Java:1109) unter org.glassfish.jersey.servlet.ServletContainer.init (ServletContainer.Java:178) unter org.glassfish.jersey.servlet.Servlet. init (ServletContainer.Java:370) bei javax.servlet.GenericServlet.init (GenericServlet.Java:158) bei org.Apache.catalina.core.StandardWrapper.initServlet (StandardWrapper.Java:1183) bei org.Apache.catalina.core .StandardWrapper.loadServlet (StandardWrapper.Java:1099) bei org.Apache.catalina.core.StandardWrapper.allocate (StandardWrapper.Java:779) bei org.Apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.Java: org.Apache.catalina.core.StandardContextValve.invoke (StandardContextValve.Java:96) at org.Apache.catali na.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.Java:475) at org.Apache.catalina.core.StandardHostValve.invoke (StandardHostValve.Java:140) at org.Apache.catalina.valves.ErrorReportValve.valve.in 80) bei org.Apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.Java:624) bei org.Apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.Java:87) bei org.ApacheAdapter.catalina.catalina:87) .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) bei org.Apache.Tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.Java:1368) bei org.Apache.Tomcat.util.net.SocketProcessorBase Führen Sie (SocketProcessorBase.Java:49) unter Java.util.concurrent.ThreadPoolExecutor.runWorker (Unknown Source) unter Java.util.concurre aus nt.ThreadPoolExecutor $ Worker.run (unbekannte Quelle) bei org.Apache.Tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.Java:61) bei Java.lang.Thread.run (unbekannte Quelle)

Unten ist meine pom.xml Datei: (mit RestAssured, Hamcrest und 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>

Unten ist meine web.xml-Datei:

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

Unten ist meine Projektstruktur:

Projektstruktur der E-Mail-Liste

8
Vincent acent

Sehr wahrscheinlich gibt es ein Versionsunterschied zwischen Core Jersey und einer der Jersey-Erweiterungsbibliotheken, die diese Binder-Klasse importieren. Stellen Sie sicher, dass alle Jersey-bezogenen Module explizite Versionen haben (und sie zueinander passen). Oder noch besser, korrigieren Sie Ihre Versionen, indem Sie den Jersey-Bund importieren. Z.B.:

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

Danach kann Ihr Hauptabschnitt <debendencies> die Versionen auslassen.

8
andrus_a

Ich habe das gleiche Problem mit verschiedenen Versionen. Stellen Sie sicher, dass Ihre Jersey-Bean-Validierung und Jersey-Container-Servlet Versionen gleich sind.

<dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.22</version>
</dependency>
<!-- bean validation -->
<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-bean-validation</artifactId>
    <version>2.22</version>
</dependency>
1
Srikanth Bathi