在IBM Bluemix中部署后,Liberty JAX-RS 2.0客户端解组无法正常工作

时间:2016-05-29 14:36:41

标签: jax-rs cxf ibm-cloud websphere-liberty

我有一个REST客户端代码在服务器本地工作正常,但在打包并使用相同的自然版本(8.5.5.9)部署到Bluemix时,无法将JSON解组为Java。失败的代码:

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 at   com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider._locateMapperViaProvider(JacksonJsonProvider.java:206)   2016-05-29T13:32:26.16 + 0200 [App / 0] ERR at   com.fasterxml.jackson.jaxrs.base.ProviderBase.locateMapper(ProviderBase.java:853)   2016-05-29T13:32:26.16 + 0200 [App / 0] ERR at   com.fasterxml.jackson.jaxrs.base.ProviderBase.readFrom(ProviderBase.java:764)   2016-05-29T13:32:26.16 + 0200 [App / 0] ERR at   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客户端请求在CXF类中抛出NPE):

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

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

我们目前在申请和Liberty Buildpack版本v2.9-20160519-1249

中遇到了同样的问题

当前buildpack版本一定是个问题,因为我们没有更改我们的应用程序代码,而且以前部署到Bluemix的工作正常。

作为一种解决方法,您可以在将应用程序部署到Bluemix时显式指定以前的自由buildpack版本。通过在'cf push'命令中使用'-b'参数或在manifest.yml文件中定义'buildpack:“属性。请查看以下链接以获取详细信息:

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

您可以通过'cf buildpacks'命令或在此处找到可用的自由构建包的名称:bpversions.mybluemix.net

不幸的是,即使是以前的版本liberty_for_java_v2_8-20160430-1011似乎也有此线程中描述的问题。从去年12月开始,只有最新版本的自由版本可供java_v2_3-20151208-1311使用,不受此问题的影响。

目前,唯一的选择似乎是通过以下方式部署您的应用:

$ cf push MYAPP -b liberty-for-java_v2_3-20151208-1311

答案 1 :(得分:0)

我们知道这个问题,并且正在通过支持服务单进行处理。当我们有更多信息时会更新。

答案 2 :(得分:0)

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中部署的版本是我们在本地用于开发和测试的人。