Spring集成|使用Java配置的Header Enricher

时间:2015-04-24 14:11:27

标签: java spring spring-integration

Java配置 等同于以下标题扩展器的内容: -

<!-- Business Entity Header Enricher -->
<int:header-enricher 
    id="businessEntityHeaderEnricherComponent"
    should-skip-nulls="false" 
    output-channel="notificationPreferencesInputChannel"
    input-channel="newUserCreatedChannel">

    <!-- Tenant -->
    <int:header name="tenant" 
        <!-- !! HEADER ENRICHMENT ID DONE BY SPRING MANAGED BEAN !! -->
        ref="businessEntityPayloadHeaderEnricher"
        method="extractTenant" />       


</int:header-enricher>

我有一个Spring托管的@Bean,其方法(返回Map)应该注意丰富Message标头。

我知道我也可以使用 spring-integration-dsl ,但截至目前我需要坚持使用Java配置。

例如,这就是我使用Java配置来定义服务激活器的方法: -

    @Bean
    @ServiceActivator(requiresReply = "false", inputChannel = "lifeCycleRouterChannel")
    public InvoiceDelinquencyServiceActivator serviceActivator() {
        return new InvoiceDelinquencyServiceActivator();
    }

定义Header Enricher的等效方法是什么? 无法找到任何示例/参考。

感谢。

2 个答案:

答案 0 :(得分:2)

HeaderEnricher implements Transformer,所以你可以这样做:

@Bean
@Transformer(inputChannel = "enrichChannel", outputChannel = "processChannel")
public HeaderEnricher headerEnricher() {
    HeaderEnricher headerEnricher = new HeaderEnricher (...);
    ....
    return headerEnricher;
}

答案 1 :(得分:0)

我有类似的需求,并且在 Groovy 下面的代码帮助我使用bean /方法调用添加了标头。

@Bean
public HeaderEnricher authTokenHeaderEnricher() {
    new HeaderEnricher(["AUTH_TOKEN":
                                new MessageProcessingHeaderValueMessageProcessor(
                                        new BeanNameMessageProcessor<Object>('authTokenProvider', 'fetchAuthToken')
                                )
                ]
    )
}

@Bean
IntegrationFlow readyForDispatchFlow() {
    IntegrationFlows
            .from("inputChannel")
            .transform(authTokenHeaderEnricher())
            .channel("outputChannel")
            .get()
}