I am trying to use Jersey 2.10 in Websphere 8 but it tries to reference the Application which is a implementation of JAX-RS 1.1 (default Wink) I get this below error even though I disabled to JAX-RS default by setting the IBM property.
Caused by: java.lang.NoSuchMethodError: javax/ws/rs/core/Application.getProperties()Ljava/util/Map; at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:287) at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:311)
I read a post that says to make class loading policy to PARENT_LAST. Changing that option was disabled on WAS console, so I tried using the (Publishing settings for WAS - Run server with resources on Server) and my server got crashed.
Please advise. Thanks.
You need to do the following steps:
Disable built in JAX-RS via JVM property com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine=true
see description here.
You can set this property via web admin console in Servers > WebSphere Application Servers > yourServerName
. Then in Server Infrastructure
section Java and Process Management > Process definition > Java Virtual Machine > Custom properties
.
Create isolated shared library with all JAX-RS 2.10 libraries, in console via Environment > Shared Libraries
.
Isolated shared library is created via checking Use an isolated class loader for this shared library
Class Loading option, when creating library.
Map this shared library to your application, either during installation or later on, via Applications > appName > Shared library references
.
Restart application server. In the SystemOut.log you should see message initializing JAX-RS classes:
[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...
UPDATE
It appears that it is also possible to load the JAX-RS jars from within the WAR. You have to set this DisableIBMJAXRSEngine
property and you need to change the class loading option in the module (not on EAR level) classloader to Classes loaded with local class loader first (parent last)
In the admin console:
Applications > WebSphere Enterprise Applications > {your.application} > Manage Modules > {your.module}
Change the Class loader order dropdown to: Classes loaded with local class loader first (parent last)
.
Thanks for dooffas for checking it, see JAX-RS 2.0 WebSphere 8.5 without isolated shared library