Правильный способ отправки информации заголовка в запросе SOAP - PullRequest
0 голосов
/ 27 апреля 2020

Мне нужно отправить информацию о доступе и местоположении в заголовке запроса SOAP. Я прочитал пример, который изначально мне нужно указать в файле application.properties следующим образом:

soap.auth.header=<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsse:Username>%(loginuser)</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">%(loginpass)</wsse:Password></wsse:UsernameToken></wsse:Security>
soap.auth.username=testuser
soap.auth.password=testpass

Соответствующий класс Java будет:

public GetBankResponseType getBank(String url, Object requestPayload){
    WebServiceTemplate webServiceTemplate = getWebServiceTemplate();
    JAXBElement res = null;
    try {
        res = (JAXBElement) webServiceTemplate.marshalSendAndReceive(url, requestPayload, new WebServiceMessageCallback() {

            @Override
            public void doWithMessage(WebServiceMessage message) {
                try {
                    SoapHeader soapHeader = ((SoapMessage) message).getSoapHeader();
                    Map mapRequest = new HashMap();

                    mapRequest.put("loginuser", environment.getProperty("soap.auth.username"));
                    mapRequest.put("loginpass", environment.getProperty("soap.auth.password"));
                    StringSubstitutor substitutor = new StringSubstitutor(mapRequest, "%(", ")");
                    String finalXMLRequest = substitutor.replace(environment.getProperty("soap.auth.header"));
                    StringSource headerSource = new StringSource(finalXMLRequest);
                    Transformer transformer = TransformerFactory.newInstance().newTransformer();
                    transformer.transform(headerSource, soapHeader.getResult());
                    logger.info("Marshalling of SOAP header success.");
                } catch (Exception e) {
                    logger.error("error during marshalling of the SOAP headers", e);
                }
            }
        });
    }catch (SoapFaultClientException e){
        logger.error("Error while invoking session service : " + e.getMessage());
        return null;
    }
    return res.getValue();
}

Надеюсь, я смогу изменить код Java, чтобы сделать его правильно. Скажем, мой Access Tocken равен xzxzxzx, а Location Tocken равен xcxcxcxc, как мне изменить soap.auth.header, чтобы сделать вызов с использованием правильного заголовка?

Я сам попробовал и получил NullPointerException за это время.

...