【问题标题】:Using Jersey 2.x web service on Weblogic 12.1.1在 Weblogic 12.1.1 上使用 Jersey 2.x Web 服务
【发布时间】:2014-12-09 06:23:21
【问题描述】:

我正在尝试将 Jersey 2.13 Web 服务部署到 Weblogic 12.1.1。此版本的 weblogic 符合 JSR-311 JAX-RS 1.1 规范,而 Jersey 2.x 提供 JAX-RS 2.0 的实现

Oracle 有关于如何升级 Jersey JAX-RS RI 版本的说明: http://docs.oracle.com/cd/E24329_01/web.1211/e24983/version.htm

然而,即使这样也无助于解决所有的部署问题。

我将应用程序打包到包含 WAR 的 EAR 中。为了覆盖 weblogic jar,我添加了以下 weblogic-application.xml 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
  <prefer-application-packages>
    <!-- apis -->
    <package-name>javax.ws.rs.*</package-name>
    <!-- guava -->
    <package-name>com.google.common.*</package-name>
    <!-- jersey1 providers -->
    <package-name>com.sun.jersey.*</package-name>
    <!-- media providers -->
    <package-name>org.eclipse.persistence.jaxb.rs.*</package-name>
    <package-name>org.codehaus.jackson.jaxrs.*</package-name>
    <!-- wls -->
    <package-name>weblogic.jaxrs.api.client.*</package-name>
    <package-name>weblogic.jaxrs.internal.api.client.*</package-name>
    <package-name>weblogic.jaxrs.dispatch.*</package-name>
    <package-name>weblogic.jaxrs.monitoring.util.*</package-name>

   </prefer-application-packages>
</weblogic-application>

此配置在部署时给我以下错误消息:

Caused By: java.lang.NoSuchMethodError: org.glassfish.hk2.api.ServiceLocatorFactory.create(Ljava/lang/String;Lorg/glassfish/hk2/api/ServiceLocator;Lorg/glassfish/hk2/extension/ServiceLocatorGenerator;Lorg/glassfish/hk2/api/ServiceLocatorFactory$CreatePolicy;)Lorg/glassfish/hk2/api/ServiceLocator;

如果我尝试通过将 org.glassfish.hk2.* 类添加到 prefer-application-packages 来替换它,我会收到新的错误并且它会永远持续下去......

有人在 weblogic 12.1.1 或更低版本上将 Jersey 迁移到 2.x 版吗?

谢谢!

【问题讨论】:

  • 您找到解决方案了吗?我遇到了同样的错误,但它是随机发生的。有时库会被覆盖,有时不会。
  • 嘿,@retrodev,是的,我会在下面发布我的 weblogic-application.xml 作为答案。

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


【解决方案1】:

最终结果证明,您实际上必须更换比 Oracle 建议的更多的罐子。这是我的 weblogic-application.xml 的样子:

 <prefer-application-packages>
    <package-name>com.sun.jersey.*</package-name>
    <package-name>org.glassfish.jersey.*</package-name>
    <package-name>org.glassfish.hk2.*</package-name>
    <package-name>org.jvnet.hk2.*</package-name>
    <package-name>jersey.repackaged.org.objectweb.asm.*</package-name>

    <package-name>com.sun.research.ws.wadl.*</package-name>
    <package-name>com.sun.ws.rs.ext.*</package-name>

    <package-name>org.codehaus.jackson.*</package-name>
    <package-name>com.fasterxml.jackson.*</package-name>

    <package-name>org.codehaus.jettison.*</package-name>

    <package-name>javax.ws.rs.*</package-name>

    <package-name>org.objectweb.asm.*</package-name>

    <package-name>antlr.*</package-name>

  </prefer-application-packages>

希望对你有帮助。

【讨论】:

  • 这适用于 12.1.1 吗?我猜这个解决方案只适用于 12.1.3 以后。
  • 在 12.1.3 上,@EJB@Resource 等注释停止使用此配置
  • 在 12.2.x 上工作。我只拉了杰克逊的东西
  • 是的,谢谢!!!! Oracle 应该更新文档...
【解决方案2】:

