运行CXF JAX-RS 2.0客户端时出现NullPointerException“;“目标”;线程下的Liberty配置文件中的方法

运行CXF JAX-RS 2.0客户端时出现NullPointerException“;“目标”;线程下的Liberty配置文件中的方法,jax-rs,cxf,websphere-liberty,Jax Rs,Cxf,Websphere Liberty,我有一些JAX-RS2.0客户端在Liberty Profile 8.5.5.6中运行正常。它们都按顺序正常工作,但我想在一个线程中执行其中一些,以便它们同时运行。当我试图在未来任务中获得“目标”时: WebTarget myResource = client.target(apiURLBase + ...); 我在com.ibm.ws中得到了NullPointerExcepton。。。类别: Caused by: java.lang.NullPointerException at

我有一些JAX-RS2.0客户端在Liberty Profile 8.5.5.6中运行正常。它们都按顺序正常工作,但我想在一个线程中执行其中一些,以便它们同时运行。当我试图在未来任务中获得“目标”时:

 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不能在“主”线程之外使用?我错过了什么


感谢您的帮助。

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

@资源(name=“java:comp/DefaultManagedExecutorServcie”) ManagedExecutorService执行器

 Task task = new Task();    
 Future<String> result = executor.submit(task);
Task Task=新任务();
未来结果=执行者提交(任务);

在您的任务类中,您可以对以前所做的事情执行相同的操作:WebTarget myResource=client.target(apirlbase+…)

您如何提交异步工作?您是否尝试过使用ManagedExecutorService?可能实现需要一些不可用的线程上下文。我已经尝试使用Executors.newSingleThreadExecutor()使用可调用的返回未来对象的ExecutorService。由于失败了,我用run执行的普通旧线程方法重新编码了它,但也失败了。我看到这个ManagedExecutorService是JEE7的一部分,但我的视图类不是EJB(它是一个命名的CDI ApplicationScoped类)。我将在带有ManagedExecutorService的EJB中测试它,看看它是否有任何不同。谢谢,看看能不能用。不过我只是在猜测。考虑到这是IBM代码中的一个NPE,您可能会从IBM论坛或IBM支持部门得到更快的响应(我知道IBM的人监视websphere liberty标记,但他们可能不熟悉JAX-RS内部结构)。您好,我没有使用资源,因为我不确定JDNI是否是标准的,是否可以在其他EJB容器中工作(不是liberty)因此,我尝试在执行REST请求的无状态EJB中使用异步注释方法。方法返回带有响应对象的未来答案。它只是起作用了。我猜未来的方法也会使用容器管理的线程。非常感谢你的帮助。