web-dev-qa-db-fra.com

NoSuchMethodError au démarrage de l'application Java Jersey

Je reçois une erreur très étrange lorsque je tente de démarrer une application Jersey sur Tomcat. Le même code fonctionne sur d'autres ordinateurs. J'ai essayé de réinstaller Tomcat, toutes mes dépendances maven, même Eclipse et Java lui-même, sans succès. On dirait qu'une mauvaise version de Jersey est en train d'être chargée, je pense?

Tous les indicateurs dans la bonne direction seront appréciés.

Voici le pom efficace: http://Pastebin.com/NacsWTjz

Et le pom réel: 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

Note: S'il vous plaît voir les commentaires ci-dessus pour plus de discussion et des conseils.

Cette erreur habituelle signifie que vous avez à la fois un jar JAX-RS 1 et JAX-RS 2 sur le chemin de classe. Jersey 2 utilise JAX-RS 2 (javax.ws.rs-api-2.0.1.jar), mais si vous avez aussi le jsr311-api.jar, qui est JAX-RS 1, il existe un javax.ws.rs.core.Application dans chaque pot Mais le jsr311-apiApplication n'a pas la méthode getProperties() (d'où NoSuchMethodError).

Je suis arrivé à la conclusion que tout ce que vous avez à faire est d’ajouter l’exclusion ci-dessus à la dépendance de fanfaron. Le fournisseur Jackson 2.0 (qui dépend de JAX-RS 1) semble être remplacé par un fournisseur 2.4.1 (qui utilise la nouvelle version). Donc, nous n'avons pas besoin de l'ajouter nous-mêmes. Quand il est remplacé, il semble laisser le jsr311-api.jar. Donc, si nous l'excluons, personne ne peut essayer de l'utiliser, ce qui semble être le problème actuel

<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

Nous utilisons jersey-json 1.9 qui a une dépendance sur jersey-core qui possède également une classe javax.ws.rs.core.Application

Notre solution consiste donc à exclure le jersey-core de jersey-json:

    <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

le problème est lié à "com.Sun.jersey: jersey-core: jar: 1.18.3" (ou toute version 1. *) car les anciennes versions de Jersey ne comportaient pas cette méthode "public Map getProperties ()".

Et l’une de vos dépendances utilise Jersey version 1 (vous pouvez le vérifier en exécutant mvn dependency: tree et recherchez toutes les versions de jersey-core utilisées)

J'ai résolu le problème en supprimant toutes les dépendances com.Sun.jersey (ancienne API) et en utilisant le nouvel API un.org.glassfish.jersey

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

0
Walterwhites