SimpleHeaderEnricherParser now accepts a String array of attribute names to be treated as bean references instead of literal values.

This commit is contained in:
Mark Fisher
2008-10-13 22:41:43 +00:00
parent bc4343ce3e
commit 847a532257

View File

@@ -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<String> 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.<String>emptyList();
}
@@ -65,14 +76,20 @@ public class SimpleHeaderEnricherParser extends AbstractTransformerParser {
}
@Override
@SuppressWarnings("unchecked")
protected void parseTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
Map<String, Object> headersToAdd = new HashMap<String, Object>();
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);