Spring Integration Java DSL - Konfiguration des Aggregators

Ich habe einen sehr einfachen Integrationsablauf, bei dem eine REST-Anforderung über einen Publish-Subscribe-Kanal an zwei Anbieter weitergeleitet wird. Das Ergebnis beider RESTful-Services wird dann in einem einzigen Array zusammengefasst. Die Skizze des Integrationsablaufs sieht wie folgt aus:

@Bean
IntegrationFlow flow() throws Exception {
    return IntegrationFlows.from("inputChannel")
            .publishSubscribeChannel(s -> s.applySequence(true)
                .subscribe(f -> f
                        .handle(Http.outboundGateway("http://provider1.com/...")
                                .httpMethod(HttpMethod.GET)
                                .expectedResponseType(ItemDTO[].class))
                ).subscribe(f -> f
                        .handle(Http.outboundGateway("http://provider2.com/...")
                                .httpMethod(HttpMethod.GET)
                                .expectedResponseType(ItemDTO[].class)
                        )
                )
            )
            .aggregate()
            .get();
}

Beim Ausführen meines Codes enthält das resultierende Array jedoch nur die Elemente, die von einem der RESTful-Services zurückgegeben wurden. Fehlt ein Konfigurationsschritt?

AKTUALISIERE

Die folgende Version entspricht der vollständigen Lösung unter Berücksichtigung der Kommentare von Artem.

@Bean
IntegrationFlow flow() throws Exception {
    return IntegrationFlows.from("inputChannel-scatter")
            .publishSubscribeChannel(s -> s.applySequence(true)
                .subscribe(f -> f
                        .handle(Http.outboundGateway("http://provider1.com/...")
                                .httpMethod(HttpMethod.GET)
                                .expectedResponseType(ItemDTO[].class))
                        .channel("inputChannel-gather"))
                .subscribe(f -> f
                        .handle(Http.outboundGateway("http://provider2.com/...")
                                .httpMethod(HttpMethod.GET)
                                .expectedResponseType(ItemDTO[].class))
                        .channel("inputChannel-gather")))
            .get();
}

@Bean
IntegrationFlow gatherFlow() {
    return IntegrationFlows.from("inputChannel-gather")
            .aggregate(a -> a.outputProcessor(g ->  new GenericMessage<ItemDTO[]>(
                        g.getMessages().stream()
                                .flatMap(m -> Arrays.stream((ItemDTO[]) m.getPayload()))
                                .collect(Collectors.toList()).toArray(new ItemDTO[0]))))
            .get();
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage