拥有带有 XML 有效负载的基于 SOAP 的 Web 服务,如何在 JAX-WS >2.0 客户端中获取服务响应的 XML 有效负载?
我可以看到这个问题将如何被标记为重复,但请耐心等待。
似乎选项是:
使用Dispatch API 。然而,这需要我进入较低的级别并手动创建请求负载,这是我想避免的。
使用handler infrastructure JAX-WS 来获取有效负载,并可能通过 MessageContext 属性将其传递回客户端,但这仍然会将 XML 解码到 JAXB 对象树中,这是我想避免的。
那么,我该如何:
- 使用 SEI 调用 Web 服务 - 无需从头开始创建 XML 请求
- 在不进行 JAXB 解码的情况下获取“RAW”XML 响应
听起来很简单,对吧?
最佳答案
在 JAX-WS 2 规范的非目标中, '可插入数据绑定(bind) JAX-WS 2.0 将推迟数据绑定(bind)到 JAXB[10];它的目标不是提供一个 插件 API,允许使用其他类型的数据绑定(bind)技术来代替 JAXB。然而, JAX-WS 2.0 将保留选择性禁用数据绑定(bind)的功能,以提供基于 XML 的 适合用作替代数据绑定(bind)技术的输入的片段。'
因此,您应该能够访问原始有效负载。
以下示例也在规范中:
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 编码/解码。
关于java - 从 JAX-WS 服务获取原始负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30197113/