我试图在Websphere 8中使用Jersey 2.10,但它试图引用应用程序,它是JAX-RS 1.1的一个实现(默认Wink) 即使我通过设置IBM属性禁用JAX-RS默认值,我也会收到以下错误。
引起:java.lang.NoSuchMethodError:javax / ws / rs / core / Application.getProperties()Ljava / util / Map; 在org.glassfish.jersey.server.ApplicationHandler。(ApplicationHandler.java:287) 在org.glassfish.jersey.servlet.WebComponent。(WebComponent.java:311)
我读了一篇帖子,说要为PARENT_LAST制作课程加载政策。在WAS控制台上禁用了更改该选项,因此我尝试使用(WAS的发布设置 - 使用服务器上的资源运行服务器)并且我的服务器崩溃了。
请指教。 谢谢。
答案 0 :(得分:29)
您需要执行以下步骤:
通过JVM属性com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine=true
禁用内置JAX-RS,请参阅说明here
您可以通过Servers > WebSphere Application Servers > yourServerName
中的Web管理控制台设置此属性。然后在Server Infrastructure
部分Java and Process Management > Process definition > Java Virtual Machine > Custom properties
。
通过Environment > Shared Libraries
在控制台中创建所有JAX-RS 2.10库的隔离共享库。
通过在创建库时检查Use an isolated class loader for this shared library
类加载选项来创建隔离的共享库。
在安装期间或稍后通过Applications > appName > Shared library references
将此共享库映射到您的应用程序。
重启应用服务器。在SystemOut.log中,您应该看到初始化JAX-RS类的消息:
[7/12/14 16:10:36:470 CEST] 0000004a JerseyServlet I Registering the Jersey servlet application, named javax.ws.rs.core.Application, with the following root resource and provider classes: [class jax.Hello, class org.glassfish.jersey.server.wadl.internal.WadlResource]
[7/12/14 16:10:36:688 CEST] 0000004a ApplicationHa I Initiating Jersey application, version Jersey: 2.10.1 2014-06-30 13:53:32...
更新
似乎也可以从WAR中加载JAX-RS jar。您必须设置此DisableIBMJAXRSEngine
属性,并且需要将模块(不在EAR级别)类加载器中的类加载选项更改为Classes loaded with local class loader first (parent last)
在管理控制台中:
应用程序> WebSphere Enterprise Applications> {your.application}>管理模块> {your.module}
将类加载器顺序下拉列表更改为:Classes loaded with local class loader first (parent last)
。
感谢dooffas检查它,请参阅JAX-RS 2.0 WebSphere 8.5 without isolated shared library