在 SOAP header 中添加自定义 header 块
Add custom header block inside SOAP header
我在 Java 中使用 Apache CXF(使用 wsdl2java)实现了一个 SOAP 客户端。我被要求使用自定义 header 块扩展 soap header。 header 应该是这样的:
WS-Security 和 WS-Addressing 已经到位,为此我使用了 CXF 中的 built-in 功能(例如 WSS4JOutInterceptor)。
自定义块的结构应如下所示:
<customHeader xmlns:func="http://...." xmlns="http://....">
<customElement>
<customValue>....</customValue>
</customElement>
</customHeader>
我不确定如何添加自定义 header 块。我正在考虑实现 AbstractSoapInterceptor:
public class CustomHeaderInterceptor extends AbstractSoapInterceptor {
public CustomHeaderInterceptor() {
super(Phase.WRITE);
getAfter().add(WSS4JOutInterceptor.class.getName());
}
@Override
public void handleMessage(SoapMessage message) throws Fault {
....
}
}
但是我不确定到底要做什么。我还注意到 message.getHeaders() 是空的。我也尝试了 Phase.SEND,但 header 列表仍然是空的。 headers 的顺序需要如上所述。我走错路了吗?任何有关如何正确执行此操作的意见都将不胜感激!
使用 JAXB 注释创建自定义 header 并将其添加到 WRITE 阶段的 header 列表中。即使此时 header 列表为空,自定义 header 已按正确顺序添加。
我在 Java 中使用 Apache CXF(使用 wsdl2java)实现了一个 SOAP 客户端。我被要求使用自定义 header 块扩展 soap header。 header 应该是这样的:
WS-Security 和 WS-Addressing 已经到位,为此我使用了 CXF 中的 built-in 功能(例如 WSS4JOutInterceptor)。
自定义块的结构应如下所示:
<customHeader xmlns:func="http://...." xmlns="http://....">
<customElement>
<customValue>....</customValue>
</customElement>
</customHeader>
我不确定如何添加自定义 header 块。我正在考虑实现 AbstractSoapInterceptor:
public class CustomHeaderInterceptor extends AbstractSoapInterceptor {
public CustomHeaderInterceptor() {
super(Phase.WRITE);
getAfter().add(WSS4JOutInterceptor.class.getName());
}
@Override
public void handleMessage(SoapMessage message) throws Fault {
....
}
}
但是我不确定到底要做什么。我还注意到 message.getHeaders() 是空的。我也尝试了 Phase.SEND,但 header 列表仍然是空的。 headers 的顺序需要如上所述。我走错路了吗?任何有关如何正确执行此操作的意见都将不胜感激!
使用 JAXB 注释创建自定义 header 并将其添加到 WRITE 阶段的 header 列表中。即使此时 header 列表为空,自定义 header 已按正确顺序添加。