From 847a5322576dbba506ba4ed639254978c9ceb64c Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Mon, 13 Oct 2008 22:41:43 +0000 Subject: [PATCH] SimpleHeaderEnricherParser now accepts a String array of attribute names to be treated as bean references instead of literal values. --- .../xml/SimpleHeaderEnricherParser.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SimpleHeaderEnricherParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SimpleHeaderEnricherParser.java index 6d7ae4daae..52479da8cd 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SimpleHeaderEnricherParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SimpleHeaderEnricherParser.java @@ -16,14 +16,17 @@ package org.springframework.integration.config.xml; -import java.util.HashMap; -import java.util.Map; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; +import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.ManagedMap; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.transformer.HeaderEnricher; import org.springframework.integration.transformer.Transformer; @@ -41,13 +44,21 @@ public class SimpleHeaderEnricherParser extends AbstractTransformerParser { private final String prefix; + private List referenceAttributes; + public SimpleHeaderEnricherParser() { - this(null); + this(null, null); } public SimpleHeaderEnricherParser(String prefix) { + this(prefix, null); + } + + public SimpleHeaderEnricherParser(String prefix, String[] referenceAttributes) { this.prefix = prefix; + this.referenceAttributes = (referenceAttributes != null) + ? Arrays.asList(referenceAttributes) : Collections.emptyList(); } @@ -65,14 +76,20 @@ public class SimpleHeaderEnricherParser extends AbstractTransformerParser { } @Override + @SuppressWarnings("unchecked") protected void parseTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - Map headersToAdd = new HashMap(); + ManagedMap headersToAdd = new ManagedMap(); NamedNodeMap nodeMap = element.getAttributes(); for (int i = 0; i < nodeMap.getLength(); i++) { Node node = nodeMap.item(i); String name = node.getNodeName(); if (this.isEligibleHeaderName(name)) { - headersToAdd.put(name, node.getNodeValue()); + if (this.referenceAttributes.contains(name)) { + headersToAdd.put(name, new RuntimeBeanReference(node.getNodeValue())); + } + else { + headersToAdd.put(name, node.getNodeValue()); + } } } builder.addConstructorArgValue(headersToAdd);