2015-02-13 17 views
24

Si è verificato un errore molto strano durante il tentativo di avviare un'app Jersey su Tomcat. Lo stesso codice funziona su altri computer. Ho provato a reinstallare tomcat, tutte le mie dipendenze Maven, persino Eclipse e Java, senza fortuna. Sembra che venga caricata una brutta versione di Jersey, penso?NoSuchMethodError all'avvio nell'app java Java

Tutti i puntatori nella giusta direzione saranno apprezzati.

Ecco il pom efficace: http://pastebin.com/NacsWTjz

E il pom attuale: 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) 
+2

Sembra che tu abbia dei barattoli incompatibili nel tuo classpath – Jens

+2

Spero che tu non sia in un baratro dell'inferno. –

+0

Sono stato in baratro inferno per gli ultimi 3 giorni .. non ha ottenuto alcun lavoro a causa di quello. – SGr

risposta

59

Nota: Si prega di vedere i commenti di cui sopra per ulteriori discussioni e suggerimenti.

Questo errore normale indica che si dispone di un vaso JAX-RS 1 e JAX-RS 2 sul classpath. Jersey 2 utilizza JAX-RS 2 (javax.ws.rs-api-2.0.1.jar), ma se si dispone anche dello jsr311-api.jar, che è JAX-RS 1, c'è un javax.ws.rs.core.Application in ciascun contenitore. Ma lo Application non ha il metodo getProperties() (quindi NoSuchMethodError).

Sono giunto alla conclusione che tutto ciò che dovete fare è aggiungere l'esclusione di cui sopra alla dipendenza da swagger. Il provider di Jackson 2.0 (che dipende da JAX-RS 1) sembra essere sovrascritto da un provider 2.4.1 (che utilizza la nuova versione). Quindi non abbiamo bisogno di aggiungerlo da soli. Quando viene sovrascritto, sembra lasciare il jsr311-api.jar. Quindi, se si esclude, nessuno può tentare di usarlo, che sembra essere il problema attuale

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

Nel mio caso il 'jsr311-api.jar' è venuto con' spring-cloud-starter-eureka', quindi escluderlo lì (come mostrato da @peeskillet) ha risolto il mio problema. – Sonata

+0

Grazie mille. Questo ha risolto il mio problema. – orange14

+0

Questa soluzione funziona anche per apache cxf. – cabaji99

0

È possibile modificare la versione di Tomcat a 7, allora verrà eseguito alcun bisogno di cambiare pom.xml