org.springframework.ws.soap.client.SoapFaultClientException при использовании Spring WS WebServiceTemplate

Столкнулся со следующей проблемой: у меня есть wsdl файл для общения моего сервиса и CRM посредством протокола SOAP. Body запроса заполняется через конфигурирование файлов java из wsdl. А вот header необходимо прописать вручную. Я использую следующую технологию для отправки моего запроса:

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

`

Последний catch был добавлен уже для поиска ошибки. Падает с ошибкой org.springframework.ws.soap.client.SoapFaultClientException из метода doSendAndReceive класса WebServiceTemplate.

При вызове soapMessage.writeTo(System.out); я получаю в консоль валидный xml-запрос(копирую его и отправляю через SOAPUI - всё работает.

`

<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 - он валиден. Запрос клиента сделан по примеру последнего ответа из https://stackoverflow.com/questions/2274378/add-soapheader-to-org-springframework-ws-webservicemessage


Ответы (0 шт):