如何在 java spring webservice 的 soap header 中添加子元素。
我尝试了两种方法,但没有任何效果请告诉我需要做什么?
第一种方法:-
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());
它会产生未转义的序列,因此服务提供商会给出错误,因为它无法理解请求。
请帮我解决这个问题需要做些什么。
最佳答案
是的,在我的例子中它也提示相同的错误,元素“wsse:username”的前缀“username”未绑定(bind)。我尝试尽一切努力添加命名空间声明。但是,它不起作用!
“终于”,昨晚我能够通过一种变通方法做到这一点,将某种方式从 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);
通过这个,我能够将 namespace 声明添加到 spring soap header 子元素中!
关于java - 如何在java中的soap header中添加子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16322634/