我在Liberty Profile 8.5.5.6中运行了一些JAX-RS 2.0客户端。它们都按顺序正常工作,但我想在一个Thread中执行它们中的一些,以便它们同时运行。当我试图获得一个"目标"在FutureTask里面:
WebTarget myResource = client.target(apiURLBase + ...);
我在这个com.ibm.ws ...类中得到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$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不能用于" main"线?我错过了什么?
感谢您的帮助。
答案 0 :(得分:2)
如果要在分叉的新线程中使用客户端API,则需要确保新线程是容器管理的线程。在您的情况下,您可以启用concurrent-1.0功能。然后使用:
@Resource(名称= “java的:COMP / DefaultManagedExecutorServcie”) ManagedExecutorService执行者;
Task task = new Task();
Future<String> result = executor.submit(task);
在你的Task类中,你可以用你之前做过的事情做同样的事情:WebTarget myResource = client.target(apiURLBase + ...);