Я новичок в Java и следую этому руководству https://spring.io/guides/gs/consuming-web-service/, чтобы вызвать сервис Soap (.net asmx) из Java Api. Когда я пытаюсь добавить заголовки в Soap Request, он возвращает исключение Java Null Pointer. Если я не предоставлю HeaderComposingCallback, он сможет вызвать службу.
Позвоните на веб-сервис:
ValidateResponse response = (ValidateResponse) getWebServiceTemplate().marshalSendAndReceive(
"http://somewhere.com/service.asmx",
request, new HeaderComposingCallback());
Реализация WebServiceMessageCallback:
public class HeaderComposingCallback implements WebServiceMessageCallback {
private PrincipalIdentity prinIdentity;
private ProductIdentity prodIdentity;
public HeaderComposingCallback() {
}
@Override
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
((SoapMessage) message).setSoapAction("Validate");
SoapHeader soapHeader = ((SoapMessage) message).getSoapHeader();
try {
prinIdentity.setRequestorId("value");
..
prodIdentity.setAppId("value");
..
JAXBContext context = JAXBContext.newInstance(PrincipalIdentity.class, ProductIdentityHeader.class);
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(prinIdentity, soapHeader.getResult());
marshaller.marshal(prodIdentity, soapHeader.getResult());
} catch (JAXBException e) {
throw new IOException("error while marshalling.");
}
}
}