java 在 Weblogic 12.1.1 上使用 Jersey 2.x Web 服务
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/26361136/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using Jersey 2.x web service on Weblogic 12.1.1
提问by andreybavt
I'm trying to deploy Jersey 2.13 web services to Weblogic 12.1.1. This version of weblogic is compliant with JSR-311 JAX-RS 1.1 specification whereas Jersey 2.x provides implementation for JAX-RS 2.0
我正在尝试将 Jersey 2.13 Web 服务部署到 Weblogic 12.1.1。此版本的 weblogic 符合 JSR-311 JAX-RS 1.1 规范,而 Jersey 2.x 提供 JAX-RS 2.0 的实现
Oracle has an instruction on how to upgrade the version of Jersey JAX-RS RI : http://docs.oracle.com/cd/E24329_01/web.1211/e24983/version.htm
Oracle 有关于如何升级 Jersey JAX-RS RI 版本的说明:http: //docs.oracle.com/cd/E24329_01/web.1211/e24983/version.htm
However even this doesn't help solving all of the deployment issues.
然而,即使这样也无助于解决所有部署问题。
I'm packaging the application in EAR containing WAR. In order to override weblogic jars I've included added the following weblogic-application.xmlfile :
我将应用程序打包在包含 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.Hymanson.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>
This configuration gives me a following error message on deployment :
此配置在部署时给了我以下错误消息:
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;
If I try to replace org.glassfish.hk2.* classes by adding it to prefer-application-packagesI receive new errors and it's continuing forever...
如果我尝试通过将 org.glassfish.hk2.* 类添加到 preferred -application-packages来替换它,我会收到新的错误并且它会永远持续下去......
Has anyone migrated Jersey to version 2.x on weblogic 12.1.1 or below?
有没有人在 weblogic 12.1.1 或更低版本上将 Jersey 迁移到 2.x 版?
Thanks!
谢谢!
回答by andreybavt
In the end it turned out that you actually have to replace more jars than Oracle suggests. Here's what my weblogic-application.xml looks like :
最后事实证明,您实际上必须更换比 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.Hymanson.*</package-name>
<package-name>com.fasterxml.Hymanson.*</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>
Hope it helps.
希望能帮助到你。
回答by Stepan Vavra
For those who would like to use even newer version of Jersey (works with 2.15 up to 2.20, which is currently in a SNAPSHOT version), this is another version of weblogic.xml
. Note that this set of package names is determined by single dependency to
对于那些想要使用更新版本的 Jersey(适用于 2.15 到 2.20,目前为 SNAPSHOT 版本)的人,这是weblogic.xml
. 请注意,这组包名称由单个依赖项确定
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
</dependency>
File weblogic.xml
(includes also resources, which is not covered in AndreyBavt's answer and not even in the official doc):
文件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>
Tested with Weblogic 12.2.1
使用 Weblogic 12.2.1 测试
回答by I. Medina
I had the same problem when I upgraded my Jersey to 2.22.
当我将 Jersey 升级到 2.22 时,我遇到了同样的问题。
The Weblogic 12.1.3 uses the 1.18 version of Jersey. To upgrade to another one, you can deploy the Jersey 2.x as a library on Weblogic and shared with your applications or config Weblogic to use Jersey from your application by weblogic.xml.
Weblogic 12.1.3 使用 Jersey 的 1.18 版本。要升级到另一个,您可以将 Jersey 2.x 作为库部署在 Weblogic 上并与您的应用程序共享或配置 Weblogic 以通过weblogic.xml从您的应用程序使用 Jersey 。
In my case I choose the second option:
就我而言,我选择第二个选项:
weblogic.xml:
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>
回答by George
I have created a simple maven project to produce the war file with the 2.19 jersey shared library for weblogic.
You can clone from here weblogic-jax-rs
After cloning run mvn package
to produce the war and then deploy it to the server
我创建了一个简单的 maven 项目来生成带有 weblogic 2.19 jersey 共享库的 war 文件。
你可以从这里克隆weblogic-jax-rs
克隆后运行mvn package
生成war然后部署到服务器
As of weblogic 12.2.1 - there is jersey 2.21.1 bundled with it so no additional installations are required.
从 weblogic 12.2.1 开始 - 捆绑了 jersey 2.21.1,因此不需要额外的安装。
weblogic 12.2.1.1 comes with jersey 2.22.1
weblogic 12.2.1.1 附带球衣 2.22.1