如何在Java的Soap标头中添加子元素 [英] How to add child element in soap header in java

查看:355
本文介绍了如何在Java的Soap标头中添加子元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How to add child element in soap header in java spring webservice.

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

I have tried two approach but nothing is working please suggest me what need to be done?

第一种方法:-

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());

它产生未转义的序列,因此服务提供者由于无法理解请求而报错.

It produce unescaped sequqnce so service provider give error as it was not able to understand the request.

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

Please help me what need to be done to solve the problem.

推荐答案

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

Yes, in my case too it prompts the same error, The prefix "username" for element "wsse:username" is not bound. I tried doing everything to add namespace declaration. But, it doesn't worked!

最后",我昨晚可以通过一种解决方法来做到这一点,将Spring org.springframework.ws.soap.SoapHeader转换为javax.xml.soap.SOAPHeader.现在没有问题!

"Finally", I was able to do it last night with a workaround, converting some way from Spring org.springframework.ws.soap.SoapHeader to javax.xml.soap.SOAPHeader. And no issues now!

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);

通过这一点,我能够在Spring Soap Header子元素中添加名称空间声明!

Through this I was able to add namespace declarations to spring soap header child elements!

这篇关于如何在Java的Soap标头中添加子元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