SimpleHeaderEnricherParser now accepts a String array of attribute names to be treated as bean references instead of literal values.
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user