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