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

我正在尝试将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文件:

    javax.ws.rs.*  com.google.common.*  com.sun.jersey.*  org.eclipse.persistence.jaxb.rs.* org.codehaus.jackson.jaxrs.*  weblogic.jaxrs.api.client.* weblogic.jaxrs.internal.api.client.* weblogic.jaxrs.dispatch.* weblogic.jaxrs.monitoring.util.*   

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

 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。*类,我会收到新的错误并且它会一直持续……

有没有人将Jersey迁移到weblogic 12.1.1或更低版本的2.x版本?

谢谢!

最后,事实certificate你实际上必须更换比Oracle建议更多的jar子。 这是我的weblogic-application.xml的样子:

   com.sun.jersey.* org.glassfish.jersey.* org.glassfish.hk2.* org.jvnet.hk2.* jersey.repackaged.org.objectweb.asm.* com.sun.research.ws.wadl.* com.sun.ws.rs.ext.* org.codehaus.jackson.* com.fasterxml.jackson.* org.codehaus.jettison.* javax.ws.rs.* org.objectweb.asm.* antlr.*  

希望能帮助到你。

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

  org.glassfish.jersey.containers jersey-container-servlet  

文件weblogic.xml (也包括资源 ,这在AndreyBavt的答案中没有涉及,甚至在官方文档中也没有):

    javax.ws.rs.*  javassist.*  org.aopalliance.*  jersey.repackaged.* org.glassfish.jersey.* com.sun.research.ws.wadl.*  org.glassfish.hk2.* org.jvnet.hk2.* org.jvnet.tiger_types.*   META-INF/services/javax.servlet.ServletContainerInitializer META-INF/services/javax.ws.rs.ext.RuntimeDelegate  META-INF/services/org.glassfish.jersey.* org.glassfish.jersey.* jersey.repackaged.*  META-INF/services/org.glassfish.hk2.*   

使用Weblogic 12.2.1进行测试

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

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

在我的情况下,我选择第二个选项:

weblogic.xml中:

  javax.ws.rs.* com.sun.jersey.* org.glassfish.* org.jvnet.hk2.* jersey.repackaged.org.objectweb.asm.*  

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

从weblogic 12.2.1开始 – 与它捆绑的jersey2.21.1因此不需要额外的安装。

weblogic 12.2.1.1附带jersey2.22.1