如何在java中的soap头中添加子元素

use*_*873 4 java xml spring web-services

如何在java spring webservice中的soap头中添加子元素.

我尝试了两种方法,但没有任何工作请告诉我需要做什么?

第一种方法: -

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());
Run Code Online (Sandbox Code Playgroud)

但它给了我错误

The prefix "tem" for element "tem:Culture" is not bound.
Run Code Online (Sandbox Code Playgroud)

第二种方法: -

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

它产生未转义的sequqnce,因此服务提供商会因为无法理解请求而给出错误.

请帮助我解决问题需要做些什么.

Roh*_*sal 9

是的,在我的情况下它也提示相同的错误,元素"wsse:username"的前缀"username"没有绑定.我尝试了一切来添加名称空间声明.但是,它不起作用!

"终于",我昨晚能够做一个解决方法,从Spring转换org.springframework.ws.soap.SoapHeaderjavax.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);
Run Code Online (Sandbox Code Playgroud)

通过这个我能够添加命名空间声明到spring soap header子元素!


dav*_*son 3

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/");
Run Code Online (Sandbox Code Playgroud)