Демаршалинг клиента Liberty JAX-RS 2.0 не работает после развертывания в IBM Bluemix

У меня есть клиентский код REST, который работает нормально локально на сервере, но не может преобразовать JSON в Java при упаковке и развертывании в Bluemix с той же версией Liberty (8.5.5.9). Неудачный код:

Response response = get("/v0.1/path/" + var + "/path/" + var2);
return response.readEntity(MyClass.class);

В bluemix я получаю это исключение:

2016-05-29T13:32:26.16+0200 [App/0] ERR Причина: java.lang.NullPointerException 2016-05-29T13:32:26.16+0200 [App/0]
ERR в org.apache. cxf.jaxrs.impl.tl.ThreadLocalProviders.getContextResolver(ThreadLocalProviders.java:50) 2016-05-29T13:32:26.16+0200 [App/0] ERR в [внутренних классах] 2016-05-29T13:32:26.16+ 0200 [App/0] ERR в com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider._locateMapperViaProvider(JacksonJsonProvider.java:206) 2016-05-29T13:32:26.16+0200 [App/0] ERR в com.fasterxml. jackson.jaxrs.base.ProviderBase.locateMapper(ProviderBase.java:853) 2016-05-29T13:32:26.16+0200 [App/0] ERR в com.fasterxml.jackson.jaxrs.base.ProviderBase.readFrom(ProviderBase. java:764) 2016-05-29T13:32:26.16+0200 [App/0] ERR в org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1356) 2016-05-29T13:32: 26.16+0200 [App/0] ERR ... еще 13

Результат REST на сервере в порядке. На самом деле, если я получу этот код JSON как String и воспользуюсь сопоставителем Jackson для его распаковки, он будет работать нормально, но не в том случае, если я сделаю это стандартным способом клиента JAX-RS 2.0:

  return response.readEntity(MyClass.class);

который потерпит неудачу с ошибкой выше.

Редактировать: Используемые версии Liberty:

Пакет сборки, который мы запускаем локально (клиентские запросы JAX-RS 2.0 работают нормально):

(WebSphere Application Server 8.5.5.9/wlp-1.0.12.cl50920160227-1523) on Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_77-b03 (en_US)

Тот, что в BlueMix (клиент JAX-RS 2.0 запрашивает бросание NPE в класс CXF):

 (WebSphere Application Server 2016.5.0.0/wlp-1.0.13.20160430-1625) on IBM J9 VM, version pxa6480sr3-20160428_01 (SR3) (en_US)

Спасибо за любую помощь


person icordoba    schedule 29.05.2016    source источник
comment
Вы имеете в виду тот же код: Response response = get(/v0.1/path/ + var + /path/ + var2); вернуть response.readEntity(MyClass.class); отлично работает на сервере Liberty, но не работает в bluemix? Можете ли вы поделиться дополнительной информацией, где вы пишете этот код в bluemix? Это приложение развернуто в Liberty?   -  person Iris Ding    schedule 01.06.2016
comment
Да, в нашей локальной либерте работает (проверено в Linux, Windows и Mac), но когда мы разворачиваем приложение в Bluemix (выполняем полный серверный пакет с помощью Eclipse), для версии 8.5.5.9 все работает, но эта проблема при распаковке в Джава. Мы также попытались получить строку JSON и рассортировать ее с помощью Jackson Mapper, и она работает нормально в LIberty... но не использует в ответ метод readEntity().   -  person icordoba    schedule 01.06.2016
comment
Можете ли вы попробовать упаковать сервер с опцией --include=usr? В этом случае бинарник Liberty не будет упакован. Затем вы можете вставить это в blueMix. Подробнее см.: console.ng.bluemix.net/docs/ среда выполнения/свобода/   -  person Iris Ding    schedule 02.06.2016
comment
Здравствуйте, да, мы всегда упаковываем сервер с опцией --include=usr. Кстати, я только что подтвердил, что в другом проекте у нас точно такая же проблема. Никакой прямой распаковки JAX-RS 2.0, работающей над BlueMix Liberty, но работающей в локальной версии Liberty.   -  person icordoba    schedule 02.06.2016
comment
Вы имеете в виду, что у вас такая же проблема без bluemix? Можно ли отправить мне вашу заявку?   -  person Iris Ding    schedule 03.06.2016
comment
Нет, проблема возникает только тогда, когда мы отправляем наше приложение в BlueMix. Локально клиентские запросы JAX-RS 2.0 работают идеально. (Кстати, я отредактировал вопрос, добавив информацию о версиях)   -  person icordoba    schedule 03.06.2016
comment
Вы пытались запустить его локально также с помощью IBM J9VM? могут быть небольшие различия в реализациях.   -  person The86Freak    schedule 05.06.2016
comment
Лично у меня нет (я использую MacOS), но я могу попросить разработчика в моей компании попробовать. В любом случае, если это не работает локально с IBM JVM, это подтвердит, что проблема связана с JVM (что очень вероятно), но это не решит проблему, поскольку нам нужно, чтобы она работала в BlueMix.   -  person icordoba    schedule 05.06.2016


Ответы (3)


В настоящее время мы испытываем ту же проблему с нашим приложением и Liberty Buildpack Версия: v2.9-20160519-1249

Это должно быть проблемой с текущей версией buildpack, потому что мы не изменили код нашего приложения, и оно нормально работало с предыдущими развертываниями до Bluemix.

В качестве обходного пути вы можете явно указать предыдущую версию пакета сборки Liberty при развертывании приложения в Bluemix. Либо с помощью параметра «-b» в команде «cf push», либо путем определения свойства «buildpack:» в файле manifest.yml. Подробности см. по следующим ссылкам:

  • new-console.ng.bluemix.net/docs/cfapps/byob.html
  • docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#buildpack

Вы можете узнать название доступных пакетов сборки Liberty либо с помощью команды «cf buildpacks», либо здесь: bpversions.mybluemix.net

К сожалению, даже предыдущая версия Liberty_for_java_v2_8-20160430-1011, похоже, имеет проблему, описанную в этой теме. Эта проблема не затрагивает только самую старую версию, доступную в Liberty-for-java_v2_3-20151208-1311 от декабря прошлого года.

Итак, в настоящее время единственным вариантом является развертывание вашего приложения через:

$ cf push MYAPP -b свобода-для-java_v2_3-20151208-1311

person Joerg    schedule 12.06.2016

Нам известно об этой проблеме, и она решается с помощью запроса в службу поддержки. Будет обновлено, когда у нас будет больше информации.

person RandalAnders    schedule 16.06.2016

IBM рекомендовала нам использовать сборочный пакет OpenSource Liberty. Он основан на 8.5.5.9, той же официальной загружаемой версии, и, похоже, проблема решена. Для этого мы используем этот manifest.yml

buildpack: https://github.com/cloudfoundry/ibm-websphere-liberty-buildpack.git
env:
    IBM_JVM_LICENSE: L-PMAA-A3Z8P2
    IBM_LIBERTY_LICENSE: L-MCAO-9SYMVC
    JBP_CONFIG_IBMJDK: "version: 1.8.+"

Пока они не исправят проблему, мне нравится этот обходной путь, поскольку он позволяет убедиться, что версия, развернутая в BlueMix, является той, которую мы используем локально для разработки и тестирования.

person icordoba    schedule 16.06.2016