对于那些想要使用更新版本的 Jersey 的人(适用于 2.15 到 2.20,目前是 SNAPSHOT 版本),这是weblogic.xml 的另一个版本。请注意,这组包名是由单个依赖决定的

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
</dependency>

文件weblogic.xml(还包括resources,AndreyBavt 的回答甚至官方文档都没有涉及):

<wls:container-descriptor>
    <wls:prefer-application-packages>
        <!-- jsr311 -->
        <wls:package-name>javax.ws.rs.*</wls:package-name>
        <!-- javassist -->
        <wls:package-name>javassist.*</wls:package-name>
        <!-- aop repackaged -->
        <wls:package-name>org.aopalliance.*</wls:package-name>

        <!-- jersey 2 -->
        <wls:package-name>jersey.repackaged.*</wls:package-name>
        <wls:package-name>org.glassfish.jersey.*</wls:package-name>
        <wls:package-name>com.sun.research.ws.wadl.*</wls:package-name>

        <!-- hk2 -->
        <wls:package-name>org.glassfish.hk2.*</wls:package-name>
        <wls:package-name>org.jvnet.hk2.*</wls:package-name>
        <wls:package-name>org.jvnet.tiger_types.*</wls:package-name>
    </wls:prefer-application-packages>

    <wls:prefer-application-resources>
        <wls:resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</wls:resource-name>
        <wls:resource-name>META-INF/services/javax.ws.rs.ext.RuntimeDelegate</wls:resource-name>

        <!-- jersey -->
        <wls:resource-name>META-INF/services/org.glassfish.jersey.*</wls:resource-name>
        <wls:resource-name>org.glassfish.jersey.*</wls:resource-name>
        <wls:resource-name>jersey.repackaged.*</wls:resource-name>

        <!-- hk2 -->
        <wls:resource-name>META-INF/services/org.glassfish.hk2.*</wls:resource-name>
    </wls:prefer-application-resources>
</wls:container-descriptor>

使用 Weblogic 12.2.1 测试

【讨论】:

  • 与上面的答案类似,JEE 注释 @EJB@Resource 不起作用
  • 我在 WLS 12.2.1.3 和 Jersey 2.23.1 上遇到了同样的问题。我使用 wls-cat 来确定首选应用程序包,但我不知道首选应用程序资源要求。它完成了这项工作。感谢分享。
【解决方案3】:

当我将我的 Jersey 升级到 2.22 时,我遇到了同样的问题。

Weblogic 12.1.3 使用 Jersey 的 1.18 版本。要升级到另一个,您可以将 Jersey 2.x 部署为 Weblogic 上的库并与您的应用程序共享或配置 Weblogic 以通过 weblogic.xml 从您的应用程序使用 Jersey。

就我而言,我选择第二个选项:

weblogic.xml:

<prefer-application-packages>
    <package-name>javax.ws.rs.*</package-name>
    <package-name>com.sun.jersey.*</package-name>
    <package-name>org.glassfish.*</package-name>
    <package-name>org.jvnet.hk2.*</package-name>
    <package-name>jersey.repackaged.org.objectweb.asm.*</package-name>
</prefer-application-packages>

【讨论】:

    【解决方案4】:

    我创建了一个简单的 maven 项目来使用 weblogic 的 2.19 jersey 共享库生成 war 文件。
    你可以从这里克隆weblogic-jax-rs
    克隆后运行mvn package 产生战争,然后将其部署到服务器

    从 weblogic 12.2.1 开始 - 捆绑了 jersey 2.21.1,因此无需额外安装。

    weblogic 12.2.1.1 自带球衣 2.22.1

    【讨论】:

    • 嗨,George 这可以在 12.1.3 和 12.2.1 上工作吗?我正在尝试找到一个可以同时运行的配置
    • @Astronaut 12.2.1 不需要这个。它附带开箱即用的球衣 2.21.1。你不必在那里做任何事情。我会更新答案。
    • 嗨,George,是的,但我希望 12.1.3 和 12.2.1 具有相同的代码库。请看stackoverflow.com/questions/38052931/…
    • 嗨@Astronaut,你检查了jar文件吗?你的问题解决了吗?
    • 嗨,很遗憾我无法修复它。我确实在 lib 文件夹中有 jar ......但随后它引发了其他的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2014-11-07
    相关资源
    最近更新 更多