Improved exception and header handling.

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6a006eba
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6a006eba
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6a006eba

Branch: refs/heads/master
Commit: 6a006eba25fbb9357b8eece030ef0956938aa641
Parents: 3fe1d6c
Author: Lauri Kimmel <lauri.kim...@gmx.com>
Authored: Wed May 28 23:55:40 2014 +1000
Committer: Lauri Kimmel <lauri.kim...@gmx.com>
Committed: Mon Jun 16 21:02:52 2014 +1000

----------------------------------------------------------------------
 README.md                                       |  61 ++++---
 .../camel/metrics/AbstractMetricsEndpoint.java  |  18 --
 .../camel/metrics/AbstractMetricsProducer.java  |  59 +++++++
 .../apache/camel/metrics/MetricsComponent.java  |   9 +-
 .../camel/metrics/counter/CounterProducer.java  |  20 +--
 .../metrics/histogram/HistogramProducer.java    |  16 +-
 .../camel/metrics/meter/MeterProducer.java      |  12 +-
 .../camel/metrics/timer/TimerProducer.java      |  12 +-
 .../metrics/AbstractMetricsEndpointTest.java    |  65 -------
 .../metrics/AbstractMetricsProducerTest.java    | 172 +++++++++++++++++++
 .../metrics/MetricsComponentRouteTest.java      |  42 ++++-
 .../metrics/counter/CounterProducerTest.java    | 119 +++++++------
 .../camel/metrics/counter/CounterRouteTest.java |  14 +-
 .../histogram/HistogramProducerTest.java        |  44 ++---
 .../camel/metrics/meter/MeterProducerTest.java  |   9 +-
 .../camel/metrics/timer/TimerProducerTest.java  |  13 +-
 16 files changed, 418 insertions(+), 267 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 296b2f3..2a99a44 100644
--- a/README.md
+++ b/README.md
@@ -72,6 +72,9 @@ from("direct:in")
 
 will update counter with name ```new.name``` instead of ```name.not.used```.
 
+All Metrics specific headers are removed from the message once Metrics 
endpoint finishes processing of exchange.
+While processing exchange Metrics endpoint will catch all exceptions and write 
log entry using level warn.
+
 
 ## Metrics type counter
 
@@ -133,34 +136,6 @@ from("direct:in")
 ```
 
 
-## Metric type meter
-
-```
-metrics:meter:metricname[?options]
-```
-
-Where options are
-
-| Name | Default | Description               |
-|------|---------|---------------------------|
-| mark |         | long value to use as mark |
-
-If ```mark``` is not set ```meter.mark()``` is called without argument.
-
-```java
-// marks simple.meter without value
-from("direct:in")
-    .to("metric:simple.meter")
-    .to("direct:out")
-```
-
-```java
-// marks simple.meter with value 81
-from("direct:in")
-    .to("metric:meter:simple.meter?mark=81")
-    .to("direct:out")
-```
-
 ## Metric type histogram
 
 ```
@@ -203,6 +178,36 @@ from("direct:in")
     .to("direct:out")
 ```
 
+
+## Metric type meter
+
+```
+metrics:meter:metricname[?options]
+```
+
+Where options are
+
+| Name | Default | Description               |
+|------|---------|---------------------------|
+| mark |         | long value to use as mark |
+
+If ```mark``` is not set ```meter.mark()``` is called without argument.
+
+```java
+// marks simple.meter without value
+from("direct:in")
+    .to("metric:simple.meter")
+    .to("direct:out")
+```
+
+```java
+// marks simple.meter with value 81
+from("direct:in")
+    .to("metric:meter:simple.meter?mark=81")
+    .to("direct:out")
+```
+
+
 ## Metrics type timer
 
 ```

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java 
b/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
index 9560758..d8c8af7 100644
--- a/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
+++ b/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
@@ -1,12 +1,9 @@
 package org.apache.camel.metrics;
 
 import org.apache.camel.Consumer;
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.DefaultEndpoint;
-import org.apache.camel.util.ObjectHelper;
 
 import com.codahale.metrics.MetricRegistry;
 
