Тест 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>

Вам, очевидно, потребуется заполнить полезную нагрузку вашего запроса, любые пространства имен, а также свои пользовательские заголовки.

Я установил объект конечной точки в нуль, поскольку я ничего не делал с ним как часть моего перехватчика.

Другие вопросы по тегам