Мне нужно отправить информацию о доступе и местоположении в заголовке запроса 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
за это время.