如何使用Spring WS Client在服务器端获取Soap Header

时间:2013-04-18 05:53:28

标签: spring-ws soapheader

我是Web服务开发的新手。我正在使用Spring WS开发Web服务。我需要在请求中添加soap标头,所以下面是我在客户端的请求中添加标头的代码。

 getWebServiceTemplate()
                .sendSourceAndReceiveToResult(source, 
                    new WebServiceMessageCallback(){
                        public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException{
                            SaajSoapMessage soapMessage = (SaajSoapMessage) message;
                            SoapHeaderElement messageId =  soapMessage.getSoapHeader().addHeaderElement(new QName("http://www.w3.org/2005/08/addressing", "messageId", "wsa"));
                            messageId.setText("Test Security Token");
                        }
                },result);

如何在服务器端类中从请求中获取此标头?

我已经使用Eclipse Axis插件生成我的wsdl到类骨架。我正在使用Spring 2.

2 个答案:

答案 0 :(得分:1)

我得到了解决方案。我在服务器骨架的BindingImpl方法中编写的代码:

MessageContext messageContext = MessageContext.getCurrentContext();

SOAPHeader header = (SOAPHeader) 
    messageContext.getCurrentMessage().getSOAPHeader();

header.getChildElements();

它将为您提供SOAPHeaderElement列表。从那里你可以获取元素名称及其价值。

谢谢大家...... :)

答案 1 :(得分:0)

嗯,问题是,你使用的是哪个版本的Spring- WS ?您要添加的标头属于WS-Addressing规范,对吧?我知道Spring-WS也直接支持WS-Addressing。最好尽可能使用Spring的支持,而不是干扰消息头(虽然这也是可能的)。