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)
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-api
Application
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>
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>
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