Websphere 8中的JAX-RS Jersey 2.10支持

jer*_*rry 22 websphere jax-rs jersey

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

请指教.谢谢.

Gas*_*Gas 29

您需要执行以下步骤:

通过JVM属性禁用内置的JAX-RS,com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine=true请参阅此处的说明.
您可以通过Web管理控制台设置此属性Servers > WebSphere Application Servers > yourServerName.然后在Server Infrastructure部分Java and Process Management > Process definition > Java Virtual Machine > Custom properties.

在控制台中通过所有JAX-RS 2.10库创建隔离的共享库Environment > Shared Libraries.

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...
Run Code Online (Sandbox Code Playgroud)

UPDATE

似乎也可以从WAR中加载JAX-RS罐子.您必须设置此DisableIBMJAXRSEngine属性,并且需要更改模块(不在EAR级别)类加载器中的类加载选项Classes loaded with local class loader first (parent last)

在管理控制台中:

应用程序> WebSphere企业应用程序> {your.application}>管理模块> {your.module}

将类加载器顺序下拉列表更改为:Classes loaded with local class loader first (parent last).

感谢dooffas检查它,请参阅没有隔离共享库的JAX-RS 2.0 WebSphere 8.5

  • 是否可以通过MANIFEST.MF文件关闭JAX-RS引擎?可以关闭JAX-WS引擎.我想使用随应用程序提供的JAX-RS,而无需修改应用程序服务器. (2认同)