在 Java Jersey 应用程序中启动时出现 NoSuchMethodError [英] NoSuchMethodError on startup in Java Jersey app

查看:44
本文介绍了在 Java Jersey 应用程序中启动时出现 NoSuchMethodError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试在 Tomcat 上启动 Jersey 应用程序时,我遇到了一个非常奇怪的错误.相同的代码适用于其他计算机.我尝试重新安装 tomcat,我所有的 maven 依赖项,甚至 Eclipse 和 Java 本身,但没有运气.似乎正在加载一个糟糕的 Jersey 版本,我想?

任何指向正确方向的指针将不胜感激.

这是有效的 pom:http://pastebin.com/NacsWTjz

和实际的 pom:http://pastebin.com/H6sHe4ce

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

解决方案

注意:请参阅以上评论以获得进一步的讨论和提示.

此错误通常意味着您在类路径上同时拥有 JAX-RS 1 和 JAX-RS 2 jar.Jersey 2 使用 JAX-RS 2 (javax.ws.rs-api-2.0.1.jar),但如果你也有 jsr311-api.jar,是 JAX-RS 1,每个 jar 中有一个 javax.ws.rs.core.Application.但是 jsr311-api Application 没有方法 getProperties()(因此是 NoSuchMethodError).>

我得出的结论是,您需要做的就是将上述排除项添加到 swagger 依赖项中.Jackson 2.0 提供程序(取决于 JAX-RS 1)似乎被 2.4.1 提供程序(使用新版本)覆盖.所以我们不需要自己添加.当它被覆盖时,它似乎留下了 jsr311-api.jar.所以如果我们排除它,没有人可以尝试使用它,这看起来是当前的问题

<依赖><groupId>com.wordnik</groupId><artifactId>swagger-core_2.10</artifactId><version>1.3.11</version><排除事项><排除><groupId>javax.ws.rs</groupId><artifactId>jsr311-api</artifactId></排除></排除项></依赖>

I've been getting a very strange error when trying to start a Jersey app on Tomcat. The same code works on other computers. I tried reinstalling tomcat, all my maven dependencies, even Eclipse and Java itself, no luck. It seems like a bad Jersey version is being loaded, I think?

Any pointers in the right direction will be appreciated.

Here's the effective pom: http://pastebin.com/NacsWTjz

And the actual 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)

解决方案

Note: Please see above comments for further discussion and tips.

This error usual means that you have a both a JAX-RS 1 and JAX-RS 2 jar on the classpath. Jersey 2 uses JAX-RS 2 (javax.ws.rs-api-2.0.1.jar), but if you have the jsr311-api.jar also, which is JAX-RS 1, there is a javax.ws.rs.core.Application in each jar. But the jsr311-api Application doesn't have the method getProperties() (hence NoSuchMethodError).

I've come to the conclusion that all you need to do is add the above exclusion to the swagger dependency. The Jackson 2.0 provider (which depends on JAX-RS 1) seems to be overridden by a 2.4.1 provider (which uses the new version). So we don't need to add it ourselves. When it's overridden, it seems to leave behind the jsr311-api.jar. So if we exclude it, no one can attempt to use it, which looks to be the current problem

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

这篇关于在 Java Jersey 应用程序中启动时出现 NoSuchMethodError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