Spring integration IntegrationFlowDefinition.aggregate不';t工作:也许相关策略失败了?

Spring integration IntegrationFlowDefinition.aggregate不';t工作:也许相关策略失败了?,spring-integration,spring-integration-dsl,Spring Integration,Spring Integration Dsl,错误消息:由以下原因引起:java.lang.IllegalStateException:不允许空相关。也许相关策略失败了 我的实施, @Bean public IntegrationFlow start() { return IntegrationFlows .from("getOrders") .split() .publishSubscribeChannel(c

错误消息:由以下原因引起:java.lang.IllegalStateException:不允许空相关。也许相关策略失败了

我的实施,

    @Bean
    public IntegrationFlow start() {
        return IntegrationFlows
                .from("getOrders")
                .split()
                .publishSubscribeChannel(c -> c.subscribe(s -> s.channel(q -> q.queue(1))
                        .<Order, Message<?>>transform(p -> MessageBuilder.withPayload(new Item(p.getItems())).setHeader(ORDERID, p.getOrderId()).build())
                        .split(Item.class, Item::getItems)
                        .transform() // let's assume, an object created for each item, let's say ItemProperty to the object.
                                     //  Transform returns message; MessageBuilder.withPayload(createItemProperty(getItemName, getItemId)).build();
                        .aggregate() // so, here aggregate method needs to aggregate ItemProperties.
                        .handle() // handler gets List<ItemProperty> as an input.
      ))
      .get();
    }

@Bean
公共集成流开始(){
返回积分流
.来自(“获取订单”)
.split()
.publishSubscribeChannel(c->c.subscribe(s->s.channel)(q->q.queue(1))

您缺少一个事实,
transformer
是一种按原样处理整个消息的端点。如果您自己创建消息,它不会修改它。 因此,使用
MessageBuilder.withPayload(createItemProperty(getItemName,getItemId)).build();
在拆分器之后,您只是错过了重要的序列详细信息标题。因此,拆分器之后的聚合器不知道如何处理您的消息,因为您将其配置为默认的关联策略,但在消息中不提供相应的标题

从技术上讲,我看不出手动创建消息的理由:简单的
返回createItemProperty(getItemName,getItemId);
应该足够了。框架将代表您创建消息,并复制相应的请求消息头

如果您仍然认为您需要在该转换中创建消息,那么您需要在该代码> MessageBuilder > /代码>上从请求消息中考虑<代码> > /代码>,以携带所需的序列细节标题。