NullPointerException when 运行 CXF JAX-RS 2.0 client "target" Thread 下的 Liberty Profile 方法

NullPointerException when running CXF JAX-RS 2.0 client "target" method in Liberty Profile under a Thread

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

 WebTarget myResource = client.target(apiURLBase + ...);

我在这个 com.ibm.ws... class:

中得到 NullPointerExcepton
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.call(NaturalLanguageQueryFlowView.java:66)
     at com.skios.eliza.nlq.NaturalLanguageQueryFlowView.call(NaturalLanguageQueryFlowView.java:1)
     at java.util.concurrent.FutureTask.run(FutureTask.java:266)

CXF 不能用于 "main" 线程?我错过了什么?

感谢您的帮助。

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

@Resource(名称="java:comp/DefaultManagedExecutorServcie") ManagedExecutorService 执行器;

 Task task = new Task();    
 Future<String> result = executor.submit(task);

在您的任务 class 中,您可以对之前所做的做同样的事情:WebTarget myResource = client.target(apiURLBase + ...);