@@ -37,19 +34,4 @@ public abstract class AbstractMetricsEndpoint extends 
DefaultEndpoint {
     public String getMetricsName() {
         return metricsName;
     }
-
-    public String getMetricsName(Exchange exchange) {
-        return getStringHeader(exchange, MetricsComponent.HEADER_METRIC_NAME, 
metricsName);
-    }
-
-    public String getStringHeader(Exchange exchange, String header, String 
defaultValue) {
-        Message in = exchange.getIn();
-        String headerValue = in.getHeader(header, String.class);
-        return ObjectHelper.isNotEmpty(headerValue) ? headerValue : 
defaultValue;
-    }
-
-    public Long getLongHeader(Exchange exchange, String header, Long 
defaultValue) {
-        Message in = exchange.getIn();
-        return in.getHeader(header, defaultValue, Long.class);
-    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/main/java/org/apache/camel/metrics/AbstractMetricsProducer.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/camel/metrics/AbstractMetricsProducer.java 
b/src/main/java/org/apache/camel/metrics/AbstractMetricsProducer.java
new file mode 100644
index 0000000..24149af
--- /dev/null
+++ b/src/main/java/org/apache/camel/metrics/AbstractMetricsProducer.java
@@ -0,0 +1,59 @@
+package org.apache.camel.metrics;
+
+import static org.apache.camel.metrics.MetricsComponent.HEADER_METRIC_NAME;
+import static org.apache.camel.metrics.MetricsComponent.HEADER_PERFIX;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.codahale.metrics.MetricRegistry;
+
+public abstract class AbstractMetricsProducer<T extends 
AbstractMetricsEndpoint> extends DefaultProducer {
+
+    public static final String HEADER_PATTERN = HEADER_PERFIX + "*";
+    private static final Logger LOG = 
LoggerFactory.getLogger(AbstractMetricsProducer.class);
+
+    public AbstractMetricsProducer(T endpoint) {
+        super(endpoint);
+    }
+
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        @SuppressWarnings("unchecked")
+        T endpoint = (T) getEndpoint();
+        Message in = exchange.getIn();
+        String defaultMetricsName = endpoint.getMetricsName();
+        String finalMetricsName = getMetricsName(in, defaultMetricsName);
+        MetricRegistry registry = endpoint.getRegistry();
+        try {
+            doProcess(exchange, endpoint, registry, finalMetricsName);
+        }
+        catch (Exception e) {
+            LOG.warn("Failed to produce metrics for {} in {} - {}", 
finalMetricsName, getClass().getSimpleName(), e.getMessage());
+        }
+        clearMetricsHeaders(in);
+    }
+
+    protected abstract void doProcess(Exchange exchange, T endpoint, 
MetricRegistry registry, String metricsName) throws Exception;
+
+    public String getMetricsName(Message in, String defaultValue) {
+        return getStringHeader(in, HEADER_METRIC_NAME, defaultValue);
+    }
+
+    public String getStringHeader(Message in, String header, String 
defaultValue) {
+        String headerValue = in.getHeader(header, String.class);
+        return ObjectHelper.isNotEmpty(headerValue) ? headerValue : 
defaultValue;
+    }
+
+    public Long getLongHeader(Message in, String header, Long defaultValue) {
+        return in.getHeader(header, defaultValue, Long.class);
+    }
+
+    protected boolean clearMetricsHeaders(Message in) {
+        return in.removeHeaders(HEADER_PATTERN);
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/main/java/org/apache/camel/metrics/MetricsComponent.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/camel/metrics/MetricsComponent.java 
b/src/main/java/org/apache/camel/metrics/MetricsComponent.java
index c129c07..1ff175d 100644
--- a/src/main/java/org/apache/camel/metrics/MetricsComponent.java
+++ b/src/main/java/org/apache/camel/metrics/MetricsComponent.java
@@ -26,10 +26,11 @@ public class MetricsComponent extends DefaultComponent {
     public static final String METRIC_REGISTRY_NAME = "metricRegistry";
     public static final MetricsType DEFAULT_METRICS_TYPE = MetricsType.METER;
     public static final long DEFAULT_REPORTING_INTERVAL_SECONDS = 60L;
-    public static final String HEADER_METRIC_NAME = "CamelMetricsName";
-    public static final String HEADER_COUNTER_INCREMENT = 
"CamelMetricsCounterIncrement";
-    public static final String HEADER_COUNTER_DECREMENT = 
"CamelMetricsCounterDecrement";
-    public static final String HEADER_HISTOGRAM_VALUE = 
"CamelMetricsHistogramValue";
+    public static final String HEADER_PERFIX = "CamelMetrics";
+    public static final String HEADER_METRIC_NAME = HEADER_PERFIX + "Name";
+    public static final String HEADER_COUNTER_INCREMENT = HEADER_PERFIX + 
"CounterIncrement";
+    public static final String HEADER_COUNTER_DECREMENT = HEADER_PERFIX + 
"CounterDecrement";
+    public static final String HEADER_HISTOGRAM_VALUE = HEADER_PERFIX + 
"HistogramValue";
 
     private static final Logger LOG = 
LoggerFactory.getLogger(MetricsComponent.class);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java 
b/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
index e7db514..2d9431c 100644
--- a/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
+++ b/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
@@ -3,27 +3,27 @@ package org.apache.camel.metrics.counter;
 import static 
org.apache.camel.metrics.MetricsComponent.HEADER_COUNTER_DECREMENT;
 import static 
org.apache.camel.metrics.MetricsComponent.HEADER_COUNTER_INCREMENT;
 
-import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.Message;
+import org.apache.camel.metrics.AbstractMetricsProducer;
 
 import com.codahale.metrics.Counter;
+import com.codahale.metrics.MetricRegistry;
 
-public class CounterProducer extends DefaultProducer {
+public class CounterProducer extends AbstractMetricsProducer<CounterEndpoint> {
 
-    public CounterProducer(Endpoint endpoint) {
+    public CounterProducer(CounterEndpoint endpoint) {
         super(endpoint);
     }
 
     @Override
-    public void process(Exchange exchange) throws Exception {
-        CounterEndpoint endpoint = (CounterEndpoint) getEndpoint();
-        String metricName = endpoint.getMetricsName(exchange);
-        Counter counter = endpoint.getRegistry().counter(metricName);
+    protected void doProcess(Exchange exchange, CounterEndpoint endpoint, 
MetricRegistry registry, String metricsName) throws Exception {
+        Message in = exchange.getIn();
+        Counter counter = registry.counter(metricsName);
         Long increment = endpoint.getIncrement();
         Long decrement = endpoint.getDecrement();
-        Long finalIncrement = endpoint.getLongHeader(exchange, 
HEADER_COUNTER_INCREMENT, increment);
-        Long finalDecrement = endpoint.getLongHeader(exchange, 
HEADER_COUNTER_DECREMENT, decrement);
+        Long finalIncrement = getLongHeader(in, HEADER_COUNTER_INCREMENT, 
increment);
+        Long finalDecrement = getLongHeader(in, HEADER_COUNTER_DECREMENT, 
decrement);
         if (finalIncrement != null) {
             counter.inc(finalIncrement);
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java 
b/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
index bd701c0..46c586d 100644
--- a/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
+++ b/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
@@ -2,31 +2,29 @@ package org.apache.camel.metrics.histogram;
 
 import static org.apache.camel.metrics.MetricsComponent.HEADER_HISTOGRAM_VALUE;
 
-import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.Message;
+import org.apache.camel.metrics.AbstractMetricsProducer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.codahale.metrics.Histogram;
 import com.codahale.metrics.MetricRegistry;
 
-public class HistogramProducer extends DefaultProducer {
+public class HistogramProducer extends 
AbstractMetricsProducer<HistogramEndpoint> {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(HistogramProducer.class);
 
-    public HistogramProducer(Endpoint endpoint) {
+    public HistogramProducer(HistogramEndpoint endpoint) {
         super(endpoint);
     }
 
     @Override
-    public void process(Exchange exchange) throws Exception {
-        HistogramEndpoint endpoint = (HistogramEndpoint) getEndpoint();
-        MetricRegistry registry = endpoint.getRegistry();
-        String metricsName = endpoint.getMetricsName(exchange);
+    protected void doProcess(Exchange exchange, HistogramEndpoint endpoint, 
MetricRegistry registry, String metricsName) throws Exception {
+        Message in = exchange.getIn();
         Histogram histogram = registry.histogram(metricsName);
         Long value = endpoint.getValue();
-        Long finalValue = endpoint.getLongHeader(exchange, 
HEADER_HISTOGRAM_VALUE, value);
+        Long finalValue = getLongHeader(in, HEADER_HISTOGRAM_VALUE, value);
         if (finalValue != null) {
             histogram.update(finalValue);
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java 
b/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
index 0de6ba5..5777134 100644
--- a/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
+++ b/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
@@ -1,23 +1,19 @@
 package org.apache.camel.metrics.meter;
 
-import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.metrics.AbstractMetricsProducer;
 
 import com.codahale.metrics.Meter;
 import com.codahale.metrics.MetricRegistry;
 
-public class MeterProducer extends DefaultProducer {
+public class MeterProducer extends AbstractMetricsProducer<MeterEndpoint> {
 
-    public MeterProducer(Endpoint endpoint) {
+    public MeterProducer(MeterEndpoint endpoint) {
         super(endpoint);
     }
 
     @Override
-    public void process(Exchange exchange) throws Exception {
-        MeterEndpoint endpoint = (MeterEndpoint) getEndpoint();
-        String metricsName = endpoint.getMetricsName(exchange);
-        MetricRegistry registry = endpoint.getRegistry();
+    protected void doProcess(Exchange exchange, MeterEndpoint endpoint, 
MetricRegistry registry, String metricsName) throws Exception {
         Meter meter = registry.meter(metricsName);
         Long mark = endpoint.getMark();
         if (mark == null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java 
b/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
index bd8e2b1..4f5b809 100644
--- a/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
+++ b/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
@@ -1,8 +1,7 @@
 package org.apache.camel.metrics.timer;
 
-import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.metrics.AbstractMetricsProducer;
 import org.apache.camel.metrics.timer.TimerEndpoint.TimerAction;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -10,19 +9,16 @@ import org.slf4j.LoggerFactory;
 import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.Timer;
 
-public class TimerProducer extends DefaultProducer {
+public class TimerProducer extends AbstractMetricsProducer<TimerEndpoint> {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(TimerProducer.class);
 
-    public TimerProducer(Endpoint endpoint) {
+    public TimerProducer(TimerEndpoint endpoint) {
         super(endpoint);
     }
 
     @Override
-    public void process(Exchange exchange) throws Exception {
-        TimerEndpoint endpoint = (TimerEndpoint) getEndpoint();
-        MetricRegistry registry = endpoint.getRegistry();
-        String metricsName = endpoint.getMetricsName(exchange);
+    protected void doProcess(Exchange exchange, TimerEndpoint endpoint, 
MetricRegistry registry, String metricsName) throws Exception {
         TimerAction action = endpoint.getAction();
         if (action == TimerAction.start) {
             handleStart(exchange, registry, metricsName);

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java 
b/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java
index 824581c..1a7543e 100644
--- a/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java
+++ b/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java
@@ -2,7 +2,6 @@ package org.apache.camel.metrics;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
 import org.apache.camel.Exchange;
@@ -94,68 +93,4 @@ public class AbstractMetricsEndpointTest {
     public void testGetMetricsName() throws Exception {
         assertThat(endpoint.getMetricsName(), is(METRICS_NAME));
     }
-
-    @Test
-    public void testGetStringHeaderValue() {
-        when(in.getHeader(HEADER, String.class)).thenReturn(STRING_VALUE);
-        assertThat(endpoint.getStringHeader(exchange, HEADER, 
DEFAULT_STRING_VALUE), is(STRING_VALUE));
-        inOrder.verify(exchange, times(1)).getIn();
-        inOrder.verify(in, times(1)).getHeader(HEADER, String.class);
-    }
-
-    @Test
-    public void testGetStringHeaderValueNotFound() {
-        when(in.getHeader(HEADER, String.class)).thenReturn(null);
-        assertThat(endpoint.getStringHeader(exchange, HEADER, 
DEFAULT_STRING_VALUE), is(DEFAULT_STRING_VALUE));
-        inOrder.verify(exchange, times(1)).getIn();
-        inOrder.verify(in, times(1)).getHeader(HEADER, String.class);
-    }
-
-    @Test
-    public void testGetStringHeaderValueEmptyString() {
-        when(in.getHeader(HEADER, String.class)).thenReturn("");
-        assertThat(endpoint.getStringHeader(exchange, HEADER, 
DEFAULT_STRING_VALUE), is(DEFAULT_STRING_VALUE));
-        inOrder.verify(exchange, times(1)).getIn();
-        inOrder.verify(in, times(1)).getHeader(HEADER, String.class);
-    }
-
-    @Test
-    public void testGetStringHeaderValueWhiteSpaces() {
-        when(in.getHeader(HEADER, String.class)).thenReturn(" \n\t\r");
-        assertThat(endpoint.getStringHeader(exchange, HEADER, 
DEFAULT_STRING_VALUE), is(DEFAULT_STRING_VALUE));
-        inOrder.verify(exchange, times(1)).getIn();
-        inOrder.verify(in, times(1)).getHeader(HEADER, String.class);
-    }
-
-    @Test
-    public void testGetLongHeaderValue() {
-        when(in.getHeader(HEADER, DEFAULT_LONG_VALUE, 
Long.class)).thenReturn(LONG_VALUE);
-        assertThat(endpoint.getLongHeader(exchange, HEADER, 
DEFAULT_LONG_VALUE), is(LONG_VALUE));
-        inOrder.verify(exchange, times(1)).getIn();
-        inOrder.verify(in, times(1)).getHeader(HEADER, DEFAULT_LONG_VALUE, 
Long.class);
-    }
-
-    @Test
-    public void testGetLongHeaderValueNotFound() {
-        when(in.getHeader(HEADER, DEFAULT_LONG_VALUE, 
Long.class)).thenReturn(DEFAULT_LONG_VALUE);
-        assertThat(endpoint.getLongHeader(exchange, HEADER, 
DEFAULT_LONG_VALUE), is(DEFAULT_LONG_VALUE));
-        inOrder.verify(exchange, times(1)).getIn();
-        inOrder.verify(in, times(1)).getHeader(HEADER, DEFAULT_LONG_VALUE, 
Long.class);
-    }
-
-    @Test
-    public void testGetMetricsNameFromExchange() {
-        when(in.getHeader(MetricsComponent.HEADER_METRIC_NAME, 
String.class)).thenReturn(STRING_VALUE);
-        assertThat(endpoint.getMetricsName(exchange), is(STRING_VALUE));
-        inOrder.verify(exchange, times(1)).getIn();
-        inOrder.verify(in, 
times(1)).getHeader(MetricsComponent.HEADER_METRIC_NAME, String.class);
-    }
-
-    @Test
-    public void testGetMetricsNameFromExchangeNotFound() {
-        when(in.getHeader(MetricsComponent.HEADER_METRIC_NAME, 
String.class)).thenReturn(null);
-        assertThat(endpoint.getMetricsName(exchange), is(METRICS_NAME));
-        inOrder.verify(exchange, times(1)).getIn();
-        inOrder.verify(in, 
times(1)).getHeader(MetricsComponent.HEADER_METRIC_NAME, String.class);
-    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/test/java/org/apache/camel/metrics/AbstractMetricsProducerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/AbstractMetricsProducerTest.java 
b/src/test/java/org/apache/camel/metrics/AbstractMetricsProducerTest.java
new file mode 100644
index 0000000..3435247
--- /dev/null
+++ b/src/test/java/org/apache/camel/metrics/AbstractMetricsProducerTest.java
@@ -0,0 +1,172 @@
+package org.apache.camel.metrics;
+
+import static org.apache.camel.metrics.AbstractMetricsProducer.HEADER_PATTERN;
+import static org.apache.camel.metrics.MetricsComponent.HEADER_HISTOGRAM_VALUE;
+import static org.apache.camel.metrics.MetricsComponent.HEADER_METRIC_NAME;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.when;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.impl.DefaultMessage;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import com.codahale.metrics.MetricRegistry;
+
+@RunWith(MockitoJUnitRunner.class)
+public class AbstractMetricsProducerTest {
+
+    public static final String METRIC_NAME = "a metric";
+
+    @Mock
+    private AbstractMetricsEndpoint endpoint;
+
+    @Mock
+    private Exchange exchange;
+
+    @Mock
+    private Message in;
+
+    @Mock
+    private MetricRegistry registry;
+
+    private AbstractMetricsProducer<AbstractMetricsEndpoint> okProducer;
+
+    private AbstractMetricsProducer<AbstractMetricsEndpoint> failProducer;
+
+    private InOrder inOrder;
+
+    @Before
+    public void setUp() throws Exception {
+        okProducer = new 
AbstractMetricsProducer<AbstractMetricsEndpoint>(endpoint) {
+            @Override
+            protected void doProcess(Exchange exchange, 
AbstractMetricsEndpoint endpoint, MetricRegistry registry, String metricsName) 
throws Exception {
+            }
+        };
+        failProducer = new 
AbstractMetricsProducer<AbstractMetricsEndpoint>(endpoint) {
+
+            @Override
+            protected void doProcess(Exchange exchange, 
AbstractMetricsEndpoint endpoint, MetricRegistry registry, String metricsName) 
throws Exception {
+                throw new Exception("Muchos problemos");
+            }
+        };
+        inOrder = Mockito.inOrder(endpoint, exchange, in, registry);
+        when(exchange.getIn()).thenReturn(in);
+        when(endpoint.getMetricsName()).thenReturn(METRIC_NAME);
+        when(endpoint.getRegistry()).thenReturn(registry);
+    }
+
+    @Test
+    public void testDoProcess() throws Exception {
+        when(in.getHeader(HEADER_METRIC_NAME, String.class)).thenReturn(null);
+        when(in.removeHeaders(HEADER_PATTERN)).thenReturn(true);
+        okProducer.process(exchange);
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(in, times(1)).getHeader(HEADER_METRIC_NAME, 
String.class);
+        inOrder.verify(endpoint, times(1)).getRegistry();
+        inOrder.verify(in, times(1)).removeHeaders(HEADER_PATTERN);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testDoProcessWithException() throws Exception {
+        when(in.getHeader(HEADER_METRIC_NAME, String.class)).thenReturn(null);
+        when(in.removeHeaders(HEADER_PATTERN)).thenReturn(true);
+        failProducer.process(exchange);
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(in, times(1)).getHeader(HEADER_METRIC_NAME, 
String.class);
+        inOrder.verify(endpoint, times(1)).getRegistry();
+        inOrder.verify(in, times(1)).removeHeaders(HEADER_PATTERN);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testGetMetricsName() throws Exception {
+        when(in.getHeader(HEADER_METRIC_NAME, String.class)).thenReturn("A");
+        assertThat(okProducer.getMetricsName(in, "value"), is("A"));
+        inOrder.verify(in, times(1)).getHeader(HEADER_METRIC_NAME, 
String.class);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testGetMetricsNameNotSet() throws Exception {
+        when(in.getHeader(HEADER_METRIC_NAME, String.class)).thenReturn(null);
+        assertThat(okProducer.getMetricsName(in, "name"), is("name"));
+        inOrder.verify(in, times(1)).getHeader(HEADER_METRIC_NAME, 
String.class);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testGetStringHeader() throws Exception {
+        when(in.getHeader(HEADER_METRIC_NAME, String.class)).thenReturn("A");
+        assertThat(okProducer.getStringHeader(in, HEADER_METRIC_NAME, 
"value"), is("A"));
+        inOrder.verify(in, times(1)).getHeader(HEADER_METRIC_NAME, 
String.class);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testGetStringHeaderWithNullValue() throws Exception {
+        when(in.getHeader(HEADER_METRIC_NAME, String.class)).thenReturn(null);
+        assertThat(okProducer.getStringHeader(in, HEADER_METRIC_NAME, 
"value"), is("value"));
+        inOrder.verify(in, times(1)).getHeader(HEADER_METRIC_NAME, 
String.class);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testGetStringHeaderWithWhiteSpaces() throws Exception {
+        when(in.getHeader(HEADER_METRIC_NAME, String.class)).thenReturn(" ");
+        assertThat(okProducer.getStringHeader(in, HEADER_METRIC_NAME, 
"value"), is("value"));
+        inOrder.verify(in, times(1)).getHeader(HEADER_METRIC_NAME, 
String.class);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testGetStringHeaderWithEmptySrting() throws Exception {
+        when(in.getHeader(HEADER_METRIC_NAME, String.class)).thenReturn("");
+        assertThat(okProducer.getStringHeader(in, HEADER_METRIC_NAME, 
"value"), is("value"));
+        inOrder.verify(in, times(1)).getHeader(HEADER_METRIC_NAME, 
String.class);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testGetLongHeader() throws Exception {
+        when(in.getHeader(HEADER_HISTOGRAM_VALUE, 19L, 
Long.class)).thenReturn(201L);
+        assertThat(okProducer.getLongHeader(in, HEADER_HISTOGRAM_VALUE, 19L), 
is(201L));
+        inOrder.verify(in, times(1)).getHeader(HEADER_HISTOGRAM_VALUE, 19L, 
Long.class);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testClearMetricsHeaders() throws Exception {
+        when(in.removeHeaders(HEADER_PATTERN)).thenReturn(true);
+        assertThat(okProducer.clearMetricsHeaders(in), is(true));
+        inOrder.verify(in, times(1)).removeHeaders(HEADER_PATTERN);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testClearRealHeaders() throws Exception {
+        Message msg = new DefaultMessage();
+        Object val = new Object();
+        msg.setHeader(HEADER_HISTOGRAM_VALUE, 109L);
+        msg.setHeader(HEADER_METRIC_NAME, "the metric");
+        msg.setHeader("notRemoved", val);
+        assertThat(msg.getHeaders().size(), is(3));
+        assertThat(msg.getHeader(HEADER_HISTOGRAM_VALUE, Long.class), 
is(109L));
+        assertThat(msg.getHeader(HEADER_METRIC_NAME, String.class), is("the 
metric"));
+        assertThat(msg.getHeader("notRemoved"), is(val));
+        okProducer.clearMetricsHeaders(msg);
+        assertThat(msg.getHeaders().size(), is(1));
+        assertThat(msg.getHeader("notRemoved"), is(val));
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java 
b/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java
index 97301c3..4ef44f3 100644
--- a/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java
+++ b/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java
@@ -1,5 +1,9 @@
 package org.apache.camel.metrics;
 
+import static org.apache.camel.metrics.MetricsComponent.HEADER_HISTOGRAM_VALUE;
+import static org.apache.camel.metrics.MetricsComponent.HEADER_METRIC_NAME;
+import static org.apache.camel.metrics.MetricsComponent.HEADER_PERFIX;
+
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -13,14 +17,17 @@ import org.junit.Test;
 
 public class MetricsComponentRouteTest extends CamelTestSupport {
 
-    @Produce(uri = "direct:start")
-    protected ProducerTemplate template;
+    @Produce(uri = "direct:start-1")
+    protected ProducerTemplate template1;
+
+    @Produce(uri = "direct:start-2")
+    protected ProducerTemplate template2;
 
     @Test
     public void testMetrics() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(1);
-        template.sendBody(new Object());
+        template1.sendBody(new Object());
         assertMockEndpointsSatisfied();
     }
 
@@ -38,7 +45,28 @@ public class MetricsComponentRouteTest extends 
CamelTestSupport {
         Map<String, Object> headers = new HashMap<String, Object>();
         headers.put(header1, value1);
         headers.put(header2, value2);
-        template.sendBodyAndHeaders(body, headers);
+        template1.sendBodyAndHeaders(body, headers);
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testHeaderRemoval() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        Object body = new Object();
+        Date now = new Date();
+
+        mock.expectedBodiesReceived(body);
+        mock.expectedHeaderReceived("." + HEADER_PERFIX, "value");
+        mock.expectedHeaderReceived("date", now);
+
+        Map<String, Object> headers = new HashMap<String, Object>();
+        headers.put(HEADER_METRIC_NAME, "a name");
+        headers.put(HEADER_HISTOGRAM_VALUE, 34L);
+        headers.put(HEADER_PERFIX + "notExistingHeader", "?");
+        headers.put("." + HEADER_PERFIX, "value");
+        headers.put("date", now);
+
+        template2.sendBodyAndHeaders(body, headers);
         assertMockEndpointsSatisfied();
     }
 
@@ -47,7 +75,7 @@ public class MetricsComponentRouteTest extends 
CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
-                from("direct:start")
+                from("direct:start-1")
                         .to("metrics:timer:T?action=start")
                         .to("metrics:A")
                         .to("metrics:counter://B")
@@ -61,6 +89,10 @@ public class MetricsComponentRouteTest extends 
CamelTestSupport {
                         .to("metrics:histogram:E?value=12000000031")
                         .to("metrics:timer:T?action=stop")
                         .to("mock:result");
+
+                from("direct:start-2")
+                        .to("metrics:meter:F?mark=88")
+                        .to("mock:result");
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java 
b/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java
index c136cf8..6351814 100644
--- a/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java
+++ b/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java
@@ -8,6 +8,7 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -22,7 +23,7 @@ import com.codahale.metrics.MetricRegistry;
 @RunWith(MockitoJUnitRunner.class)
 public class CounterProducerTest {
 
-    private static final String ENDPOINT_NAME = "endpoint.name";
+    private static final String METRICS_NAME = "metrics.name";
     private static final Long INCREMENT = 100000L;
     private static final Long DECREMENT = 91929199L;
 
@@ -38,6 +39,9 @@ public class CounterProducerTest {
     @Mock
     private Counter counter;
 
+    @Mock
+    private Message in;
+
     private CounterProducer producer;
 
     private InOrder inOrder;
@@ -45,10 +49,10 @@ public class CounterProducerTest {
     @Before
     public void setUp() throws Exception {
         producer = new CounterProducer(endpoint);
-        inOrder = Mockito.inOrder(endpoint, exchange, registry, counter);
-        when(endpoint.getMetricsName(exchange)).thenReturn(ENDPOINT_NAME);
+        inOrder = Mockito.inOrder(endpoint, exchange, registry, counter, in);
         when(endpoint.getRegistry()).thenReturn(registry);
-        when(registry.counter(ENDPOINT_NAME)).thenReturn(counter);
+        when(registry.counter(METRICS_NAME)).thenReturn(counter);
+        when(exchange.getIn()).thenReturn(in);
     }
 
     @Test
@@ -60,16 +64,15 @@ public class CounterProducerTest {
     public void testProcessWithIncrementOnly() throws Exception {
         when(endpoint.getIncrement()).thenReturn(INCREMENT);
         when(endpoint.getDecrement()).thenReturn(null);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_INCREMENT, 
INCREMENT)).thenReturn(INCREMENT);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_DECREMENT, 
null)).thenReturn(null);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
+        when(in.getHeader(HEADER_COUNTER_INCREMENT, INCREMENT, 
Long.class)).thenReturn(INCREMENT);
+        when(in.getHeader(HEADER_COUNTER_DECREMENT, null, 
Long.class)).thenReturn(null);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(registry, times(1)).counter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();
         inOrder.verify(endpoint, times(1)).getDecrement();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_INCREMENT, INCREMENT);
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_DECREMENT, null);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_INCREMENT, 
INCREMENT, Long.class);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_DECREMENT, null, 
Long.class);
         inOrder.verify(counter, times(1)).inc(INCREMENT);
         inOrder.verifyNoMoreInteractions();
     }
@@ -78,34 +81,32 @@ public class CounterProducerTest {
     public void testProcessWithDecrementOnly() throws Exception {
         when(endpoint.getIncrement()).thenReturn(null);
         when(endpoint.getDecrement()).thenReturn(DECREMENT);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_INCREMENT, 
null)).thenReturn(null);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_DECREMENT, 
DECREMENT)).thenReturn(DECREMENT);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
+        when(in.getHeader(HEADER_COUNTER_INCREMENT, null, 
Long.class)).thenReturn(null);
+        when(in.getHeader(HEADER_COUNTER_DECREMENT, DECREMENT, 
Long.class)).thenReturn(DECREMENT);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(registry, times(1)).counter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();
         inOrder.verify(endpoint, times(1)).getDecrement();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_INCREMENT, null);
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_DECREMENT, DECREMENT);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_INCREMENT, null, 
Long.class);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_DECREMENT, 
DECREMENT, Long.class);
         inOrder.verify(counter, times(1)).dec(DECREMENT);
         inOrder.verifyNoMoreInteractions();
     }
 
     @Test
-    public void testProcessWithIncrementAndDecrement() throws Exception {
+    public void testDoProcessWithIncrementAndDecrement() throws Exception {
         when(endpoint.getIncrement()).thenReturn(INCREMENT);
         when(endpoint.getDecrement()).thenReturn(DECREMENT);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_INCREMENT, 
INCREMENT)).thenReturn(INCREMENT);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_DECREMENT, 
DECREMENT)).thenReturn(DECREMENT);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
+        when(in.getHeader(HEADER_COUNTER_INCREMENT, INCREMENT, 
Long.class)).thenReturn(INCREMENT);
+        when(in.getHeader(HEADER_COUNTER_DECREMENT, DECREMENT, 
Long.class)).thenReturn(DECREMENT);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(registry, times(1)).counter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();
         inOrder.verify(endpoint, times(1)).getDecrement();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_INCREMENT, INCREMENT);
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_DECREMENT, DECREMENT);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_INCREMENT, 
INCREMENT, Long.class);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_DECREMENT, 
DECREMENT, Long.class);
         inOrder.verify(counter, times(1)).inc(INCREMENT);
         inOrder.verifyNoMoreInteractions();
     }
@@ -114,16 +115,15 @@ public class CounterProducerTest {
     public void testProcessWithOutIncrementAndDecrement() throws Exception {
         when(endpoint.getIncrement()).thenReturn(null);
         when(endpoint.getDecrement()).thenReturn(null);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_INCREMENT, 
null)).thenReturn(null);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_DECREMENT, 
null)).thenReturn(null);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
+        when(in.getHeader(HEADER_COUNTER_INCREMENT, null, 
Long.class)).thenReturn(null);
+        when(in.getHeader(HEADER_COUNTER_DECREMENT, null, 
Long.class)).thenReturn(null);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(registry, times(1)).counter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();
         inOrder.verify(endpoint, times(1)).getDecrement();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_INCREMENT, null);
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_DECREMENT, null);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_INCREMENT, null, 
Long.class);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_DECREMENT, null, 
Long.class);
         inOrder.verify(counter, times(1)).inc();
         inOrder.verifyNoMoreInteractions();
     }
@@ -132,16 +132,15 @@ public class CounterProducerTest {
     public void testProcessWithHeaderValuesOnly() throws Exception {
         when(endpoint.getIncrement()).thenReturn(null);
         when(endpoint.getDecrement()).thenReturn(null);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_INCREMENT, 
null)).thenReturn(INCREMENT + 1);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_DECREMENT, 
null)).thenReturn(DECREMENT - 1);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
+        when(in.getHeader(HEADER_COUNTER_INCREMENT, null, 
Long.class)).thenReturn(INCREMENT + 1);
+        when(in.getHeader(HEADER_COUNTER_DECREMENT, null, 
Long.class)).thenReturn(DECREMENT - 1);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(registry, times(1)).counter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();
         inOrder.verify(endpoint, times(1)).getDecrement();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_INCREMENT, null);
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_DECREMENT, null);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_INCREMENT, null, 
Long.class);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_DECREMENT, null, 
Long.class);
         inOrder.verify(counter, times(1)).inc(INCREMENT + 1);
         inOrder.verifyNoMoreInteractions();
     }
@@ -150,16 +149,15 @@ public class CounterProducerTest {
     public void testProcessOverridingIncrement() throws Exception {
         when(endpoint.getIncrement()).thenReturn(INCREMENT);
         when(endpoint.getDecrement()).thenReturn(DECREMENT);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_INCREMENT, 
INCREMENT)).thenReturn(INCREMENT + 1);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_DECREMENT, 
DECREMENT)).thenReturn(DECREMENT);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
+        when(in.getHeader(HEADER_COUNTER_INCREMENT, INCREMENT, 
Long.class)).thenReturn(INCREMENT + 1);
+        when(in.getHeader(HEADER_COUNTER_DECREMENT, DECREMENT, 
Long.class)).thenReturn(DECREMENT);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(registry, times(1)).counter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();
         inOrder.verify(endpoint, times(1)).getDecrement();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_INCREMENT, INCREMENT);
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_DECREMENT, DECREMENT);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_INCREMENT, 
INCREMENT, Long.class);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_DECREMENT, 
DECREMENT, Long.class);
         inOrder.verify(counter, times(1)).inc(INCREMENT + 1);
         inOrder.verifyNoMoreInteractions();
     }
@@ -168,16 +166,15 @@ public class CounterProducerTest {
     public void testProcessOverridingDecrement() throws Exception {
         when(endpoint.getIncrement()).thenReturn(null);
         when(endpoint.getDecrement()).thenReturn(DECREMENT);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_INCREMENT, 
null)).thenReturn(null);
-        when(endpoint.getLongHeader(exchange, HEADER_COUNTER_DECREMENT, 
DECREMENT)).thenReturn(DECREMENT - 1);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
+        when(in.getHeader(HEADER_COUNTER_INCREMENT, null, 
Long.class)).thenReturn(null);
+        when(in.getHeader(HEADER_COUNTER_DECREMENT, DECREMENT, 
Long.class)).thenReturn(DECREMENT - 1);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(registry, times(1)).counter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();
         inOrder.verify(endpoint, times(1)).getDecrement();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_INCREMENT, null);
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_COUNTER_DECREMENT, DECREMENT);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_INCREMENT, null, 
Long.class);
+        inOrder.verify(in, times(1)).getHeader(HEADER_COUNTER_DECREMENT, 
DECREMENT, Long.class);
         inOrder.verify(counter, times(1)).dec(DECREMENT - 1);
         inOrder.verifyNoMoreInteractions();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/test/java/org/apache/camel/metrics/counter/CounterRouteTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/counter/CounterRouteTest.java 
b/src/test/java/org/apache/camel/metrics/counter/CounterRouteTest.java
index d28e07a..844401e 100644
--- a/src/test/java/org/apache/camel/metrics/counter/CounterRouteTest.java
+++ b/src/test/java/org/apache/camel/metrics/counter/CounterRouteTest.java
@@ -4,9 +4,6 @@ import static 
org.apache.camel.metrics.MetricsComponent.HEADER_COUNTER_DECREMENT
 import static 
org.apache.camel.metrics.MetricsComponent.HEADER_COUNTER_INCREMENT;
 import static org.apache.camel.metrics.MetricsComponent.HEADER_METRIC_NAME;
 import static org.apache.camel.metrics.MetricsComponent.METRIC_REGISTRY_NAME;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.times;
@@ -15,7 +12,6 @@ import static org.mockito.Mockito.when;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.camel.CamelExecutionException;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
@@ -167,14 +163,8 @@ public class CounterRouteTest {
     @Test
     public void testOverrideIncrementWithWrongType() throws Exception {
         when(mockRegistry.counter("A")).thenReturn(mockCounter);
-        endpoint.expectedMessageCount(0);
-        try {
-            producer1.sendBodyAndHeader(new Object(), 
HEADER_COUNTER_INCREMENT, "this is not a valid long value");
-            fail("Exception expected");
-        }
-        catch (Exception e) {
-            assertThat(e, instanceOf(CamelExecutionException.class));
-        }
+        endpoint.expectedMessageCount(1);
+        producer1.sendBodyAndHeader(new Object(), HEADER_COUNTER_INCREMENT, 
"this is not a valid long value");
         endpoint.assertIsSatisfied();
         inOrder.verify(mockRegistry, times(1)).counter("A");
         inOrder.verifyNoMoreInteractions();

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java 
b/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
index 5cb5529..8fe1e06 100644
--- 
a/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
+++ 
b/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
@@ -7,6 +7,7 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -36,6 +37,9 @@ public class HistogramProducerTest {
     @Mock
     private Exchange exchange;
 
+    @Mock
+    private Message in;
+
     private HistogramProducer producer;
 
     private InOrder inOrder;
@@ -43,10 +47,10 @@ public class HistogramProducerTest {
     @Before
     public void setUp() throws Exception {
         producer = new HistogramProducer(endpoint);
-        inOrder = Mockito.inOrder(endpoint, registry, histogram, exchange);
+        inOrder = Mockito.inOrder(endpoint, registry, histogram, exchange, in);
         when(endpoint.getRegistry()).thenReturn(registry);
-        when(endpoint.getMetricsName(exchange)).thenReturn(METRICS_NAME);
         when(registry.histogram(METRICS_NAME)).thenReturn(histogram);
+        when(exchange.getIn()).thenReturn(in);
     }
 
     @Test
@@ -57,13 +61,12 @@ public class HistogramProducerTest {
     @Test
     public void testProcessValueSet() throws Exception {
         when(endpoint.getValue()).thenReturn(VALUE);
-        when(endpoint.getLongHeader(exchange, HEADER_HISTOGRAM_VALUE, 
VALUE)).thenReturn(VALUE);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
+        when(in.getHeader(HEADER_HISTOGRAM_VALUE, VALUE, 
Long.class)).thenReturn(VALUE);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
         inOrder.verify(registry, times(1)).histogram(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getValue();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_HISTOGRAM_VALUE, VALUE);
+        inOrder.verify(in, times(1)).getHeader(HEADER_HISTOGRAM_VALUE, VALUE, 
Long.class);
         inOrder.verify(histogram, times(1)).update(VALUE);
         inOrder.verifyNoMoreInteractions();
     }
@@ -71,26 +74,24 @@ public class HistogramProducerTest {
     @Test
     public void testProcessValueNotSet() throws Exception {
         when(endpoint.getValue()).thenReturn(null);
-        when(endpoint.getLongHeader(exchange, HEADER_HISTOGRAM_VALUE, 
null)).thenReturn(null);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
+        when(in.getHeader(HEADER_HISTOGRAM_VALUE, null, 
Long.class)).thenReturn(null);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
         inOrder.verify(registry, times(1)).histogram(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getValue();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_HISTOGRAM_VALUE, null);
+        inOrder.verify(in, times(1)).getHeader(HEADER_HISTOGRAM_VALUE, null, 
Long.class);
         inOrder.verifyNoMoreInteractions();
     }
 
     @Test
     public void testProcessOverrideValue() throws Exception {
         when(endpoint.getValue()).thenReturn(VALUE);
-        when(endpoint.getLongHeader(exchange, HEADER_HISTOGRAM_VALUE, 
VALUE)).thenReturn(VALUE + 3);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
+        when(in.getHeader(HEADER_HISTOGRAM_VALUE, VALUE, 
Long.class)).thenReturn(VALUE + 3);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
         inOrder.verify(registry, times(1)).histogram(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getValue();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_HISTOGRAM_VALUE, VALUE);
+        inOrder.verify(in, times(1)).getHeader(HEADER_HISTOGRAM_VALUE, VALUE, 
Long.class);
         inOrder.verify(histogram, times(1)).update(VALUE + 3);
         inOrder.verifyNoMoreInteractions();
     }
@@ -98,13 +99,12 @@ public class HistogramProducerTest {
     @Test
     public void testProcessOverrideUriValueNotSet() throws Exception {
         when(endpoint.getValue()).thenReturn(null);
-        when(endpoint.getLongHeader(exchange, HEADER_HISTOGRAM_VALUE, 
null)).thenReturn(VALUE + 2);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
+        when(in.getHeader(HEADER_HISTOGRAM_VALUE, null, 
Long.class)).thenReturn(VALUE + 2);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
+        inOrder.verify(exchange, times(1)).getIn();
         inOrder.verify(registry, times(1)).histogram(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getValue();
-        inOrder.verify(endpoint, times(1)).getLongHeader(exchange, 
HEADER_HISTOGRAM_VALUE, null);
+        inOrder.verify(in, times(1)).getHeader(HEADER_HISTOGRAM_VALUE, null, 
Long.class);
         inOrder.verify(histogram, times(1)).update(VALUE + 2);
         inOrder.verifyNoMoreInteractions();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java 
b/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java
index ba62a18..ffa8224 100644
--- a/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java
+++ b/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java
@@ -45,7 +45,6 @@ public class MeterProducerTest {
         producer = new MeterProducer(endpoint);
         inOrder = Mockito.inOrder(endpoint, registry, meter, exchange);
         when(endpoint.getRegistry()).thenReturn(registry);
-        when(endpoint.getMetricsName(exchange)).thenReturn(METRICS_NAME);
         when(registry.meter(METRICS_NAME)).thenReturn(meter);
     }
 
@@ -58,9 +57,7 @@ public class MeterProducerTest {
     @Test
     public void testProcessMarkSet() throws Exception {
         when(endpoint.getMark()).thenReturn(MARK);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
         inOrder.verify(registry, times(1)).meter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getMark();
         inOrder.verify(meter, times(1)).mark(MARK);
@@ -70,9 +67,7 @@ public class MeterProducerTest {
     @Test
     public void testProcessMarkNotSet() throws Exception {
         when(endpoint.getMark()).thenReturn(null);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
         inOrder.verify(registry, times(1)).meter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getMark();
         inOrder.verify(meter, times(1)).mark();

http://git-wip-us.apache.org/repos/asf/camel/blob/6a006eba/src/test/java/org/apache/camel/metrics/timer/TimerProducerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/timer/TimerProducerTest.java 
b/src/test/java/org/apache/camel/metrics/timer/TimerProducerTest.java
index 09e572b..e61da97 100644
--- a/src/test/java/org/apache/camel/metrics/timer/TimerProducerTest.java
+++ b/src/test/java/org/apache/camel/metrics/timer/TimerProducerTest.java
@@ -51,7 +51,6 @@ public class TimerProducerTest {
         producer = new TimerProducer(endpoint);
         inOrder = Mockito.inOrder(endpoint, exchange, registry, timer, 
context);
         when(endpoint.getRegistry()).thenReturn(registry);
-        when(endpoint.getMetricsName(exchange)).thenReturn(METRICS_NAME);
         when(registry.timer(METRICS_NAME)).thenReturn(timer);
         when(timer.time()).thenReturn(context);
     }
@@ -66,9 +65,7 @@ public class TimerProducerTest {
     public void testProcessStart() throws Exception {
         when(endpoint.getAction()).thenReturn(TimerAction.start);
         when(exchange.getProperty(PROPERTY_NAME, 
Timer.Context.class)).thenReturn(null);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getAction();
         inOrder.verify(exchange, times(1)).getProperty(PROPERTY_NAME, 
Timer.Context.class);
         inOrder.verify(registry, times(1)).timer(METRICS_NAME);
@@ -81,9 +78,7 @@ public class TimerProducerTest {
     public void testProcessStop() throws Exception {
         when(endpoint.getAction()).thenReturn(TimerAction.stop);
         when(exchange.getProperty(PROPERTY_NAME, 
Timer.Context.class)).thenReturn(context);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getAction();
         inOrder.verify(exchange, times(1)).getProperty(PROPERTY_NAME, 
Timer.Context.class);
         inOrder.verify(context, times(1)).stop();
@@ -94,9 +89,7 @@ public class TimerProducerTest {
     @Test
     public void testProcessNoAction() throws Exception {
         when(endpoint.getAction()).thenReturn(null);
-        producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
+        producer.doProcess(exchange, endpoint, registry, METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getAction();
         inOrder.verifyNoMoreInteractions();
     }

Reply via email to