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

标签 java xml web-services jaxb jax-ws

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

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

似乎选项是:

  1. 使用Dispatch API 。然而,这需要我进入较低的级别并手动创建请求负载,这是我想避免的。

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

那么,我该如何:

  1. 使用 SEI 调用 Web 服务 - 无需从头开始创建 XML 请求
  2. 在不进行 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/

相关文章:

java - 如何在保持当前连接的情况下连接到多个服务器?

java - 删除部分 XML 声明,编码 ="UTF-8"独立 ="yes"JAXB

c# - 为什么这个静态构造函数没有被调用?

java - Eclipse java JAX-RPC Web服务导入生成接口(interface)而不是类

java - 在非光栅图形配置中显示 JFrame

java - 从 BlackBerry 上的自定义上下文菜单中删除默认项目

Java:LSParser 和 DocumentBuilder 有什么区别

android - 二进制 XML 文件行 #26 : Error inflating class android. widget.TextView

asp.net - 每个请求隔离 Global.asax 中的共享/静态变量?

java - 我的表格 View 中的表格单元格为空。 JavaFX + 场景构建器