我正在尝试将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 来替换它,我会收到新的错误并且它会一直持续......
是否有人将Jersey迁移到weblogic 12.1.1或更低版本的2.x版本?
谢谢!
答案 0 :(得分:22)
最后,事实证明你实际上必须更换比甲骨文建议更多的罐子。这是我的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>
希望它有所帮助。
答案 1 :(得分:10)
对于那些想要使用更新版本的Jersey(使用2.15到2.20,目前处于SNAPSHOT版本)的人来说,这是weblogic.xml
的另一个版本。请注意,这组包名称由单个依赖性
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
</dependency>
文件weblogic.xml
(还包括资源,这些内容未在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进行测试
答案 2 :(得分:5)
当我将泽西岛升级到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>
答案 3 :(得分:1)
我创建了一个简单的maven项目来生成带有2.19 jersey共享库for weblogic的war文件。
你可以从这里克隆weblogic-jax-rs
克隆后运行mvn package
以生成战争,然后将其部署到服务器
从weblogic 12.2.1开始 - 与它捆绑的球衣2.21.1因此不需要额外的安装。
weblogic 12.2.1.1附带球衣2.22.1