2013-05-01 47 views
3

如何在java spring webservice中的肥皂標題中添加子元素。如何在java中的肥皂標題中添加子元素

我試過兩種方法,但沒有任何工作,請建議我需要做什麼?

第一種方法: -

soapHeaderString.append("<tem:Culture>en_Us</tem:Culture><tem:AgentCode>PumpkinSafari</tem:AgentCode><tem:PartnerID></tem:PartnerID><tem:Password>PMP22#in</tem:Password>"); 

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
// Here we create a Source Tree 
StringSource stringSource = new StringSource(soapHeaderString.toString()); 
transformer.transform(stringSource, soapHeader.getResult()); 

,但它給我錯誤

The prefix "tem" for element "tem:Culture" is not bound. 

第二個方法: -

SoapHeaderElement headerElement=soapMessage.getSoapHeader().addHeaderElement(new QName("http://tempuri.org/", "SOAPHeaderAuth","tem")); 
headerElement.setText(soapHeaderString.toString()); 

它產生轉義sequqnce使服務提供商給的錯誤,因爲它無法理解請求。

請幫助我解決問題需要做些什麼。

回答

2

JAX-WS用戶

我會建議使用一個消息處理程序:

http://www.javadb.com/using-a-message-handler-to-alter-the-soap-header-in-a-web-service-client

的Spring Web服務用戶

類似的概念存在:

http://arcanetechnotes.blogspot.com/2008/12/modifying-soap-headers-with-spring-web.html

的問題指出,它無法理解的tem命名空間,所以也許登記在標題命名空間:

soapHeader.addNamespaceDeclaration("tem", "http://whatever.namespace.com/"); 
+0

非常感謝!我可以使用這個處理與春WS,因爲我使用websericegatwaysupport類 – user1047873 2013-05-01 18:43:43

+0

我不認爲它將與春季工作,你可以請幫我 – user1047873 2013-05-01 18:49:45

+0

嘗試從你的問題的第一種方法,只要確保名稱空間添加。 – davidfmatheson 2013-05-01 19:13:15

8

是的,在我的情況太它提示了同樣的錯誤,爲前綴「用戶名」元素「wsse:username」未被綁定。我試着盡一切努力來添加命名空間聲明。但是,它不起作用! 「

」最後「,我昨晚用了一種解決方法,將其從Spring org.springframework.ws.soap.SoapHeader轉換爲javax.xml.soap.SOAPHeader。現在沒有問題!

SOAPMessage soapMessage = ((SaajSoapMessage) message).getSaajMessage(); 
SOAPHeader header = soapMessage.getSOAPHeader(); 
SOAPHeaderElement security = header.addHeaderElement(new QName(SCHEMA, "Security", SCHEMA_PREFIX)); 
SOAPElement usernameToken = security.addChildElement("UsernameToken", SCHEMA_PREFIX); 
SOAPElement usernameElement = usernameToken.addChildElement("Username", SCHEMA_PREFIX); 
SOAPElement passwordElement = usernameToken.addChildElement("Password", SCHEMA_PREFIX); 

usernameElement.setTextContent(username); 
passwordElement.setTextContent(password); 

通過這個我能夠添加命名空間聲明到春天肥皂頭子元素!

+0

這應該是被接受的答案。簡單,它的作品。 – 2016-11-14 13:37:22

0

使用「標題=真」在webparam 屬性喜歡

@WebMethod(operationName = "someMethod") 
    public String someMethod(@WebParam(name = "yourBeanObj") YourBeanObjClass yourBeanObj, 
      @WebParam(header = true, mode = WebParam.Mode.IN, name = "username") String userName, 
      @WebParam(header = true, mode = WebParam.Mode.IN, name = "password") String pwd) { 
//todo stuff 
} 
按照實施例「yourBeanObj」上方

時便會加入皁體,「用戶名」和「密碼」是在添加肥皂頭。