Тест Junit для пружины с перехватчиком конечной точки
Буду признателен за примеры кода, как вызывать интрцептор конечной точки SpringWS из тестового класса Junit. В частности, о том, как подготовить контекст сообщения SOAP и объект конечной точки. Сообщение SOAP в контексте должно иметь собственный заголовок SOAP.
Что-то вроде....
public class MyInterceptorTest
private static String "... my XML SOAP test message ...";
@Test
public testMyInterceptor() {
myMessageContext = ... Build a MessageContext with the XML message string;
myEndPointObject = ... Build an endpoint object;
boolean result = MyInterceptorClass.handleRequest(myMessageContext, myEndPointObject);
... Check results;
}
Любые примеры будут оценены.
2 ответа
MessageContext
может быть создан путем создания экземпляра DefaultMessageContext
объект. Запрос WebServiceMessage
может быть создан с использованием класса поддержки теста PayloadMessageCreator
, но это появилось только в Spring-WS 2.x.
Объект конечной точки может быть чем угодно - это зависит от того, что с ним делает ваш перехватчик. Если он на самом деле не использует, то вы можете просто передать null
,
У меня была та же проблема, и я смог ее частично решить, используя предложение @ skaffman.
По сути, у меня был собственный EndpointInterceptor, который я хотел протестировать с реальными данными, чтобы я знал, что у меня все правильно.
Вам нужно будет обновить зависимости spring-ws-test и другие spring-ws до версии 2.0 или выше. В итоге я использовал что-то отличное от PayloadMessageCreator.
final Source payload = new StreamSource(new StringReader(soapPayload));
SaajSoapMessageFactory saajSoapMessageFactory = new SaajSoapMessageFactory(MessageFactory.newInstance());
WebServiceMessage requestPayload = new SoapEnvelopeMessageCreator(payload).createMessage(saajSoapMessageFactory);
MessageContext messageContext = new DefaultMessageContext(requestPayload, saajSoapMessageFactory);
soapPayload
является строковым значением всего мыльного конверта.
Что-то похожее на это:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
...fill in your custom headers here
</soapenv:Header>
<soapenv:Body><someRequest>...</someRequest></soapenv:Body>
</soapenv:Envelope>
Вам, очевидно, потребуется заполнить полезную нагрузку вашего запроса, любые пространства имен, а также свои пользовательские заголовки.
Я установил объект конечной точки в нуль, поскольку я ничего не делал с ним как часть моего перехватчика.