我使用Apache CXF(使用wsdl2java)在Java中实现了一个SOAP客户端。我被要求使用自定义标头块扩展soap标头。这就是标题的样子:
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,标题列表仍然是空的。标题的顺序需要如上所述。我在这里走错了路吗?关于如何做到这一点的任何意见将不胜感激!
答案 0 :(得分:0)
使用JAXB注释创建自定义标头,并将其添加到WRITE阶段的标头列表中。即使此时标题列表为空,也会按正确的顺序添加自定义标题。