从JAX-WS服务获取原始有效负载

时间:2015-05-12 16:56:45

标签: java xml web-services jaxb jax-ws

拥有基于SOAP的Web服务和XML有效负载,如何在JAX-WS> 2.0客户端中获取服务响应的XML有效负载?

我可以看到这个问题将如何标记为重复,但请耐心等待。

似乎选项是:

  1. 使用Dispatch API。但是,这需要我降低(er)级别并手动创建请求有效负载,我想避免这种情况。

  2. 使用JAX-WS的handler infrastructure来获取有效负载,并可能通过MessageContext属性将其传递回客户端,但这仍然会将XML解组为JAXB对象树,我想避免

  3. 那么,我该怎么做:

    1. 使用SEI调用Web服务 - 无需从头开始创建XML请求
    2. 抓住' RAW'没有发生JAXB解组的XML响应
    3. 听起来很简单,对吧?

1 个答案:

答案 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编组/解组。