我有一个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)
感谢您的帮助
答案 0 :(得分:0)
我们目前在申请和Liberty Buildpack
版本v2.9-20160519-1249
当前buildpack
版本一定是个问题,因为我们没有更改我们的应用程序代码,而且以前部署到Bluemix
的工作正常。
作为一种解决方法,您可以在将应用程序部署到Bluemix时显式指定以前的自由buildpack版本。通过在'cf push'命令中使用'-b'参数或在manifest.yml文件中定义'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中部署的版本是我们在本地用于开发和测试的人。