[英]Need to add Authentication details in the header section of request XML SOAP
[英]How to include SOAP authentication details in header?
这是我的SOAP请求
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<Security>
<UsernameToken>
<SiteId>testlab1</SiteId>
<Password>abcd1234</Password>
</UsernameToken>
</Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body
xmlns:ns3="http://www.foo.bar/ws"
xmlns:ns5="http://http://www.foo.bar.com"
xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope">
<ns5:RequestObject>
<ns3:Header>
<AccountNo>4353454543</AccountNo>
<CustomerId>534534</CustomerId>
<SiteId>testlab1</SiteId>
<RegisterId>0</RegisterId>
<SequenceNumber>1</SequenceNumber>
<Retry>0</Retry>
</ns3:Header>
</ns5:RequestObject>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
它适用于SOAP UI工具。 但是当它使用spring-ws的WebServiceTemplate自动生成时,它不包括:
<Security>
<UsernameToken>
<SiteId>testlab1</SiteId>
<Password>abcd1234</Password>
</UsernameToken>
</Security>
部分在<SOAP-ENV:Header>
。 有没有我可以通过我的代码包含这些身份验证详细信息? 任何帮助将不胜感激 !!
如果您使用的是spring-ws的WebServiceTemplate,那么您可以尝试添加WebServiceMessageCallback并覆盖doWithMessage()。 就像是 :
getWebServiceTemplate().marshalSendAndReceive("https://soap.endpoint",
requestObj, new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message) {
try {
SoapMessage soapMessage = (SoapMessage)message;
SoapHeader header = soapMessage.getSoapHeader();
StringSource headerSource = new StringSource("<Security><UsernameToken><SiteId>testlab1</SiteId>"+
"<Password>abcd1234</Password></UsernameToken></Security> ");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, header.getResult());
} catch (Exception e) {
// exception handling
}
}
});
希望在这里解决您的要求!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.