作为SOAP新手,我正在遵循Spring boot - Server did not recognize the value of HTTP Header SOAPAction中给出的相同教程。可以在https://howtodoinjava.com/spring-boot/spring-soap-client-webservicetemplate/amp/
中找到该教程目前,我能够发送带有所需请求的SOAP有效负载。服务器正在回应说我尚未认证。
因此,我尝试发送带有身份验证详细信息的SOAP标头以及此SOAP有效负载。参见以下示例。
首先,我已成功设法使本教程正常工作。发送了SOAP Action请求并收到了响应。
已发送请求[SaajSoapMessage {http://server.windeed.co.za/windeedengine/} CheckDeedsOfficeStatus]
响应是我没有正确验证/发送验证详细信息。因此,我创建了带有所有必要详细信息的身份验证对象,以封送并成为SOAP消息的一部分。
我尝试了以下方法:
ObjectFactory of = new ObjectFactory();
WinDeedCredentials cred = of.createWinDeedCredentials();
cred.setUsername("Test");
cred.setPassword("Test123");
cred.setCompany("COMPANY");
cred.setRequester("SOAP");
CheckDeedsOfficeStatus cdo = of.createCheckDeedsOfficeStatus();
CheckDeedsOfficeStatusResponse dr = (CheckDeedsOfficeStatusResponse)sc.callWebService(cdo,"http://server.windeed.co.za/windeedengine/CheckDeedsOfficeStatus");
目标是实现这一目标:
POST /windeedengine3/client.asmx HTTP/1.1
Host: server.windeed.co.za
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://server.windeed.co.za/windeedengine/CheckDeedsOfficeStatus"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<WinDeedCredentials xmlns="http://server.windeed.co.za/windeedengine/">
<Username>string</Username>
<Password>string</Password>
<Company>string</Company>
<Requester>string</Requester>
</WinDeedCredentials>
</soap:Header>
<soap:Body>
<CheckDeedsOfficeStatus xmlns="http://server.windeed.co.za/windeedengine/" />
</soap:Body>
</soap:Envelope>
当前,由于缺少身份验证详细信息,所以我被告知我没有正确进行身份验证。
预期结果是来自服务器的正确响应:联机或脱机。正确的方法是什么?
我什至忘了重新讨论这个话题。问题已解决,但我没有立即提供详细信息,需要旅行以访问它们。
在进行Web服务调用之前=> sc.callWebService,重要的是注入SOAP标头详细信息。我将SOAP UI中的xml标头注入了代码中。中提琴!有效。以前,MarshallSendAndReceive方法仅与SoapActionCallback方法一起使用。如果我还记得,我将其修改为在进行Web服务调用之前使用WebServiceMessageCallback和xml标头的显式定义。