在 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 已按正确顺序添加。