![](/img/trans.png)
[英]Spring Integration http-outbound-gateway for xml web service not returning response data
[英]Mock spring integration outbound web service call
我有带有出站Soap Web服务呼叫的Spring集成项目。
我有一个集成测试用例,用于测试项目的输入和输出,其中从活动mq队列中读取输入并将输出发送到数据库列。
SOAP Web服务返回此写入数据库的值。
以下是网络服务电话
<int:chain id="soapcall" input-channel="soapChannel">
<int:service-activator ref="convertData" />
<int-ws:outbound-gateway uri="${url}"
</int-ws:outbound-gateway>
</int:chain>
如何避免调用实际的实时Web服务,而是模拟Web服务调用并返回静态响应?
给出链和网关id
属性:
<int:chain id="soapcall" input-channel="soapChannel">
<int:service-activator ref="convertData" />
<int-ws:outbound-gateway id="wsgw" uri="${url}"
</int-ws:outbound-gateway>
</int:chain>
然后,可以使用带有@Qualifier("soapcall$child.wsgw.handler")
的AbstractWebServiceOutboundGateway
@Autowire
测试。
然后,在测试中,设置setMessageSender(myMockWebServiceMessageSender)
。
使用Spring Boot和Mockito,我能够使用静态响应来模拟肥皂出站网关:
@SpringBootTest
@RunWith(SpringRunner.class)
public class SoapGatewayTest {
private static final String XML_REPONSE = "<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"><S:Body>"
// enrich your answer here
// ...
+ "</S:Body></S:Envelope>";
@Autowired
@Qualifier("soapcall$child.wsgw.handler")
private AbstractWebServiceOutboundGateway simpleWebServiceOutboundGateway;
@Mock
private WebServiceMessageSender messageSender;
@Mock
private WebServiceConnection wsConnection;
@Test
public void myMethodTest() {
// mocking the WS SOAP gateway
when(this.messageSender.createConnection(any(URI.class))).thenReturn(this.wsConnection);
when(this.messageSender.supports(any(URI.class))).thenReturn(true);
// the gateway will always respond with a static response
doAnswer(new Answer<WebServiceMessage>() {
public WebServiceMessage answer(InvocationOnMock invocation) throws InvalidXmlException, IOException {
WebServiceMessageFactory factory = invocation.getArgumentAt(0, WebServiceMessageFactory.class);
return factory.createWebServiceMessage(new ByteArrayInputStream(XML_REPONSE.getBytes()));
}
}).when(this.wsConnection).receive(any(WebServiceMessageFactory.class));
this.simpleWebServiceOutboundGateway.setMessageSender(this.messageSender);
// run the code to be tested here
// ...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.