我有一个使用Jersey实现运行JAX-RS Web服务的webapp。目标应用服务器是WebLogic 12c,其默认JAXRS实现是Jersey v1.9。
1)当在具有jersey-server-1.9依赖性的Jetty(6.1.26)上运行时,一切都很好。
2)当在WebLogic 12c上运行jersey-core.jar + jersey-server.jar(v1.9)jars都嵌入在我的战争的WEB-INF / lib中时,它也在工作。
2)当在WebLogic 12c上运行时,从这两个jar中执行相同的战争(假设不需要weblogic Java EE堆栈已经提供),它不再起作用了。我收到以下错误:
“weblogic.application.ModuleException:[HTTP:101216] Servlet:”jersey-servlet“在Web应用程序启动时无法预加载:”cachede-newgen.war“。 com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类。 在com.sun.jersey.server.impl.application.RootResourceUriRules。(RootResourceUriRules.java:99)“
毋庸置疑,泽西岛版本在所有三种情况下完全相同:
“2013年4月24日下午4:10:24 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 信息:启动Jersey应用程序,版本'Jersey:1.9 09/02/2011 11:17 AM'“
它再次发出声音(视觉!),就像类路径或类加载器问题一样: - (
解决这个问题的任何想法或解决方法(考虑到我不想在每次部署的战争中重复球衣罐)?
答案 0 :(得分:3)
好的我找到了原因:-) - 并且“better_use_mkstemp”让我朝着正确的方向前进(很多次!)。
解决方案包括在weblogic描述符文件中为已部署的Jersey版本添加引用:
<library-ref>
<library-name>jersey-bundle</library-name>
<specification-version>1.1.1</specification-version>
<implementation-version>1.1.5.1</implementation-version>
</library-ref>
奇怪的是,如果没有这样的引用,错误消息(即“ ResourceConfig实例不包含任何根资源类”)会让人觉得Jersey能够启动并扫描你的注释类......
注意:实际上,您还需要参考JSR-311 api,如下所述: http://theblasfrompas.blogspot.be/2011/03/time-to-deploy-restful-web-service-from.html
答案 1 :(得分:1)
您是否已将球衣罐“部署”到您的服务器上?在管理控制台中,转到Deployables(单击“自定义表”并取消选中“排除库”)。看看泽西是否列在那里。如果没有,您将需要“部署”它并定位您需要的任何服务器。然后尝试重新部署war文件。
泽西岛应该住在:
wlserver_10.3/common/deployable-libraries
这些共享库在被定位到服务器之前不会自动可用。
答案 2 :(得分:1)
只需移除所有泽西岛罐子并添加一个可用的泽西岛捆绑罐。我遇到了同样的问题,并在将Jersey Bundle jar添加到类路径后解决了。