Updated Branches:
  refs/heads/master ed0bd53df -> 103612428

CAMEL-7203: Introdued allowUseOriginalMessage option which can be turned off to 
improve performance when you dont need access to the original message. Likely 
more often, so added INFO logging on startup to notice users about this.


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

Branch: refs/heads/master
Commit: 1036124287bb94c58fb2e4f77543adae5aa9abfe
Parents: ed0bd53
Author: Claus Ibsen <davscl...@apache.org>
Authored: Thu Feb 13 14:16:07 2014 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Thu Feb 13 14:17:10 2014 +0100

----------------------------------------------------------------------
 .../org/apache/camel/RuntimeConfiguration.java  | 20 ++++++++
 .../mbean/ManagedCamelContextMBean.java         | 12 +++++
 .../apache/camel/impl/DefaultCamelContext.java  | 15 ++++++
 .../apache/camel/impl/DefaultRouteContext.java  |  8 +++
 .../apache/camel/impl/DefaultUnitOfWork.java    | 22 ++++----
 .../management/mbean/ManagedCamelContext.java   | 16 ++++++
 .../java/org/apache/camel/spi/UnitOfWork.java   |  6 +--
 ...ContextAllowUseOriginalMessageFalseTest.java | 54 ++++++++++++++++++++
 ...lContextAllowUseOriginalMessageTrueTest.java | 54 ++++++++++++++++++++
 .../camel/impl/OriginalMessageProcessor.java    | 36 +++++++++++++
 .../blueprint/CamelContextFactoryBean.java      | 10 ++++
 .../xml/AbstractCamelContextFactoryBean.java    |  5 ++
 .../camel/spring/CamelContextFactoryBean.java   | 10 ++++
 ...ContextAllowUseOriginalMessageFalseTest.java | 33 ++++++++++++
 ...lContextAllowUseOriginalMessageTrueTest.java | 33 ++++++++++++
 ...lContextAllowUseOriginalMessageFalseTest.xml | 39 ++++++++++++++
 ...elContextAllowUseOriginalMessageTrueTest.xml | 39 ++++++++++++++
 .../camel/karaf/commands/ContextInfo.java       | 13 ++---
 18 files changed, 406 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/camel-core/src/main/java/org/apache/camel/RuntimeConfiguration.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/RuntimeConfiguration.java 
b/camel-core/src/main/java/org/apache/camel/RuntimeConfiguration.java
index 3a1c92d..0bcaff1 100644
--- a/camel-core/src/main/java/org/apache/camel/RuntimeConfiguration.java
+++ b/camel-core/src/main/java/org/apache/camel/RuntimeConfiguration.java
@@ -151,4 +151,24 @@ public interface RuntimeConfiguration {
      */
     ShutdownRunningTask getShutdownRunningTask();
 
+    /**
+     * Sets whether to allow access to the original message from Camel's error 
handler,
+     * or from {@link org.apache.camel.spi.UnitOfWork#getOriginalInMessage()}.
+     * <p/>
+     * Turning this off can optimize performance, as defensive copy of the 
original message is not needed.
+     *
+     * @param allowUseOriginalMessage the option to use.
+     */
+    void setAllowUseOriginalMessage(Boolean allowUseOriginalMessage);
+
+    /**
+     * Sets whether to allow access to the original message from Camel's error 
handler,
+     * or from {@link org.apache.camel.spi.UnitOfWork#getOriginalInMessage()}.
+     * <p/>
+     * Turning this off can optimize performance, as defensive copy of the 
original message is not needed.
+     *
+     * @return the option
+     */
+    Boolean isAllowUseOriginalMessage();
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
index 5ec2a4c..15bd452 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
@@ -119,6 +119,18 @@ public interface ManagedCamelContextMBean extends 
ManagedPerformanceCounterMBean
     @ManagedAttribute(description = "Average load over the last fifteen 
minutes")
     String getLoad15();
 
+    @ManagedAttribute(description = "Whether breadcrumbs is in use")
+    boolean isUseBreadcrumb();
+
+    @ManagedAttribute(description = "Whether allowing access to the original 
message during routing")
+    boolean isAllowUseOriginalMessage();
+
+    @ManagedAttribute(description = "Whether message history is enabled")
+    boolean isMessageHistory();
+
+    @ManagedAttribute(description = "Whether MDC logging is supported")
+    boolean isUseMDCLogging();
+
     @ManagedOperation(description = "Start Camel")
     void start() throws Exception;
 

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java 
b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 0f5e0c8..39348bc 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -185,6 +185,7 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
     private Boolean typeConverterStatisticsEnabled = Boolean.FALSE;
     private Boolean useMDCLogging = Boolean.FALSE;
     private Boolean useBreadcrumb = Boolean.TRUE;
+    private Boolean allowUseOriginalMessage = Boolean.TRUE;
     private Long delay;
     private ErrorHandlerFactory errorHandlerBuilder;
     private final Object errorHandlerExecutorServiceLock = new Object();
@@ -1700,6 +1701,12 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
                 }
             }
         }
