java - 在 Weblogic 12.1.1 上使用 Jersey 2.x Web 服务

标签 java web-services jersey weblogic jax-rs

我正在尝试将 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;

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

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

谢谢!

最佳答案

最后,事实证明您实际上必须替换比 Oracle 建议的更多的 jar。这是我的 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>

希望对您有所帮助。

关于java - 在 Weblogic 12.1.1 上使用 Jersey 2.x Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26361136/

相关文章:

java - 如何以安全且可读的方式处理我知道永远不会抛出的 IOException?

java - 在运行时运行 Java 文件

web-services - 何时使用 BPEL 和 ESB?

java - 从 PHP 向 Web 服务发送 HashMap 参数

javascript - 查询字符串总是在服务器端返回 NULL

spring - Multipart API 在带有 Spring Boot 的 Jersey 中不起作用

JAXB/ Jersey - 如何指定 "schemaLocation"

java - 用java解析 {“item” =“value” }

java - 如何从这个循环中提取反射?

java - Web 服务和 hibernate - 您如何将这两者结合起来?