Updated Branches: refs/heads/camel-2.11.x f4fdeb1aa -> d83f6eec9 refs/heads/camel-2.12.x 1b911be5c -> ffe417448 refs/heads/master 9eeeac008 -> 81377b0f8
CAMEL-6466: Allow configuring custom log formatter from uri parameters. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/81377b0f Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/81377b0f Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/81377b0f Branch: refs/heads/master Commit: 81377b0f8aa345b24971fa1d0acdca347625dc59 Parents: 9eeeac0 Author: Claus Ibsen <davscl...@apache.org> Authored: Sat Aug 31 13:58:02 2013 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat Aug 31 13:58:02 2013 +0200 ---------------------------------------------------------------------- .../camel/component/log/LogComponent.java | 34 ++++++------ .../component/log/LogCustomFormatterTest.java | 55 +++++++++++++++++++- 2 files changed, 69 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/81377b0f/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java b/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java index 4325114..308b7f4 100644 --- a/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java +++ b/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java @@ -16,7 +16,6 @@ */ package org.apache.camel.component.log; -import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -41,28 +40,30 @@ public class LogComponent extends DefaultComponent { private ExchangeFormatter exchangeFormatter; protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { - Map<String, Object> originalParameters = new HashMap<String, Object>(parameters); - LoggingLevel level = getLoggingLevel(parameters); - String marker = getAndRemoveParameter(parameters, "marker", String.class); - Integer groupSize = getAndRemoveParameter(parameters, "groupSize", Integer.class); - Long groupInterval = getAndRemoveParameter(parameters, "groupInterval", Long.class); - CamelLogger camelLogger = new CamelLogger(remaining, level, marker); + LogEndpoint endpoint = new LogEndpoint(uri, this); + endpoint.setLevel(level.name()); + setProperties(endpoint, parameters); + + CamelLogger camelLogger = new CamelLogger(remaining, level, endpoint.getMarker()); Processor logger; - if (groupSize != null) { - logger = new ThroughputLogger(camelLogger, groupSize); - } else if (groupInterval != null) { - Boolean groupActiveOnly = getAndRemoveParameter(parameters, "groupActiveOnly", Boolean.class, Boolean.TRUE); - Long groupDelay = getAndRemoveParameter(parameters, "groupDelay", Long.class); - logger = new ThroughputLogger(camelLogger, this.getCamelContext(), groupInterval, groupDelay, groupActiveOnly); + if (endpoint.getGroupSize() != null) { + logger = new ThroughputLogger(camelLogger, endpoint.getGroupSize()); + } else if (endpoint.getGroupInterval() != null) { + Boolean groupActiveOnly = endpoint.getGroupActiveOnly() != null ? endpoint.getGroupActiveOnly() : Boolean.TRUE; + Long groupDelay = endpoint.getGroupDelay(); + logger = new ThroughputLogger(camelLogger, this.getCamelContext(), endpoint.getGroupInterval(), groupDelay, groupActiveOnly); } else { // first, try to use the user-specified formatter (or the one picked up from the Registry and transferred to // the property by a previous endpoint initialisation); if null, try to pick it up from the Registry now ExchangeFormatter localFormatter = exchangeFormatter; if (localFormatter == null) { localFormatter = getCamelContext().getRegistry().lookupByNameAndType("logFormatter", ExchangeFormatter.class); - exchangeFormatter = localFormatter; + if (localFormatter != null) { + exchangeFormatter = localFormatter; + setProperties(exchangeFormatter, parameters); + } } // if no formatter is available in the Registry, create a local one of the default type, for a single use if (localFormatter == null) { @@ -72,9 +73,7 @@ public class LogComponent extends DefaultComponent { logger = new CamelLogProcessor(camelLogger, localFormatter); } - LogEndpoint endpoint = new LogEndpoint(uri, this, logger); - // we want the endpoint to have the all the options configured from the original parameters - setProperties(endpoint, originalParameters); + endpoint.setLogger(logger); return endpoint; } @@ -94,7 +93,6 @@ public class LogComponent extends DefaultComponent { * Sets a custom {@link ExchangeFormatter} to convert the Exchange to a String suitable for logging. * <p /> * If not specified, we default to {@link DefaultExchangeFormatter}. - * @param exchangeFormatter */ public void setExchangeFormatter(ExchangeFormatter exchangeFormatter) { this.exchangeFormatter = exchangeFormatter; http://git-wip-us.apache.org/repos/asf/camel/blob/81377b0f/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java b/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java index be25920..59047ef 100644 --- a/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java +++ b/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java @@ -16,8 +16,10 @@ */ package org.apache.camel.component.log; +import org.apache.camel.CamelExecutionException; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; +import org.apache.camel.ResolveEndpointFailedException; import org.apache.camel.impl.JndiRegistry; import org.apache.camel.impl.PropertyPlaceholderDelegateRegistry; import org.apache.camel.spi.ExchangeFormatter; @@ -85,6 +87,47 @@ public class LogCustomFormatterTest extends ContextTestSupport { } @Test + public void testCustomFormatterInRegistryOptions() throws Exception { + context.stop(); + + exchangeFormatter = new TestExchangeFormatter(); + JndiRegistry registry = getRegistryAsJndi(); + registry.bind("logFormatter", exchangeFormatter); + assertEquals("", exchangeFormatter.getPrefix()); + + context.start(); + + String endpointUri = "log:" + LogCustomFormatterTest.class.getCanonicalName() + "?prefix=foo"; + template.requestBody(endpointUri, "Hello World"); + template.requestBody(endpointUri, "Hello World"); + + assertEquals(2, exchangeFormatter.getCounter()); + assertEquals("foo", exchangeFormatter.getPrefix()); + } + + @Test + public void testCustomFormatterInRegistryUnknownOption() throws Exception { + context.stop(); + + exchangeFormatter = new TestExchangeFormatter(); + JndiRegistry registry = getRegistryAsJndi(); + registry.bind("logFormatter", exchangeFormatter); + assertEquals("", exchangeFormatter.getPrefix()); + + context.start(); + + // unknown parameter + try { + String endpointUri2 = "log:" + LogCustomFormatterTest.class.getCanonicalName() + "?prefix=foo&bar=no"; + template.requestBody(endpointUri2, "Hello World"); + fail("Should have thrown exception"); + } catch (Exception e) { + ResolveEndpointFailedException cause = assertIsInstanceOf(ResolveEndpointFailedException.class, e.getCause()); + assertTrue(cause.getMessage().endsWith("Unknown parameters=[{bar=no}]")); + } + } + + @Test public void testFormatterNotPickedUpWithDifferentKey() throws Exception { context.stop(); @@ -118,11 +161,12 @@ public class LogCustomFormatterTest extends ContextTestSupport { public static class TestExchangeFormatter implements ExchangeFormatter { private int counter; private boolean addTen; + private String prefix = ""; @Override public String format(Exchange exchange) { counter += addTen ? 10 : 1; - return exchange.toString(); + return prefix + exchange.toString(); } public int getCounter() { @@ -136,7 +180,14 @@ public class LogCustomFormatterTest extends ContextTestSupport { public void setAddTen(boolean addTen) { this.addTen = addTen; } - + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } } }