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