Repository: camel Updated Branches: refs/heads/master b7df95775 -> 5fa7a8a4b
HeaderSelectorProducer to support suppliers for header key and default value Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5fa7a8a4 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5fa7a8a4 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5fa7a8a4 Branch: refs/heads/master Commit: 5fa7a8a4b23b51a9f7226adf83f322600103dc32 Parents: b7df957 Author: lburgazzoli <lburgazz...@gmail.com> Authored: Wed Apr 12 11:11:37 2017 +0200 Committer: lburgazzoli <lburgazz...@gmail.com> Committed: Wed Apr 12 11:11:45 2017 +0200 ---------------------------------------------------------------------- .../camel/impl/HeaderSelectorProducer.java | 40 +++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/5fa7a8a4/camel-core/src/main/java/org/apache/camel/impl/HeaderSelectorProducer.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/HeaderSelectorProducer.java b/camel-core/src/main/java/org/apache/camel/impl/HeaderSelectorProducer.java index 09d59c6..f91f032 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/HeaderSelectorProducer.java +++ b/camel-core/src/main/java/org/apache/camel/impl/HeaderSelectorProducer.java @@ -20,6 +20,7 @@ import java.lang.reflect.Method; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.function.Supplier; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; @@ -28,6 +29,7 @@ import org.apache.camel.InvokeOnHeaders; import org.apache.camel.Message; import org.apache.camel.NoSuchHeaderException; import org.apache.camel.Processor; +import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,28 +40,43 @@ import org.slf4j.LoggerFactory; public class HeaderSelectorProducer extends BaseSelectorProducer { private static final Logger LOGGER = LoggerFactory.getLogger(HeaderSelectorProducer.class); - private final String header; - private final String defaultHeaderValue; + private final Supplier<String> headerSupplier; + private final Supplier<String> defaultHeaderValueSupplier; private final Object target; private Map<String, Processor> handlers; + public HeaderSelectorProducer(Endpoint endpoint, Supplier<String> headerSupplier) { + this(endpoint, headerSupplier, () -> null, null); + } public HeaderSelectorProducer(Endpoint endpoint, String header) { - this(endpoint, header, null, null); + this(endpoint, () -> header, () -> null, null); } public HeaderSelectorProducer(Endpoint endpoint, String header, Object target) { - this(endpoint, header, null, target); + this(endpoint, () -> header, () -> null, target); + } + + public HeaderSelectorProducer(Endpoint endpoint, Supplier<String> headerSupplier, Object target) { + this(endpoint, headerSupplier, () -> null, target); } public HeaderSelectorProducer(Endpoint endpoint, String header, String defaultHeaderValue) { - this(endpoint, header, defaultHeaderValue, null); + this(endpoint, () -> header, () -> defaultHeaderValue, null); + } + + public HeaderSelectorProducer(Endpoint endpoint, Supplier<String> headerSupplier, Supplier<String> defaultHeaderValueSupplier) { + this(endpoint, headerSupplier, defaultHeaderValueSupplier, null); } public HeaderSelectorProducer(Endpoint endpoint, String header, String defaultHeaderValue, Object target) { + this(endpoint, () -> header, () -> defaultHeaderValue, target); + } + + public HeaderSelectorProducer(Endpoint endpoint, Supplier<String> headerSupplier, Supplier<String> defaultHeaderValueSupplier, Object target) { super(endpoint); - this.header = header; - this.defaultHeaderValue = defaultHeaderValue; + this.headerSupplier = ObjectHelper.notNull(headerSupplier, "headerSupplier"); + this.defaultHeaderValueSupplier = ObjectHelper.notNull(defaultHeaderValueSupplier, "defaultHeaderValueSupplier"); this.target = target != null ? target : this; this.handlers = new HashMap<>(); } @@ -84,7 +101,12 @@ public class HeaderSelectorProducer extends BaseSelectorProducer { @Override protected Processor getProcessor(Exchange exchange) throws Exception { - final String action = exchange.getIn().getHeader(header, defaultHeaderValue, String.class); + String header = headerSupplier.get(); + String action = exchange.getIn().getHeader(headerSupplier.get(), String.class); + + if (action == null) { + action = defaultHeaderValueSupplier.get(); + } if (action == null) { throw new NoSuchHeaderException(exchange, header, String.class); } @@ -94,7 +116,7 @@ public class HeaderSelectorProducer extends BaseSelectorProducer { protected void onMissingProcessor(Exchange exchange) throws Exception { throw new IllegalStateException( - "Unsupported operation " + exchange.getIn().getHeader(header) + "Unsupported operation " + exchange.getIn().getHeader(headerSupplier.get()) ); }