Websphere 8中的JAX-RS Jersey 2.10支持

时间:2014-07-10 19:42:10

标签: jersey websphere jax-rs

我试图在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的发布设置 - 使用服务器上的资源运行服务器)并且我的服务器崩溃了。

请指教。 谢谢。

1 个答案:

答案 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