在SOAP标头内添加自定义标头块

时间:2017-06-29 08:09:54

标签: java cxf soap-client

我使用Apache CXF(使用wsdl2java)在Java中实现了一个SOAP客户端。我被要求使用自定义标头块扩展soap标头。这就是标题的样子:

Header structure

WS-Security和WS-Addressing已经到位,我已经在CXF中使用了内置功能(例如WSS4JOutInterceptor)。

自定义块的结构应如下所示:

<customHeader xmlns:func="http://...." xmlns="http://....">
    <customElement>
        <customValue>....</customValue>
    </customElement>
</customHeader>

我不确定如何添加自定义标头块。我正在考虑实现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,标题列表仍然是空的。标题的顺序需要如上所述。我在这里走错了路吗?关于如何做到这一点的任何意见将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用JAXB注释创建自定义标头,并将其添加到WRITE阶段的标头列表中。即使此时标题列表为空,也会按正确的顺序添加自定义标题。