1

我有一个使用 Jersey 实现运行 JAX-RS Web 服务的 Web 应用程序。目标应用服务器是 WebLogic 12c,其默认 JAXRS 实现是 Jersey v1.9。

1) 当在 Jetty (6.1.26) 上运行时,依赖 jersey-server-1.9,一切都很好。

2) 当在 WebLogic 12c 上运行 jersey-core.jar + jersey-server.jar (v1.9) jar 都嵌入在我的战争的 WEB-INF/lib 中时,它也可以工作。

2) 当在 WebLogic 12c 上运行时,从这 2 个 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 INFO:启动 Jersey 应用程序,版本 'Jersey:1.9 09/02/2011 上午 11:17'”

它再次听起来(视觉!)像一个类路径或类加载器问题:-(

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

4

3 回答 3

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

于 2013-04-25T13:13:33.807 回答
1

您是否已将球衣罐“部署”到您的服务器?在管理控制台中转到 Deployables(单击自定义表并取消选中排除库)。看看那里是否列出了泽西岛。如果没有,您将需要“部署”它并定位您需要它的任何服务器。然后尝试重新部署您的战争文件。

泽西岛应该住在:

wlserver_10.3/common/deployable-libraries

这些共享库不会自动提供给您的服务器,直到它们被定位到它。

于 2013-04-24T15:47:19.210 回答
1

只需移除所有 Jersey jar 并添加一个 Jersey Bundle jar 即可。在将 Jersey Bundle jar 添加到类路径后,我遇到了同样的问题并解决了。

于 2013-11-12T06:37:42.417 回答