Поддержка JAX-RS Jersey 2.10 в Websphere 8

Я пытаюсь использовать Jersey 2.10 в Websphere 8, но он пытается ссылаться на приложение, которое представляет собой реализацию JAX-RS 1.1 (по умолчанию Wink) Я получаю эту ошибку ниже, хотя я отключен по умолчанию JAX-RS, установив свойство IBM.

Вызвано: java.lang.NoSuchMethodError: javax/ws/rs/core/Application.getProperties() Ljava/util/Map;   at org.glassfish.jersey.server.ApplicationHandler. (ApplicationHandler.java:287)   на org.glassfish.jersey.servlet.WebComponent. (WebComponent.java:311)

Я прочитал сообщение, в котором говорится о том, чтобы сделать политику загрузки классов PARENT_LAST. Изменение этой опции было отключено на консоли WAS, поэтому я попытался использовать (параметры публикации для WAS - запустить сервер с ресурсами на сервере), и мой сервер потерпел аварию.

Просьба сообщить. Благодарю.

Ответы

Ответ 1

Вам необходимо выполнить следующие действия:

Отключить встроенный JAX-RS через свойство JVM com.ibm.websphere.jaxrs.server.DisableIBMJAXRSEngine=true см. описание here.
Вы можете установить это свойство через консоль веб-администратора в 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...

ОБНОВЛЕНИЕ

Похоже, что также можно загружать банки JAX-RS из WAR. Вы должны установить это свойство DisableIBMJAXRSEngine, и вам нужно изменить параметр загрузки класса в классе модуль (не на уровне EAR) classloader до 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 без изолированной общей библиотеки