在线程下的 Liberty Profile 中运行 CXF JAX-RS 2.0 客户机"target"方法时的 NullPointerException



我有一些JAX-RS 2.0客户端在Liberty Profile 8.5.5.6中运行正常。它们都按顺序工作,但我想在线程中执行其中一些,以便它们并发运行。当我尝试在FutureTask中使用:

获取"目标"时:
 WebTarget myResource = client.target(apiURLBase + ...);

我得到nullpointerexception在这个com.ibm.ws…类:

Caused by: java.lang.NullPointerException
     at com.ibm.ws.jaxrs20.client.bus.LibertyJAXRSClientBusFactory.getClientScopeBus(LibertyJAXRSClientBusFactory.java:89)
     at com.ibm.ws.jaxrs20.client.JAXRSClientImpl.target(JAXRSClientImpl.java:109)
     at org.apache.cxf.jaxrs.client.spec.ClientImpl.target(ClientImpl.java:100)
     at com.servengine.watson.naturallanguageclassifier.NaturalLanguageClassifierRESTClient.classify(NaturalLanguageClassifierRESTClient.java:161)
     at com.servengine.watson.naturallanguageclassifier.NaturalLanguageClassifierRESTClient$Proxy$_$$_WeldClientProxy.classify(Unknown Source)
     at com.skios.eliza.nlq.NaturalLanguageQueryFlowView$1.call(NaturalLanguageQueryFlowView.java:66)
     at com.skios.eliza.nlq.NaturalLanguageQueryFlowView$1.call(NaturalLanguageQueryFlowView.java:1)
     at java.util.concurrent.FutureTask.run(FutureTask.java:266)

CXF不能在"主"线程外使用?我错过了什么?

谢谢你的帮助

如果您想在分叉的新线程中使用客户端API,则需要确保新线程是容器管理的线程。在您的情况下,您可以启用concurrent-1.0特性。然后使用:

@ resource (name = " java: comp/DefaultManagedExecutorServcie ")

ManagedExecutorService执行人;
 Task task = new Task();    
 Future<String> result = executor.submit(task);

在你的任务类,你可以做同样的事情与你之前做的:WebTarget myResource = client。

最新更新