java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri
Ich versuche zu starten der Anwendung, sondern mit Tomcat 7
und ich habe eine Ausnahme wie diese.
Ich denke, das kann etwas werden mit Maven dependency
, aber ich bin mir sicher. Wenn einige wissen, was Los ist, bitte für die Antwort:)
Ausnahme:
message Servlet execution threw an exception
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:651)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.50 logs.
Maven POM
:
<properties>
<application.version>1.0</application.version>
<spring.version>4.0.0.RELEASE</spring.version>
<spring.security.version>3.2.0.RELEASE</spring.security.version>
<jersey.version>1.18.1</jersey.version>
</properties>
<dependencies>
<dependency>
<groupId>climbing-portal-facade</groupId>
<artifactId>climbing-portal-facade</artifactId>
<version>${application.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-jdk-http</artifactId>
<version>2.7</version>
</dependency>
<!-- Jersey + Spring -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>${jersey.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
Irgendeine Idee ?
- Haben Sie sah in der Apache-Tomcat/7.0.50-Protokolle wie er sagt? Hier ist, was die javadoc sagt: "Ausgelöst, wenn eine Anwendung versucht, Aufruf einer abstrakten Methode. Normalerweise wird dieser Fehler abgefangen wird, indem der compiler; dieser Fehler kann nur auftreten, zur Laufzeit, wenn die definition einer Klasse ist inkompatibel verändert, seit die derzeit ausgeführte Methode war letzten kompiliert." Es ist also wahrscheinlich eine classpath-Fehler irgendeiner Art.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist mit beiden
Jersey 1 & 2
(Jersey 1 ist eine explizite Abhängigkeit, Jersey 2 ist eine transitive Abhängigkeit vonjersey-test-framework-provider-jdk-http
) und das ist nicht möglich - so dieclassloader
ist die Abholung der falschURIBuilder
Klasse.Den
Jersey
Abhängigkeiten ingroup
com.sun.jersey
alleJersey version 1
.Jersey version 2
verwendet die Gruppeorg.glassfish.jersey
.Haben Sie sowohl in Ihrem
Maven
Abhängigkeiten, die dieses problem verursacht.Wenn möglich, verwenden Sie nur
Jersey 2
.Diese können auch verursacht werden, indem sowohl
Und
com.sun.jersey
Artefakte gehören eine version (1.0) des javax.ws.rs-namespace, so es die einzige ist, die wahrscheinlich benötigt werden. rs-api enthält auch eine version von JAX-RS (2.0) in der gleichen Namensraum, so dass, wenn Sie die beiden zusammen, aber Sie sind unterschiedliche Versionen kann es zu dem Konflikt, den Sie sehen.Dies kann verursacht werden, dass "jeder" Konflikt, der sowohl JAX-RS 1.0 und JAX-RS 2.0. JAX-RS 1.0 ist Häufig durch die
com.sun.jersey:jersey*
Artefakte (speziell jersey-Kern), und JAX-RS 2.0 ist eineorg.glassfish.jersey.core:jersey*
Artefakte, oder diejavax.ws.rs:javax.ws.rs-api
Artefakt, oder möglicherweise diejavax:javaee-api
Artefakt, oder diejsr311-api-1.0
Artefakt.Das problem ist, dass, da Sie unterschiedliche Gruppen - +Artefakt Namen, maven standardmäßig wird unwissentlich umfassen sowohl 1.0 und version 2.0 jars in das final-Distribution.
Weiter verkompliziert das problem ist, dass da mehrere widersprüchliche jars in den classpath, "manchmal", es könnte funktionieren, und dann "manchmal" könnte es nicht (daher auch einige Berichte von "er arbeitete mit tomcat7, aber nicht mit tomcat8" etc.)
Weiter verkompliziert das problem ist, dass wenn Sie auch nur eine einzige Abhängigkeit, die transitiv, hängt von einer der oben genannten, dann maven bringt in beiden Versionen, und Sie sind gehimmelt. Finden Sie, was kommt von wo mit
mvn dependency:tree
Also muss man entweder gehen Sie zu "alle 1.0" oder "alle 2.0." In unserem Fall gingen wir mit allen 1.0, indem Sie einige transitive Abhängigkeit AUSSCHLÜSSE zu unseren pom. Wenn Sie möchten, gehen alle 2.0 sehen hier.
Ich dieses problem lösen: lösche ich die library JAX-RS 2.0, füge ich die Bibliotheken jersey-server-1.8.jar,jersey-core-1.8.jar,jersey-servlet-1.12.jar und asm-3.3.1.jar
In meinem Fall beide jsr311-api-0.10.jar und javax.ws.rs-api-2.0.jar wurden in der Anwendung lib. Ich gelöscht jsr311 Glas und problem war gelöst
Hatte ich die genaue Ausgabe nicht finden konnte, das Problem.
Auf die erste Zeit der Tomcat ging und alles hat geklappt aber nach dem Neustart der server
Ich hatte die Ausnahme.
War die Lösung ein downgrade tomcat zu 7.0.26 Es hat den trick nicht sicher, warum aber.
Ich nicht erkennen, es, aber es wurde eine Datei namens javax.ws-rs-api-2.0.jar bereits in der WEB-INF/lib Ordner auf dem server. Es wurde Hinzugefügt, die vor zwei Jahren von jemand anderem. Es verursacht einen Konflikt mit dem set jersey-Dateien, die ich kopiert WEB-INF/lib Ordner. Ich gesichert/umbenannt in die Datei, neu gestartet, den service für meine container (z.B. Tomcat), und es funktionierte.
Müssen wir die nachstehenden änderungen :
web.xml
pom.xml