java spring ws: webServiceTemplate.marshalSendAndReceive подписать документ перед отправкой - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь подписать запрос документа перед его отправкой, но при получении документа запроса через Document doc = soapMessage.getSOAPPart().getEnvelope().getOwnerDocument(); и передаче его методу подписи, который подпишет его и изменит документ с узлами подписи, я получаю ответ org.springframework.ws.soap.client.SoapFaultClientException: Validation failed with digest wrong.

Но, когда я отлаживаю код с точками останова и устанавливаю точку останова внутри метода doWithMessage (она заменяется лямбда-выражением во фрагменте ниже) в любой строке до certificationService.signDocument(doc, actionName, "Request", company);, я получаю правильный ответ, как и ожидалось.

Я что-то упустил или что-то, потому что я не могу найти аналогичные проблемы в Интернете. Я застрял здесь ...

фрагмент кода ниже:

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();
                }
            });

1 Ответ

0 голосов
/ 12 октября 2019

Проблема решена. Я использовал Java 12, я не знаю, почему эта проблема возникла, но переход на Java 8 решить ее.

...