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可以解决这个问题