+
+        if (isAllowUseOriginalMessage()) {
+            log.info("AllowUseOriginalMessage is enabled. If access to the 
original message is not needed,"
+                    + " then its recommended to turn this option off as it may 
improve performance.");
+        }
+
         if (streamCachingInUse) {
             // stream caching is in use so enable the strategy
             getStreamCachingStrategy().setEnabled(true);
@@ -2641,6 +2648,14 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
         this.shutdownRunningTask = shutdownRunningTask;
     }
 
+    public void setAllowUseOriginalMessage(Boolean allowUseOriginalMessage) {
+        this.allowUseOriginalMessage = allowUseOriginalMessage;
+    }
+
+    public Boolean isAllowUseOriginalMessage() {
+        return allowUseOriginalMessage != null && allowUseOriginalMessage;
+    }
+
     public ExecutorServiceManager getExecutorServiceManager() {
         return this.executorServiceManager;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java 
b/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
index 2680e84..aeb8b91 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
@@ -320,6 +320,14 @@ public class DefaultRouteContext implements RouteContext {
         this.shutdownRoute = shutdownRoute;
     }
 
+    public void setAllowUseOriginalMessage(Boolean allowUseOriginalMessage) {
+        throw new IllegalArgumentException("This option can only be configured 
on CamelContext");
+    }
+
+    public Boolean isAllowUseOriginalMessage() {
+        return getCamelContext().isAllowUseOriginalMessage();
+    }
+
     public ShutdownRoute getShutdownRoute() {
         if (shutdownRoute != null) {
             return shutdownRoute;

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java 
b/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java
index db8dc27..e8b98e0 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java
@@ -79,16 +79,18 @@ public class DefaultUnitOfWork implements UnitOfWork, 
Service {
         tracedRouteNodes = new DefaultTracedRouteNodes();
         context = exchange.getContext();
 
-        // TODO: Camel 3.0: the copy on facade strategy will help us here in 
the future
-        // TODO: optimize to only copy original message if enabled to do so in 
the route
-        // special for JmsMessage as it can cause it to loose headers later.
-        // This will be resolved when we get the message facade with copy on 
write implemented
-        if 
(exchange.getIn().getClass().getName().equals("org.apache.camel.component.jms.JmsMessage"))
 {
-            this.originalInMessage = new DefaultMessage();
-            this.originalInMessage.setBody(exchange.getIn().getBody());
-            
this.originalInMessage.getHeaders().putAll(exchange.getIn().getHeaders());
-        } else {
-            this.originalInMessage = exchange.getIn().copy();
+        if (context.isAllowUseOriginalMessage()) {
+            // TODO: Camel 3.0: the copy on facade strategy will help us here 
in the future
+            // TODO: optimize to only copy original message if enabled to do 
so in the route
+            // special for JmsMessage as it can cause it to loose headers 
later.
+            // This will be resolved when we get the message facade with copy 
on write implemented
+            if 
(exchange.getIn().getClass().getName().equals("org.apache.camel.component.jms.JmsMessage"))
 {
+                this.originalInMessage = new DefaultMessage();
+                this.originalInMessage.setBody(exchange.getIn().getBody());
+                
this.originalInMessage.getHeaders().putAll(exchange.getIn().getHeaders());
+            } else {
+                this.originalInMessage = exchange.getIn().copy();
+            }
         }
 
         // TODO: Optimize to only copy if useOriginalMessage has been enabled

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index 4414a76..1e2d6d4 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -182,6 +182,22 @@ public class ManagedCamelContext extends 
ManagedPerformanceCounter implements Ti
         return String.format("%.2f", load.getLoad15());
     }
 
+    public boolean isUseBreadcrumb() {
+        return context.isUseBreadcrumb();
+    }
+
+    public boolean isAllowUseOriginalMessage() {
+        return context.isAllowUseOriginalMessage();
+    }
+
+    public boolean isMessageHistory() {
+        return context.isMessageHistory();
+    }
+
+    public boolean isUseMDCLogging() {
+        return context.isUseMDCLogging();
+    }
+
     public void onTimer() {
         load.update(getInflightExchanges());
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/camel-core/src/main/java/org/apache/camel/spi/UnitOfWork.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/UnitOfWork.java 
b/camel-core/src/main/java/org/apache/camel/spi/UnitOfWork.java
index 2f8d419..5100666 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/UnitOfWork.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/UnitOfWork.java
@@ -80,10 +80,10 @@ public interface UnitOfWork extends Service {
     /**
      * Gets the original IN {@link Message} this Unit of Work was started with.
      * <p/>
-     * <b>Important: </b> This is subject for change in a later Camel release, 
where we plan to only
-     * support getting the original IN message if you have enabled this option 
explicit.
+     * The original message is only returned if the option {@link 
org.apache.camel.RuntimeConfiguration#isAllowUseOriginalMessage()}
+     * is enabled. If its disabled, then <tt>null</tt> is returned.
      *
-     * @return the original IN {@link Message}, may return <tt>null</tt> in a 
later Camel release (see important note).
+     * @return the original IN {@link Message}, or <tt>null</tt> if using 
original message is disabled.
      */
     Message getOriginalInMessage();
 

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextAllowUseOriginalMessageFalseTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextAllowUseOriginalMessageFalseTest.java
 
b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextAllowUseOriginalMessageFalseTest.java
new file mode 100644
index 0000000..cf2bf98
--- /dev/null
+++ 
b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextAllowUseOriginalMessageFalseTest.java
@@ -0,0 +1,54 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+public class DefaultCamelContextAllowUseOriginalMessageFalseTest extends 
ContextTestSupport {
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        context.setAllowUseOriginalMessage(false);
+        return context;
+    }
+
+    public void testUseOriginalMessageFalse() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
+        getMockEndpoint("mock:result").expectedHeaderReceived("HasOriginal", 
"false");
+
+        template.sendBody("direct:start", "World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .transform().simple("Bye ${body}")
+                    .process(new OriginalMessageProcessor())
+                    .to("mock:result");
+            }
+        };
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextAllowUseOriginalMessageTrueTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextAllowUseOriginalMessageTrueTest.java
 
b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextAllowUseOriginalMessageTrueTest.java
new file mode 100644
index 0000000..f1adf4a
--- /dev/null
+++ 
b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextAllowUseOriginalMessageTrueTest.java
@@ -0,0 +1,54 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+public class DefaultCamelContextAllowUseOriginalMessageTrueTest extends 
ContextTestSupport {
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        context.setAllowUseOriginalMessage(true);
+        return context;
+    }
+
+    public void testUseOriginalMessageTrue() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
+        getMockEndpoint("mock:result").expectedHeaderReceived("HasOriginal", 
"true");
+        getMockEndpoint("mock:result").expectedHeaderReceived("OriginalBody", 
"World");
+
+        template.sendBody("direct:start", "World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .transform().simple("Bye ${body}")
+                    .process(new OriginalMessageProcessor())
+                    .to("mock:result");
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/camel-core/src/test/java/org/apache/camel/impl/OriginalMessageProcessor.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/impl/OriginalMessageProcessor.java 
b/camel-core/src/test/java/org/apache/camel/impl/OriginalMessageProcessor.java
new file mode 100644
index 0000000..ef0bd6f
--- /dev/null
+++ 
b/camel-core/src/test/java/org/apache/camel/impl/OriginalMessageProcessor.java
@@ -0,0 +1,36 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+
+public class OriginalMessageProcessor implements Processor {
+
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        Message original = exchange.getUnitOfWork().getOriginalInMessage();
+        if (original == null) {
+            exchange.getIn().setHeader("HasOriginal", "false");
+        } else {
+            exchange.getIn().setHeader("HasOriginal", "true");
+            exchange.getIn().setHeader("OriginalBody", original.getBody());
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
----------------------------------------------------------------------
diff --git 
a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
 
b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
index 1e71c62..72dc978 100644
--- 
a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
+++ 
b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
@@ -96,6 +96,8 @@ public class CamelContextFactoryBean extends 
AbstractCamelContextFactoryBean<Blu
     @XmlAttribute(required = false)
     private String useBreadcrumb;
     @XmlAttribute(required = false)
+    private String allowUseOriginalMessage;
+    @XmlAttribute(required = false)
     private String managementNamePattern;
     @XmlAttribute(required = false)
     private String threadNamePattern;
@@ -332,6 +334,14 @@ public class CamelContextFactoryBean extends 
AbstractCamelContextFactoryBean<Blu
         this.useBreadcrumb = useBreadcrumb;
     }
 
+    public String getAllowUseOriginalMessage() {
+        return allowUseOriginalMessage;
+    }
+
+    public void setAllowUseOriginalMessage(String allowUseOriginalMessage) {
+        this.allowUseOriginalMessage = allowUseOriginalMessage;
+    }
+
     public String getManagementNamePattern() {
         return managementNamePattern;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
----------------------------------------------------------------------
diff --git 
a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
 
b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index f2ee007..10e27e3 100644
--- 
a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ 
b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -569,6 +569,8 @@ public abstract class AbstractCamelContextFactoryBean<T 
extends ModelCamelContex
 
     public abstract String getUseBreadcrumb();
 
+    public abstract String getAllowUseOriginalMessage();
+
     public abstract String getManagementNamePattern();
 
     public abstract String getThreadNamePattern();
@@ -642,6 +644,9 @@ public abstract class AbstractCamelContextFactoryBean<T 
extends ModelCamelContex
         if (getUseBreadcrumb() != null) {
             ctx.setUseBreadcrumb(CamelContextHelper.parseBoolean(getContext(), 
getUseBreadcrumb()));
         }
+        if (getAllowUseOriginalMessage() != null) {
+            
ctx.setAllowUseOriginalMessage(CamelContextHelper.parseBoolean(getContext(), 
getAllowUseOriginalMessage()));
+        }
         if (getManagementNamePattern() != null) {
             
ctx.getManagementNameStrategy().setNamePattern(getManagementNamePattern());
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
----------------------------------------------------------------------
diff --git 
a/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
 
b/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
index 03f265e..7663e8b 100644
--- 
a/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
+++ 
b/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
@@ -104,6 +104,8 @@ public class CamelContextFactoryBean extends 
AbstractCamelContextFactoryBean<Spr
     @XmlAttribute(required = false)
     private String useBreadcrumb;
     @XmlAttribute(required = false)
+    private String allowUseOriginalMessage;
+    @XmlAttribute(required = false)
     private String managementNamePattern;
     @XmlAttribute(required = false)
     private String threadNamePattern;
@@ -547,6 +549,14 @@ public class CamelContextFactoryBean extends 
AbstractCamelContextFactoryBean<Spr
         this.useBreadcrumb = useBreadcrumb;
     }
 
+    public String getAllowUseOriginalMessage() {
+        return allowUseOriginalMessage;
+    }
+
+    public void setAllowUseOriginalMessage(String allowUseOriginalMessage) {
+        this.allowUseOriginalMessage = allowUseOriginalMessage;
+    }
+
     public String getManagementNamePattern() {
         return managementNamePattern;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageFalseTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageFalseTest.java
 
b/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageFalseTest.java
new file mode 100644
index 0000000..6ffe0fe
--- /dev/null
+++ 
b/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageFalseTest.java
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.impl;
+
+import org.apache.camel.CamelContext;
+import 
org.apache.camel.impl.DefaultCamelContextAllowUseOriginalMessageFalseTest;
+
+import static 
org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
+/**
+ *
+ */
+public class SpringDefaultCamelContextAllowUseOriginalMessageFalseTest extends 
DefaultCamelContextAllowUseOriginalMessageFalseTest {
+
+    protected CamelContext createCamelContext() throws Exception {
+        return createSpringCamelContext(this, 
"org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageFalseTest.xml");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageTrueTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageTrueTest.java
 
b/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageTrueTest.java
new file mode 100644
index 0000000..f8f847a
--- /dev/null
+++ 
b/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageTrueTest.java
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.impl;
+
+import org.apache.camel.CamelContext;
+import 
org.apache.camel.impl.DefaultCamelContextAllowUseOriginalMessageTrueTest;
+
+import static 
org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
+/**
+ *
+ */
+public class SpringDefaultCamelContextAllowUseOriginalMessageTrueTest extends 
DefaultCamelContextAllowUseOriginalMessageTrueTest {
+
+    protected CamelContext createCamelContext() throws Exception {
+        return createSpringCamelContext(this, 
"org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageTrueTest.xml");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageFalseTest.xml
----------------------------------------------------------------------
diff --git 
a/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageFalseTest.xml
 
b/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageFalseTest.xml
new file mode 100644
index 0000000..ab42e4b
--- /dev/null
+++ 
b/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageFalseTest.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://camel.apache.org/schema/spring 
http://camel.apache.org/schema/spring/camel-spring.xsd
+    ">
+
+  <bean id="proc" class="org.apache.camel.impl.OriginalMessageProcessor"/>
+
+  <camelContext allowUseOriginalMessage="false" 
xmlns="http://camel.apache.org/schema/spring";>
+    <route>
+      <from uri="direct:start"/>
+      <transform>
+        <simple>Bye ${body}</simple>
+      </transform>
+      <process ref="proc"/>
+      <to uri="mock:result"/>
+    </route>
+
+  </camelContext>
+
+</beans>

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageTrueTest.xml
----------------------------------------------------------------------
diff --git 
a/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageTrueTest.xml
 
b/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageTrueTest.xml
new file mode 100644
index 0000000..168befb
--- /dev/null
+++ 
b/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringDefaultCamelContextAllowUseOriginalMessageTrueTest.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://camel.apache.org/schema/spring 
http://camel.apache.org/schema/spring/camel-spring.xsd
+    ">
+
+  <bean id="proc" class="org.apache.camel.impl.OriginalMessageProcessor"/>
+
+  <camelContext allowUseOriginalMessage="true" 
xmlns="http://camel.apache.org/schema/spring";>
+    <route>
+      <from uri="direct:start"/>
+      <transform>
+        <simple>Bye ${body}</simple>
+      </transform>
+      <process ref="proc"/>
+      <to uri="mock:result"/>
+    </route>
+
+  </camelContext>
+
+</beans>

http://git-wip-us.apache.org/repos/asf/camel/blob/10361242/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInfo.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInfo.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInfo.java
index 1fd1508..d82a8fa 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInfo.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInfo.java
@@ -72,6 +72,7 @@ public class ContextInfo extends CamelCommandSupport {
         System.out.println(StringEscapeUtils.unescapeJava("\tSuspended: " + 
camelContext.isSuspended()));
         System.out.println(StringEscapeUtils.unescapeJava("\tShutdown timeout: 
"
                 + 
camelContext.getShutdownStrategy().getTimeUnit().toSeconds(camelContext.getShutdownStrategy().getTimeout())
 + " sec."));
+        System.out.println(StringEscapeUtils.unescapeJava("\tAllow 
UseOriginalMessage: " + camelContext.isAllowUseOriginalMessage()));
         System.out.println(StringEscapeUtils.unescapeJava("\tMessage History: 
" + camelContext.isMessageHistory()));
         System.out.println(StringEscapeUtils.unescapeJava("\tTracing: " + 
camelContext.isTracing()));
         System.out.println("");
@@ -98,14 +99,14 @@ public class ContextInfo extends CamelCommandSupport {
             System.out.println(StringEscapeUtils.unescapeJava("\t" + name));
         }
 
-        System.out.println("");
-        
System.out.println(StringEscapeUtils.unescapeJava("\u001B[1mLanguages\u001B[0m"));
-        for (String language : camelContext.getLanguageNames()) {
-            System.out.println(StringEscapeUtils.unescapeJava("\t" + 
language));
-        }
-
         if (mode != null && mode.equals("--verbose")) {
             System.out.println("");
+            
System.out.println(StringEscapeUtils.unescapeJava("\u001B[1mLanguages\u001B[0m"));
+            for (String language : camelContext.getLanguageNames()) {
+                System.out.println(StringEscapeUtils.unescapeJava("\t" + 
language));
+            }
+
+            System.out.println("");
             
System.out.println(StringEscapeUtils.unescapeJava("\u001B[1mEndpoints\u001B[0m"));
             for (Endpoint endpoint : camelContext.getEndpoints()) {
                 System.out.println(StringEscapeUtils.unescapeJava("\t" + 
endpoint.getEndpointUri()));

Reply via email to