Weblogic 12.2.1内部有Jersey 2.21.1作为JAX-RS 2.0的实现,但我们想使用Jersey 2.5.1或Jersey的最新版本。
解决冲突的一般方法是在配置文件中定义类以从应用程序加载类。
但是当你升级weblogic或者Jersey时,你必须调查类冲突并对配置进行更改,有没有一种方便的方法从weblogic中禁用Jersey?
答案 0 :(得分:4)
您需要将jersey文件包含在项目的web-inf lib中(您可以从jersey的网站获取jersey和dependencies zip文件),并将这些行添加到您的weblogic.xml文件中(如图所示)在这篇文章中Using Jersey 2.x web service on Weblogic 12.1.1):
<container-descriptor>
<prefer-application-packages>
<!-- jsr311 -->
<package-name>javax.ws.rs.*</package-name>
<!-- javassist -->
<package-name>javassist.*</package-name>
<!-- aop repackaged -->
<package-name>org.aopalliance.*</package-name>
<!-- jersey 2 -->
<package-name>jersey.repackaged.*</package-name>
<package-name>org.glassfish.jersey.*</package-name>
<package-name>com.sun.research.ws.wadl.*</package-name>
<!-- hk2 -->
<package-name>org.glassfish.hk2.*</package-name>
<package-name>org.jvnet.hk2.*</package-name>
<package-name>org.jvnet.tiger_types.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
<resource-name>META-INF/services/javax.ws.rs.ext.RuntimeDelegate</resource-name>
<!-- jersey -->
<resource-name>META-INF/services/org.glassfish.jersey.*</resource-name>
<resource-name>org.glassfish.jersey.*</resource-name>
<resource-name>jersey.repackaged.*</resource-name>
<!-- hk2 -->
<resource-name>META-INF/services/org.glassfish.hk2.*</resource-name>
</prefer-application-resources>
</container-descriptor>
这样做会覆盖weblogic 12.2.1使用的球衣版本。
如果你正在使用Json,你还需要按照这篇文章POST to Jersey REST service getting error 415 Unsupported Media Type中的说明获取这些罐子:
并将这些行添加到weblogic.xml中的<prefer-application-packages>
部分:
<package-name>org.codehaus.jackson.*</package-name>
<package-name>com.fasterxml.jackson.*</package-name>
UDPATE - 另外值得一提的是,weblogic 12的默认JSON绑定器是MOXy而不是Jersey,这导致了一些问题,我最终用Jersey替换了提供程序,这使得上面的更改变得不必要。