Junit测试弹簧ws端点拦截器

时间:2011-03-29 11:01:12

标签: junit spring-ws

非常感谢如何从Junit测试类调用SpringWS端点intrceptor的任何代码示例。特别是关于如何准备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 个答案:

答案 0 :(得分:1)

可以通过实例化MessageContext对象来创建DefaultMessageContext。请求WebServiceMessage可以使用测试支持类PayloadMessageCreator创建,但这只出现在Spring-WS 2.x中。

端点对象可以是任何东西 - 它取决于你的拦截器对它做什么。如果它实际上没有使用它,那么你可以传入null

答案 1 :(得分:1)

我遇到了同样的问题,并且能够使用@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>

您显然需要填写请求有效内容,任何名称空间以及自定义标头。

我将端点对象设置为null,因为我没有使用它作为拦截器的一部分。