2

我使用 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 来负责序列化我的“CustomType”。在客户端,我将实施的那些作为

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 会导致这个问题吗?

4

0 回答 0