java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map; 将 jersey ws 部署到 Weblogic 时

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26288116/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 09:39:13  来源:igfitidea点击:

java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map; when deploying jersey ws to Weblogic

javaweb-servicesjerseyweblogicjax-rs

提问by andreybavt

I'm deploying a web service application on Weblogic 12. The application uses jersey and thus depends on javax.ws.rs-api:2.0.1library.

我正在 Weblogic 12 上部署一个 Web 服务应用程序。该应用程序使用 jersey,因此依赖于javax.ws.rs-api:2.0.1库。

However when I deploy it to server I have a following error :

但是,当我将其部署到服务器时,出现以下错误:

Caused By: 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:240)
    at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:337)
    at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:288)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
...

I think that weblogic might have it's own version of javax.ws.rs.core.Application that doesn't have this getProperties() method. I'm packaging the application in a WAR file and tried to use

我认为 weblogic 可能有它自己的 javax.ws.rs.core.Application 版本,它没有这个 getProperties() 方法。我将应用程序打包在一个 WAR 文件中并尝试使用

  <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>

in weblogic.xml, to explicitly tell Weblogic to use 2.0.1 version of this library.

weblogic.xml 中,明确告诉 Weblogic 使用该库的 2.0.1 版本。

Nothing helped so far, the issue still in place..

到目前为止没有任何帮助,问题仍然存在..

Thanks.

谢谢。

回答by AsemRadhwi

I found this to work as a solution. Add it in your weblogic.xml:

我发现这可以作为解决方案。将它添加到您的 weblogic.xml 中:

    <wls:container-descriptor>
    <wls:prefer-application-packages>
        <!--  jersey-bundle-*.jar-->
        <wls:package-name>com.sun.jersey.*</wls:package-name>
        <wls:package-name>com.sun.research.ws.wadl.*</wls:package-name>
        <wls:package-name>com.sun.ws.rs.ext.*</wls:package-name>

        <!-- Hymanson-*.jar -->
        <wls:package-name>org.codehaus.Hymanson.*</wls:package-name>

        <!-- jettison-*.jar -->
        <wls:package-name>org.codehaus.jettison.*</wls:package-name>

        <!-- jsr311*.jar -->
        <wls:package-name>javax.ws.rs.*</wls:package-name>

        <!-- asm.jar -->
        <wls:package-name>org.objectweb.asm.*</wls:package-name>
    </wls:prefer-application-packages>
</wls:container-descriptor>

Reference from Oracle Weblogic Documenation

来自 Oracle Weblogic 文档的参考