wake-up-neo.net

NoSuchMethodError beim Start in der Java Jersey-App

Ich habe einen sehr merkwürdigen Fehler erhalten, als ich versuchte, eine Jersey-App auf Tomcat zu starten. Der gleiche Code funktioniert auf anderen Computern. Ich habe versucht, Tomcat neu zu installieren, alle meine Abhängigkeiten, sogar Eclipse und Java selbst. Es scheint, als würde eine schlechte Jersey-Version geladen, denke ich.

Jeder Hinweis in die richtige Richtung wird geschätzt.

Hier ist der effektive Pom: http://Pastebin.com/NacsWTjz

Und der eigentliche Pom: http://Pastebin.com/H6sHe4ce

2015-02-13 13:43:40,870 [localhost-startStop-1] ERROR org.Apache.catalina.core.ContainerBase.[Catalina].[localhost].[/middleware-server] - StandardWrapper.Throwable
Java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.Java:304)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.Java:285)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.Java:311)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.Java:170)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.Java:358)
    at javax.servlet.GenericServlet.init(GenericServlet.Java:158)
    at org.Apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.Java:1231)
    at org.Apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.Java:1144)
    at org.Apache.catalina.core.StandardWrapper.load(StandardWrapper.Java:1031)
    at org.Apache.catalina.core.StandardContext.loadOnStartup(StandardContext.Java:4901)
    at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5188)
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
    at org.Apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.Java:1409)
    at org.Apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.Java:1399)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)
26
SGr

Hinweis: Bitte lesen Sie die obigen Kommentare für weitere Diskussionen und Tipps.

Dieser Fehler bedeutet in der Regel, dass sich im Klassenpfad sowohl ein JAX-RS 1- als auch ein JAX-RS 2 -Jar befindet. Jersey 2 verwendet JAX-RS 2 (javax.ws.rs-api-2.0.1.jar), aber wenn Sie auch den jsr311-api.jar haben, der JAX-RS 1 ist, ist in jedem Behälter ein javax.ws.rs.core.Application vorhanden. Die jsr311-apiApplication hat jedoch nicht die Methode getProperties() (daher NoSuchMethodError).

Ich bin zu dem Schluss gekommen, dass Sie nur den oben genannten Ausschluss zur Swagger-Abhängigkeit hinzufügen müssen. Der Jackson 2.0-Provider (der von JAX-RS 1 abhängt) scheint von einem 2.4.1-Provider (der die neue Version verwendet) überschrieben zu werden. Wir müssen es also nicht selbst hinzufügen. Wenn es überschrieben wird, scheint es den jsr311-api.jar zu hinterlassen. Wenn wir es also ausschließen, kann niemand versuchen, es zu benutzen, was das aktuelle Problem zu sein scheint

<dependency>
    <groupId>com.wordnik</groupId>
    <artifactId>swagger-core_2.10</artifactId>
    <version>1.3.11</version>
    <exclusions>
        <exclusion>
            <groupId>javax.ws.rs</groupId>
            <artifactId>jsr311-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
64
Paul Samsotha

Wir verwenden jersey-json 1.9, das eine Abhängigkeit von jersey-core hat, die zufällig auch eine javax.ws.rs.core.Application-Klasse haben. 

Unser Fix ist also, den jersey-core von jersey-json auszuschließen:

    <dependency>
        <groupId>com.Sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.9</version>
        <exclusions>
            <exclusion>
                <groupId>com.Sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
0
Leon li

das Problem bezieht sich auf "com.Sun.jersey: jersey-core: jar: 1.18.3" (oder eine beliebige 1. * -Version), da ältere Versionen von Jersey nicht die Methode "public Map getProperties ()" hatten.

Und eine Ihrer Abhängigkeiten verwenden Jersey Version 1 (Sie können dies überprüfen, indem Sie mvn Abhängigkeit ausführen: Baum und alle verwendeten Jersey-Core-Versionen durchsuchen).

Ich habe das Problem behoben, indem alle com.Sun.jersey-Abhängigkeiten (alte API) gelöscht und die neue org.glassfish.jersey-API verwendet wurde

https://mvnrepository.com/artifact/org.glassfish.jersey.core

0
Walterwhites