spring integration:自定义标头,用于将标头值记录到数据库中

时间:2013-08-05 22:20:43

标签: spring-integration

我希望有一个自定义的标头扩充器,它可以添加标头值并将它们添加到标头中,并将它们记录在数据库中。我试图创建一个自定义弹簧标签说:db-recording-header-enricher并使用它代替header-enricher标签,无论我有兴趣将标头记录到数据库。

到目前为止,这就是我所拥有的:

我有自定义spring XML名称空间,并且正确配置了自定义元素db-recorder-header-enricher。我有一个测试spring集成xml,我用它来测试解析器是否正常运行。测试正在加载测试XML,除了我想使用下面的自定义解析器而不是HeaderEnricher,它默认为变换器。

db-recording-header-enricher的处理器如下所示:

DbRecorderHeaderEnricherParser implements BeanDefinitionParser {
   @Override
   public BeanDefinition parse(Element element, ParserContext parserContext) {
       BeanDefinition beanDefinition = new StandardHeaderEnricherParser().parse(element, parserContext);
       // Set the header Enricher processor to be my custom processor
       // beanDefinition.setHeaderEnricherProcessor(dbRecordingHeaderEnricher);
       return beanDefinition;
    }
}

我面临的问题是:

基于上面的解析器定义,如果我使用StandardHeaderEnricherParser来解析我的xml,我找不到一种方法将DbRecordingHeaderEnricher关联为转换器来解析标头扩充器。即使我扩展了StandardHeaderEnricherParser,下面的方法也是最终的,所以我似乎无法将其自定义解析器用于转换目的。

@Override
protected final String getTransformerClassName() {
    return HeaderEnricher.class.getName();
}

我想在我的自定义解析器中做的就是关联我的自定义头文件richher(它扩展了HeaderEnricher类),用于解析头文件,并为添加的头文件创建记录到数据库中。如果我不可能按照这种方式思考它,那么还有哪些其他选择呢?我可以在变压器上使用AOP /建议吗?

1 个答案:

答案 0 :(得分:1)

这是相当先进的。您将需要一个模式,一个名称空间处理程序,它将解析器与名称空间元素和解析器本身相关联。

使用<transformer/>可能更简单,只需引用添加标题的bean(并存储它们)。

如果您想学习如何编写自己的命名空间;一个开始的好地方是STS project templates,它将为您创建所有的锅炉板。

编辑:

回应您的更新......

由于它仍然是一个bean定义,而且还不是bean,你只需更改beanClassName属性......

BeanDefinition beanDefinition = new StandardHeaderEnricherParser().parse(element, parserContext);
beanDefinition.setBeanClassName(Foo.class.getName());