java spring ws:webServiceTemplate.MarshalSendReceive在发送前对文档进行签名
我试图在发送文档请求之前对其进行签名,但在检索请求文档时 通过java spring ws:webServiceTemplate.MarshalSendReceive在发送前对文档进行签名,java,spring,soap,marshalling,ws,Java,Spring,Soap,Marshalling,Ws,我试图在发送文档请求之前对其进行签名,但在检索请求文档时 通过Document doc=soapMessage.getSOAPPart().getEnvelope().getOwnerDocument()并将其传递给sign方法,该方法将对其进行签名并使用签名节点更改文档,我得到的响应是org.springframework.ws.soap.client.SoapFaultClientException:验证失败,摘要错误。 但是,当我用断点调试代码时,我在certificationServic
Document doc=soapMessage.getSOAPPart().getEnvelope().getOwnerDocument()
并将其传递给sign方法,该方法将对其进行签名并使用签名节点更改文档,我得到的响应是org.springframework.ws.soap.client.SoapFaultClientException:验证失败,摘要错误。
但是,当我用断点调试代码时,我在certificationService.signDocument(doc,actionName,“Request”,company)之前的任何一行中的方法doWithMessage
(在下面的代码段中用lambda表达式替换)中设置断点代码>,我收到了预期的正确响应
我是否遗漏了什么,因为我在网上找不到类似的问题。我被困在这里
下面是代码片段:
return webServiceTemplate.marshalSendAndReceive(
config.getWebServiceUrl(),
req,
message -> {
try {
SaajSoapMessage saajSoapMessage = (SaajSoapMessage) message;
SOAPMessage soapMessage = saajSoapMessage.getSaajMessage();
Document doc = soapMessage.getSOAPPart().getEnvelope().getOwnerDocument();
saajSoapMessage.setSoapAction(SoapClientConfig.ACTION_BASE_URL + actionName);
certificationService.signDocument(doc, actionName, "Request", company);
soapMessage.saveChanges();
} catch (Exception e) {
e.printStackTrace();
}
});
问题解决了。我使用的是Java12,我不知道为什么会出现这个问题,但改用Java8可以解决这个问题