NoSuchMethodError al inicio en la aplicación Java Jersey


He estado recibiendo un error muy extraño al intentar iniciar una aplicación de Jersey en Tomcat. El mismo código funciona en otros ordenadores. Intenté reinstalar tomcat, todas mis dependencias maven, incluso Eclipse y Java en sí, sin suerte. Parece que una mala versión de Jersey está siendo cargada, creo?

Cualquier indicación en la dirección correcta será apreciada.

Aquí está el pom efectivo: http://pastebin.com/NacsWTjz

Y el pom real: 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)
Author: Paul Samsotha, 2015-02-14

3 answers

Nota: Por favor, consulte los comentarios anteriores para obtener más información y consejos.

Este error habitual significa que tiene un JAX-RS 1 y JAX-RS 2 en el classpath. Jersey 2 usa JAX-RS 2 (javax.ws.rs-api-2.0.1.jar), pero si tienes el jsr311-api.jar también, que es JAX-RS 1, hay un javax.ws.rs.core.Application en cada frasco. Pero el jsr311-api Application no tiene el método getProperties() (por lo tanto NoSuchMethodError).

He llegado a la conclusión de que todo lo que necesita hacer es agregar la exclusión anterior a la dependencia swagger. El Jackson 2.0 el proveedor (que depende de JAX-RS 1) parece ser reemplazado por un proveedor 2.4.1 (que usa la nueva versión). Así que no necesitamos agregarlo nosotros mismos. Cuando se anula, parece dejar atrás el jsr311-api.jar. Así que si lo excluimos, nadie puede intentar usarlo, que parece ser el problema actual

<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>
 62
Author: Paul Samsotha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-08 03:02:14

Estamos usando jersey-json 1.9 que tiene una dependencia de jersey-core que también tiene una clase javax.ws.rs.core.Application.

Así que nuestra solución es excluir el 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
Author: Leon li,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-12 15:27:55

Puede cambiar la versión de tomcat a 7, entonces se ejecutará sin necesidad de cambiar pom.xml

 -2
Author: Koshan Imanga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-27 07:20:19