gpt4 book ai didi

java - 如何在 header 中包含 SOAP 身份验证详细信息?

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:36 24 4
gpt4 key购买 nike

这是我的 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
}
}
});

希望能解决您的需求!

关于java - 如何在 header 中包含 SOAP 身份验证详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34554303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com