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 + ...);
我有一些 JAX-RS 2.0 客户端 运行在 Liberty Profile 8.5.5.6 中运行正常。它们都按顺序工作正常,但我想在线程中执行其中一些,以便它们 运行 同时执行。当我尝试在 FutureTask 中获取 "target" 时:
WebTarget myResource = client.target(apiURLBase + ...);
我在这个 com.ibm.ws... class:
中得到 NullPointerExceptonCaused 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 + ...);