【问题标题】:java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map; when deploying jersey ws to Weblogicjava.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;将 jersey ws 部署到 Weblogic 时
【发布时间】:2014-10-09 21:23:31
【问题描述】:

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

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

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

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

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

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

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

谢谢。

【问题讨论】:

  • 这可能是一个类加载问题,其中 sun jersey 客户端 (1.x) 在较新的 jersey 库 (2.x) 之前被加载到内存中。当我使用的其他实用程序包括 jersey-client 1.x 时,我遇到了这个问题,但我已经能够在我的项目构建文件中排除该依赖项。

标签: java web-services jersey weblogic jax-rs


【解决方案1】:

我发现这是一种解决方案。将其添加到您的 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>

        <!-- Jackson-*.jar -->
        <wls:package-name>org.codehaus.jackson.*</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

【讨论】:

  • 您的错误只需要&lt;!-- jsr311*.jar --&gt; &lt;wls:package-name&gt;javax.ws.rs.*&lt;/wls:package-name&gt;
  • 当我这样做时,我的服务将停止在 WebLogic 12.2.1.3.0 上运行(日志中没有任何显示,只是不再响应)
猜你喜欢
  • 2023-03-06
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多