拥有基于SOAP的Web服务和XML有效负载,如何在JAX-WS> 2.0客户端中获取服务响应的XML有效负载?
我可以看到这个问题将如何标记为重复,但请耐心等待。
似乎选项是:
使用Dispatch API。但是,这需要我降低(er)级别并手动创建请求有效负载,我想避免这种情况。
使用JAX-WS的handler infrastructure来获取有效负载,并可能通过MessageContext属性将其传递回客户端,但这仍然会将XML解组为JAXB对象树,我想避免
那么,我该怎么做:
听起来很简单,对吧?
答案 0 :(得分:1)
在非目标中,JAX-WS 2规范说明了这一点 '可插拔数据绑定JAX-WS 2.0将推迟数据绑定到JAXB [10];提供一个不是一个目标 插件API,允许使用其他类型的数据绑定技术代替JAXB。然而, JAX-WS 2.0将保持有选择地禁用数据绑定以提供基于XML的能力 片段适合用作替代数据绑定技术的输入。'
因此,您应该能够访问原始有效负载。
以下示例也在规范中:
4.3.5.5异步,回调,有效负载
class MyHandler implements AsyncHandler<Source> {
...
public void handleResponse(Response<Source> res) {
Source resMsg = res.get();
// do something with the results
}
}
Source reqMsg = ...;
Service service = ...;
Dispatch<Source> disp = service.createDispatch(portName,
Source.class, PAYLOAD);
MyHandler handler = new MyHandler();
disp.invokeAsync(reqMsg, handler);
由于规范还声明Binding有自己的HandlerChain(参见第9章),您应该能够从链中删除JAXB处理程序,以便不涉及JAXB编组/解组。