如何解决org.springframework.ws.soap.client.SoapFaultClientException 使用 Spring WS WebServiceTemplate 时
面临以下问题:我有一个 wsdl 文件,用于通过 SOAP 传达我的服务和 CRM。请求的正文是通过从 wsdl 配置 java 文件来填充的。但是头必须手动写入。我正在使用以下技术发送我的请求:
final Map<String,String> gateValues = new HashMap<>();
final String username = Objects.requireNonNull(config).getSoapconf().getUsername();
final String password = Objects.requireNonNull(config).getSoapconf().getpassword();
final String webServices = Objects.requireNonNull(config).getSoapconf().getSessionType();
gateValues.put("Usernametoken",username);
gateValues.put("PasswordText",password);
gateValues.put("SessionType",webServices);
GetInput rq = new Getinput();
rq.setMyParam(param);
log.info("Requesting {}",param);
try {
Getoutput client = (Getoutput) getwebservicetemplate().marshalSendAndReceive(rq,(message) -> {
if (message instanceof saajSoapMessage) {
saajSoapMessage saajSoapMessage = (saajSoapMessage) message;
SOAPMessage soapMessage = saajSoapMessage.getsaajMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
try {
SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
SOAPHeader soapHeader = soapEnvelope.getHeader();
gateValues.forEach((key,value) -> {
try {
Name headerElementName = soapEnvelope.createName(
key,PREFIX,NAMESPACE
);
System.out.println(headerElementName.getLocalName() + "\n" + headerElementName.getQualifiedname());
SOAPHeaderElement soapHeaderElement = soapHeader.addHeaderElement(headerElementName);
soapHeaderElement.setTextContent(value);
} catch (SOAPException e) {
// error handling
}
});
soapMessage.saveChanges();
soapMessage.writeto(System.out);
System.out.println(soapEnvelope.getHeader());
} catch (SOAPException e) {
System.out.println();
}
}
});
return client;
} catch (Exception e) {
ExceptionUtils.getStackTrace(e);
}
已经添加了最后一个捕获以查找错误。从 webservicetemplate 类的 doSendAndReceive 方法中删除错误 org.springframework.ws.soap.client.soapFaultClientException。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<PasswordText xmlns="http://***.com/services">myPass</PasswordText>
<SessionType xmlns="http://****.com/services">mySessionType</SessionType>
<Usernametoken xmlns="http://***.com/services">myUsName</Usernametoken>
</SOAP-ENV:Header>
<SOAP-ENV:Body><ns2:Get_Input xmlns:ns2="http://***.com/UI" xmlns:ns3="http://***.com/xml/%20External">
<ns2:param>238068014416</ns2:param>
</ns2:Get_Input>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
缺少什么?为什么 SOAPUI - 它是有效的。客户端请求是按照来自 Add SoapHeader to org.springframework.ws.WebServiceMessage
的最后一个回答的示例进行的版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。