WL12c上的Jersey:资源是通过嵌入war中的Jersey JAR找到的,但在使用WebLogic堆栈时找不到

WL12c上的Jersey:资源是通过嵌入war中的Jersey JAR找到的,但在使用WebLogic堆栈时找不到,jersey,weblogic,Jersey,Weblogic,我有一个使用Jersey实现运行JAX-RSWeb服务的webapp。目标应用服务器是WebLogic12c,其默认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都嵌入到我的war的WEB-INF/lib中,它也可以工作 2) 当在WebLogic 12c上运行时,从这两个JAR中截取

我有一个使用Jersey实现运行JAX-RSWeb服务的webapp。目标应用服务器是WebLogic12c,其默认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都嵌入到我的war的WEB-INF/lib中,它也可以工作

2) 当在WebLogic 12c上运行时,从这两个JAR中截取相同的war(假设不需要WebLogic Java EE堆栈已经提供的war),它将不再工作。我得到了以下错误:

“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\u启动 信息:正在启动Jersey应用程序,版本为“Jersey:1.9 09/02/2011 11:17 AM”

这听起来又像是类路径或类加载器问题:-(

解决此问题的任何想法或解决方法(考虑到我不想在每次部署的战争中重复jersey jar)?

您是否已将jersey jar“部署”到您的服务器?在管理控制台中,转到Deployables(单击Customize the table并取消选中exclude libraries)。查看jersey是否在那里列出。如果没有,您将需要“部署”它会锁定任何你需要的服务器,然后尝试重新部署你的war文件

泽西岛应居住在:

wlserver_10.3/common/deployable-libraries
这些共享库在指向服务器之前不会自动对服务器可用。

是否已将jersey jar“部署”到服务器?在管理控制台中,转到可部署项(单击“自定义表”并取消选中“排除库”)。查看jersey是否列在那里。如果没有,则需要“部署”它会锁定任何你需要的服务器,然后尝试重新部署你的war文件

泽西岛应居住在:

wlserver_10.3/common/deployable-libraries
这些共享库在指向服务器之前不会自动对服务器可用。

好的,我找到了原因:--)和“更好地使用”让我走上了正确的方向(很多thx!)

解决方案包括在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>

球衣束
1.1.1  
1.1.5.1  
奇怪的是,如果没有这样的引用,错误消息(即“ResourceConfig实例不包含任何根资源类”)会让人感觉Jersey能够启动并扫描带注释的类

注意:实际上,您还需要参考JSR-311API,如下所述:

好的,我找到了原因:-)和“更好地使用”让我走上了正确的方向(很多thx!)

解决方案包括在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>

球衣束
1.1.1  
1.1.5.1  
奇怪的是,如果没有这样的引用,错误消息(即“ResourceConfig实例不包含任何根资源类”)会让人感觉Jersey能够启动并扫描带注释的类

注意:实际上,您还需要参考JSR-311API,如下所述:

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

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

是的,Jersey已部署(注意:在WL12c中,Jersey默认已部署,因此实际上不需要部署它们)。它正常启动,正如我在控制台中看到的:“2013年4月25日10:07:50 AM com.sun.jersey.server.impl.application.WebApplicationImpl_initiate INFO:Initiating jersey application,version'jersey:1.9 09/02/2011 11:17 AM'”但由于某些原因,它找不到我的注释类(在案例3中)。是的,jersey已部署(注意:在WL12c中,Jersey在默认情况下已经部署,因此实际上不需要部署它们)。它正在正常启动,正如我在控制台中看到的:“2013年4月25日10:07:50 AM com.sun.Jersey.server.impl.application.WebApplicationImpl(启动信息:启动Jersey应用程序,版本'Jersey:1.9 09/02/2011 11:17 AM'”但是由于某些原因,它找不到我的带注释的类(在案例3中)。我们是否需要指定我们在代码中实现的jersey版本号,或者我们是否需要按原样使用上面的xml?我们是否需要指定我们在代码中实现的jersey版本号,或者我们是否需要按原样使用上面的xml??