WL12c上的泽西岛:资源是在战争中嵌入的球衣罐中找到的,但在使用WebLogic堆栈时却找不到

时间:2013-04-24 14:36:50

标签: jersey weblogic

我有一个使用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'“

它再次发出声音(视觉!),就像类路径或类加载器问题一样: - (

解决这个问题的任何想法或解决方法(考虑到我不想在每次部署的战争中重复球衣罐)?

3 个答案:

答案 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添加到类路径后解决了。