Мне требуется протестировать Soap-сервер с указанным SoapAction и Message.
public class SoapActionCreator implements RequestCreator {
private final Source payload;
private final String soapAction;
public SoapActionCreator(Source payload, String soapAction) {
this.payload = payload;
this.soapAction = soapAction;
}
@Override
public WebServiceMessage createRequest(WebServiceMessageFactory webServiceMessageFactory) throws IOException {
WebServiceMessage webServiceMessage =
new SoapEnvelopeMessageCreator(payload).createMessage(webServiceMessageFactory);
SoapMessage soapMessage = (SoapMessage) webServiceMessage;
soapMessage.setSoapAction(soapAction);
return webServiceMessage;
}
}
В методе теста:
mockClient = MockWebServiceClient.createClient(applicationContext);
Source requestPayload = new StringSource(
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n"
+ " <soap:Body>\r\n" + */" <Login xmlns=\"http://www.nightfreight.com/webservices\">\r\n"
+ " <username>local_user</username>\r\n"
+ " </Login>\r\n"
+ " </soap:Body>\r\n" + "</soap:Envelope>");
mockClient.sendRequest(new SoapActionCreator(requestPayload,
soapAction)).andExpect.....
Получение исключения NullPointerException при вызове TestMethod, поскольку параметр Payload (параметр, отмеченный @RequestPayload в вызове метода)ноль.При перехвате: messageContext.getRequest (). GetPayloadSource () имеет значение «null»
Но при фактическом вызове SoapService: messageContext.getRequest (). GetPayloadSource () - это javax.xml.transform.dom.DOMSource @1237e0be
Если я использую PayloadMessageCreator вместо SoapEnvelopeMessageCreator после удаления части сообщения в виде мыльного конверта, это снова работает.Мне потребуется иметь собственное пространство имен, а также заголовки, и, следовательно, PayloadMessageCreator в этом случае не будет полезен.