2016-07-04 32 views
1

我是Spring Integration的新手,我试图使用Java DSL配置来指定一个使用具有@Aggregator的类GroupPublishAggregator的聚合消息的流,@ReleaseStrategy ,和@CorrelationStrategy注解。尝试通过@CorrelationStrategy注释使用bean时,出现“空关联不允许”

我怀疑我在配置中犯了一个新手错误,因为当聚合器收到消息时我看到的是“java.lang.IllegalStateException:不允许空关联,也许CorrelationStrategy失败?如果我调试框架代码,我发现AbstractCorrelatingMessageHandler正在调用默认的org.springframework.integration.aggregator.HeaderAttributeCorrelationStrategy而不是我的策略。

配置代码如下:

@Bean 
public GroupPublishAggregator publishAggregator() { 
    // This class has methods with @Aggregator, @ReleaseStrategy, 
    // and @CorrelationStrategy annotations. 
    return new GroupPublishAggregator(); 
} 

@Bean 
public IntegrationFlow publish() { 
    return IntegrationFlows.from(this.inputChannel()) 
      .wireTap("monitor") 
      .aggregate(new Consumer<AggregatorSpec>() { 
       @Override 
       public void accept(AggregatorSpec aggregatorSpec) { 
        aggregatorSpec.processor(publishAggregator(), null); 
       } 
      }) 
      .get(); 
} 

回答

0

这是一个错误。将尽快修复:https://github.com/spring-projects/spring-integration-java-dsl/issues/93

同时为你的解决方法是像使用CorrelationStrategyFactoryBeanReleaseStrategyFactoryBean@Bean,并分别与特定correlationStrategy(CorrelationStrategy correlationStrategy)releaseStrategy(ReleaseStrategy releaseStrategy)

对于那些FactoryBean s,我们不会拨打afterPropertiesSet()的问题。

+0

感谢您确认它应该工作。我通过回退到XML配置并指定策略引用和方法来解决此问题。 – nerff

+0

我已经验证了您的解决方法的一个版本,现在可以在没有XML配置的情况下运行,谢谢。我的'@ Bean'方法创建一个'CorrelationStrategyFactoryBean',用我的策略调用'setTarget()'方法,调用'afterPropertiesSet()'方法强制默认策略被覆盖,并返回getObject的结果()'方法。 – nerff

相关问题