异步handleResponse为单个webmethod请求调用了两次

时间:2015-11-03 10:34:45

标签: java web-services rest asynchronous cxf-client

我使用Apache CXF API开发了一个异步JAX-RS Web方法。 webmethod采用自定义类型作为

中的参数
 @POST
 @Path("/query")
 @Produces(MediaType.APPLICATION_JSON)
 @Consumes(value={MediaType.APPLICATION_JSON , "application/CustomType"})
 public void getQueryResults(@Suspended final AsyncResponse asyncResponse,    CustomType conf)

我已经实现了(服务和客户端)自定义MessageBodyReader和MessageBodyWriter来处理序列化我的自定义类型'。 在客户端,我将那些非常重要的人作为

Client client = ClientBuilder.newClient().register(CacheConfigReader.class).register(CacheConfigWriter.class); 

我向具有

的服务发出异步请求
asyncResponse.resume(result); // result is a string

在客户端

Future<String> future = asyncInvoker.post(entity, String.class);

我的观察是随机响应是空的虽然在服务器日志上能够看到非空结果。在调试时我发现有两个线程调用

 JaxrsClientCallback . handleResponse()

其中一个具有实际结果而另一个为空。根据首先执行的操作,结果是实际字符串或空。调用的跟踪包含来自阶段拦截器链的调用。 仅当我使用自定义读取器和编写器注册客户端时才会发生这种情况。当我用json设置请求体时,只有一个线程处理响应。 有人可以解释为什么添加MessageBodyReaders / Writers会导致这个问题吗?

0 个答案:

没有答案