如何为cxf soap请求添加自定义标头?

时间:2014-09-23 13:37:35

标签: java spring web-services soap cxf

我想使用cxfspring soap webservices创建以下xml:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:key="http://schema.to/WebService">
   <soapenv:Header>
      <key:Signing>asdasdasd</key:Signing>
   </soapenv:Header>

如何做到这一点?如何设置命名空间和自定义标头标记元素?

2 个答案:

答案 0 :(得分:4)

在maven cxf配置中使用以下内容:

<wsdlOption>
    <wsdl>...</wsdl>
    <extraargs>  
        <extraarg>-exsh</extraarg> <!-- this -->
        <extraarg>true</extraarg> <!-- this -->
    </extraargs>
</wsdlOption>

这会生成方法属性@WebParam(header = true),然后可以在Web服务访问时提供。

答案 1 :(得分:0)

使用实现javax.xml.ws.handler.soap.SOAPHandler<SOAPMessageContext>的CustomHeaderHandler 在public boolean handleMessage(SOAPMessageContext soapMsgCtx)中使用此代码

if (msg.getSOAPPart().getEnvelope().getHeader() == null) {
    msg.getSOAPPart().getEnvelope().addHeader();
}
msg.getSOAPHeader().addChildElement("Signing", "key").addTextNode("asdasdasd");