永远不会调用Spring Integration WebFlux.outboundGateway

时间:2017-12-05 20:32:58

标签: java spring spring-integration

我有一个简单的流程:

return IntegrationFlows.from(ARTIFACTORY_INPUT_CHANNEL)
    .handle(WebFlux.outboundGateway(url)
            .expectedResponseType(new ParameterizedTypeReference<Mono<ArtifactorySearchResponse>>() {
            })
            .httpMethod(GET)
            .encodeUri(true))
    .transform(new ArtifactorySearchResponseTransformer())
    .channel(ARTIFACTORY_OUTPUT_CHANNEL)
    .get();

一个简单的测试:

outputChannel.subscribe(mockMessageHandler);
inputChannel.send(new GenericMessage<>("test"));

verify(mockMessageHandler).handleMessage(argThat(m -> {
    Object payload = m.getPayload();

    return payload instanceof String
            && payload.toString().equals("businesses.20171203.json.gz");
}));

因为永远不会调用mockMessageHandler而导致失败。我看了看,看了看,但是测试WebFlux.outboundGateway完全没有例子。 Spring集成确实有很多例子,但这些例子几乎没用,因为它们

  1. 是XML格式(是的,2005年正在调用)
  2. 请勿涵盖WebFlux

1 个答案:

答案 0 :(得分:1)

与往常一样,查看Spring源代码,如果经常比等待帮助更有效率。事实证明,我错过了一些事情:

  1. expectedResponseType不应该是被动的发布者,只是我的DTO /域对象或其中的一些集合。
  2. HTTP调用失败,但错误没有显示,因为我没有注意错误频道,也没有为我的应用配置一个错误。我假设至少在测试期间,Spring会记录异常,但事实并非如此。我正在考虑创建一个票证,以便为测试启用简单的控制台日志记录错误处理程序。
  3. 我还需要提供超时以允许HTTP调用完成。这是使用Mockito VerificationAfterDelay
  4. 完成的