You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/03/04 16:35:55 UTC

svn commit: r919025 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/ camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/main/java/org/apache/camel/impl/ camel-core/src/main/java/org/apache/camel/model/ camel-core/src/main/ja...

Author: davsclaus
Date: Thu Mar  4 15:35:54 2010
New Revision: 919025

URL: http://svn.apache.org/viewvc?rev=919025&view=rev
Log:
CAMEL-2523: Added removeHeaders DSL

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/RemoveHeadersDefinition.java
      - copied, changed from r918911, camel/trunk/camel-core/src/main/java/org/apache/camel/model/RemoveHeaderDefinition.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RemoveHeadersTest.java
      - copied, changed from r918911, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersTest.java
      - copied, changed from r918911, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeaderTest.java
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/removeHeaders.xml
      - copied, changed from r918911, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/removeHeader.xml
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/Message.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java
    camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyCallHttpThenExceptionTest.java
    camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/RichMessage.scala

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Message.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Message.java?rev=919025&r1=919024&r2=919025&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Message.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Message.java Thu Mar  4 15:35:54 2010
@@ -127,6 +127,14 @@
     Object removeHeader(String name);
 
     /**
+     * Removes the headers from this message
+     *
+     * @param pattern pattern of names
+     * @return boolean whether any headers was removed
+     */
+    boolean removeHeaders(String pattern);
+
+    /**
      * Returns all of the headers associated with the message
      *
      * @return all the headers in a Map

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java?rev=919025&r1=919024&r2=919025&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java Thu Mar  4 15:35:54 2010
@@ -171,6 +171,22 @@
     }
 
     /**
+     * Removes the headers on the IN message
+     */
+    public static Processor removeHeaders(final String pattern) {
+        return new Processor() {
+            public void process(Exchange exchange) {
+                exchange.getIn().removeHeaders(pattern);
+            }
+
+            @Override
+            public String toString() {
+                return "removeHeaders(" + pattern +  ")";
+            }
+        };
+    }
+
+    /**
      * Removes the header on the FAULT message
      */
     public static Processor removeFaultHeader(final String name) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java?rev=919025&r1=919024&r2=919025&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java Thu Mar  4 15:35:54 2010
@@ -24,6 +24,7 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.util.EndpointHelper;
 import org.apache.camel.util.MessageHelper;
 
 /**
@@ -120,6 +121,22 @@
         return headers.remove(name);
     }
 
+    public boolean removeHeaders(String pattern) {
+        if (!hasHeaders()) {
+            return false;
+        }
+
+        boolean matches = false;
+        for (Map.Entry<String, Object> entry : headers.entrySet()) {
+            String key = entry.getKey();
+            if (EndpointHelper.matchPattern(key, pattern)) {
+                matches = true;
+                headers.remove(entry.getKey());
+            }
+        }
+        return matches;
+    }
+
     public Map<String, Object> getHeaders() {
         if (headers == null) {
             headers = createHeaders();

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java?rev=919025&r1=919024&r2=919025&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java Thu Mar  4 15:35:54 2010
@@ -2033,6 +2033,19 @@
     }
 
     /**
+     * Adds a processor which removes the headers on the IN message
+     *
+     * @param pattern  a pattern to match header names to be removed
+     * @return the builder
+     */
+    @SuppressWarnings("unchecked")
+    public Type removeHeaders(String pattern) {
+        RemoveHeadersDefinition answer = new RemoveHeadersDefinition(pattern);
+        addOutput(answer);
+        return (Type) this;
+    }
+
+    /**
      * Adds a processor which removes the header on the FAULT message
      *
      * @param name  the header name

Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/model/RemoveHeadersDefinition.java (from r918911, camel/trunk/camel-core/src/main/java/org/apache/camel/model/RemoveHeaderDefinition.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RemoveHeadersDefinition.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/model/RemoveHeadersDefinition.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/model/RemoveHeaderDefinition.java&r1=918911&r2=919025&rev=919025&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/RemoveHeaderDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/RemoveHeadersDefinition.java Thu Mar  4 15:35:54 2010
@@ -27,47 +27,47 @@
 import org.apache.camel.util.ObjectHelper;
 
 /**
- * Represents an XML &lt;removeHeader/&gt; element
+ * Represents an XML &lt;removeHeaders/&gt; element
  */
-@XmlRootElement(name = "removeHeader")
+@XmlRootElement(name = "removeHeaders")
 @XmlAccessorType(XmlAccessType.FIELD)
-public class RemoveHeaderDefinition extends OutputDefinition<ProcessorDefinition> {
+public class RemoveHeadersDefinition extends OutputDefinition<ProcessorDefinition> {
     @XmlAttribute(required = true)
-    private String headerName;   
-    
-    public RemoveHeaderDefinition() {
-    }
-    
-    public RemoveHeaderDefinition(String headerName) {
-        setHeaderName(headerName);
+    private String pattern;
+
+    public RemoveHeadersDefinition() {
+    }
+
+    public RemoveHeadersDefinition(String pattern) {
+        setPattern(pattern);
     }
-    
+
     @Override
     public String toString() {
-        return "RemoveHeader[" + getHeaderName() + "]";
+        return "RemoveHeaders[" + getPattern() + "]";
     }
 
     @Override
     public String getShortName() {
-        return "removeHeader";
+        return "removeHeaders";
     }
 
     @Override
     public String getLabel() {
-        return "removeHeader[" + getHeaderName() + "]";
+        return "removeHeaders[" + getPattern() + "]";
     }
 
     @Override
     public Processor createProcessor(RouteContext routeContext) throws Exception {
-        ObjectHelper.notNull(getHeaderName(), "headerName", this);
-        return ProcessorBuilder.removeHeader(getHeaderName());
+        ObjectHelper.notNull(getPattern(), "patterns", this);
+        return ProcessorBuilder.removeHeaders(getPattern());
     }
 
-    public void setHeaderName(String headerName) {
-        this.headerName = headerName;
+    public void setPattern(String pattern) {
+        this.pattern = pattern;
     }
 
-    public String getHeaderName() {
-        return headerName;
+    public String getPattern() {
+        return pattern;
     }
-}
+}
\ No newline at end of file

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java?rev=919025&r1=919024&r2=919025&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java Thu Mar  4 15:35:54 2010
@@ -94,7 +94,7 @@
      *   <li>otherwise returns false</li>
      * </ul>
      *
-     * @param uri  the endpoint uri
+     * @param uri     the endpoint uri
      * @param pattern a pattern to match
      * @return <tt>true</tt> if match, <tt>false</tt> otherwise.
      */
@@ -111,43 +111,57 @@
             // try without :// also
             String scheme = ObjectHelper.before(uri, "://");
             String path = ObjectHelper.after(uri, "://");
-            if (doMatchEndpoint(scheme + ":" + path, pattern)) {
+            if (matchPattern(scheme + ":" + path, pattern)) {
                 return true;
             }
         } else {
             // try with :// also
             String scheme = ObjectHelper.before(uri, ":");
             String path = ObjectHelper.after(uri, ":");
-            if (doMatchEndpoint(scheme + "://" + path, pattern)) {
+            if (matchPattern(scheme + "://" + path, pattern)) {
                 return true;
             }
         }
 
         // and fallback to test with the uri as is
-        return doMatchEndpoint(uri, pattern);
+        return matchPattern(uri, pattern);
     }
 
-
-    private static boolean doMatchEndpoint(String uri, String pattern) {
-        if (uri.equals(pattern)) {
+    /**
+     * Matches the name with the given pattern.
+     * <p/>
+     * The match rules are applied in this order:
+     * <ul>
+     *   <li>exact match, returns true</li>
+     *   <li>wildcard match (pattern ends with a * and the name starts with the pattern), returns true</li>
+     *   <li>regular expression match, returns true</li>
+     *   <li>otherwise returns false</li>
+     * </ul>
+     *
+     * @param name    the name
+     * @param pattern a pattern to match
+     * @return <tt>true</tt> if match, <tt>false</tt> otherwise.
+     */
+    public static boolean matchPattern(String name, String pattern) {
+        if (name.equals(pattern)) {
             // exact match
             return true;
         }
 
         // we have wildcard support in that hence you can match with: file* to match any file endpoints
-        if (pattern.endsWith("*") && uri.startsWith(pattern.substring(0, pattern.length() - 1))) {
+        if (pattern.endsWith("*") && name.startsWith(pattern.substring(0, pattern.length() - 1))) {
             return true;
         }
 
         // match by regular expression
         try {
-            if (uri.matches(pattern)) {
+            if (name.matches(pattern)) {
                 return true;
             }
         } catch (PatternSyntaxException e) {
             // ignore
         }
-        
+
         // no match
         return false;
     }
@@ -155,8 +169,8 @@
     /**
      * Sets the regular properties on the given bean
      *
-     * @param context the camel context
-     * @param bean the bean
+     * @param context    the camel context
+     * @param bean       the bean
      * @param parameters parameters
      * @throws Exception is thrown if setting property fails
      */
@@ -170,8 +184,8 @@
      * This is convention over configuration, setting all reference parameters (using {@link #isReferenceParameter(String)}
      * by looking it up in registry and setting it on the bean if possible.
      *
-     * @param context the camel context
-     * @param bean the bean
+     * @param context    the camel context
+     * @param bean       the bean
      * @param parameters parameters
      * @throws Exception is thrown if setting property fails
      */
@@ -208,17 +222,16 @@
     public static boolean isReferenceParameter(String parameter) {
         return parameter != null && parameter.trim().startsWith("#");
     }
-    
+
     /**
      * Resolves a reference parameter by making a lookup in the registry.
-     * 
-     * @param <T> type of object to lookup.
+     *
+     * @param <T>     type of object to lookup.
      * @param context Camel context to use for lookup.
-     * @param value reference parameter value.
-     * @param type type of object to lookup.
-     * @return lookup result. 
-     * @throws IllegalArgumentException if referenced object was not found in 
-     *         registry.
+     * @param value   reference parameter value.
+     * @param type    type of object to lookup.
+     * @return lookup result.
+     * @throws IllegalArgumentException if referenced object was not found in registry.
      */
     public static <T> T resolveReferenceParameter(CamelContext context, String value, Class<T> type) {
         return resolveReferenceParameter(context, value, type, true);
@@ -226,15 +239,15 @@
 
     /**
      * Resolves a reference parameter by making a lookup in the registry.
-     * 
-     * @param <T> type of object to lookup.
+     *
+     * @param <T>     type of object to lookup.
      * @param context Camel context to use for lookup.
-     * @param value reference parameter value.
-     * @param type type of object to lookup.
-     * @return lookup result (or <code>null</code> only if 
-     *         <code>mandatory</code> is <code>false</code>). 
-     * @throws IllegalArgumentException if object was not found in registry and 
-     *         <code>mandatory</code> is <code>true</code>.
+     * @param value   reference parameter value.
+     * @param type    type of object to lookup.
+     * @return lookup result (or <code>null</code> only if
+     *         <code>mandatory</code> is <code>false</code>).
+     * @throws IllegalArgumentException if object was not found in registry and
+     *                                  <code>mandatory</code> is <code>true</code>.
      */
     public static <T> T resolveReferenceParameter(CamelContext context, String value, Class<T> type, boolean mandatory) {
         String valueNoHash = value.replaceAll("#", "");
@@ -249,20 +262,16 @@
      * Resolves a reference list parameter by making lookups in the registry.
      * The parameter value must be one of the following:
      * <ul>
-     * <li>a comma-separated list of references to beans of type T</li>
-     * <li>a single reference to a bean type T</li>
-     * <li>a single reference to a bean of type java.util.List</li>
+     *   <li>a comma-separated list of references to beans of type T</li>
+     *   <li>a single reference to a bean type T</li>
+     *   <li>a single reference to a bean of type java.util.List</li>
      * </ul>
-     * 
-     * @param context
-     *            Camel context to use for lookup.
-     * @param value
-     *            reference parameter value.
-     * @param elementType
-     *            result list element type.
+     *
+     * @param context     Camel context to use for lookup.
+     * @param value       reference parameter value.
+     * @param elementType result list element type.
      * @return list of lookup results.
-     * @throws IllegalArgumentException if any referenced object was not found 
-     *         in registry.
+     * @throws IllegalArgumentException if any referenced object was not found in registry.
      */
     @SuppressWarnings("unchecked")
     public static <T> List<T> resolveReferenceListParameter(CamelContext context, String value, Class<T> elementType) {
@@ -274,7 +283,7 @@
             Object bean = resolveReferenceParameter(context, elements.get(0).trim(), Object.class);
             if (bean instanceof List) {
                 // The bean is a list
-                return (List)bean;
+                return (List) bean;
             } else {
                 // The bean is a list element
                 return Arrays.asList(elementType.cast(bean));
@@ -287,5 +296,5 @@
             return result;
         }
     }
-    
+
 }

Modified: camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index?rev=919025&r1=919024&r2=919025&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index (original)
+++ camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index Thu Mar  4 15:35:54 2010
@@ -52,6 +52,7 @@
 RecipientListDefinition
 RedeliveryPolicyDefinition
 RemoveHeaderDefinition
+RemoveHeadersDefinition
 RemovePropertyDefinition
 ResequenceDefinition
 RollbackDefinition

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RemoveHeadersTest.java (from r918911, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RemoveHeadersTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RemoveHeadersTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java&r1=918911&r2=919025&rev=919025&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RemoveHeadersTest.java Thu Mar  4 15:35:54 2010
@@ -16,55 +16,63 @@
  */
 package org.apache.camel.processor;
 
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 
-public class RemoveHeaderTest extends ContextTestSupport {
-    private MockEndpoint end;
-    private MockEndpoint mid;
-    private String headerName = "foo";
-    private String expectedHeaderValue = "bar";
-
-    public void testSetHeaderMidRouteThenRemove() throws Exception {
-        mid.expectedMessageCount(1);
-        end.expectedMessageCount(1);
-        
-        template.sendBody("direct:start", "<blah/>");
+public class RemoveHeadersTest extends ContextTestSupport {
+
+    public void testRemoveHeadersWildcard() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:end");
+        mock.expectedBodiesReceived("Hello World");
+        mock.expectedHeaderReceived("duck", "Donald");
+
+        Map headers = new HashMap();
+        headers.put("dudeCool", "cool");
+        headers.put("dudeWicket", "wicket");
+        headers.put("duck", "Donald");
+        headers.put("foo", "bar");
+
+        template.sendBodyAndHeaders("direct:start", "Hello World", headers);
 
-        // make sure we got the message
         assertMockEndpointsSatisfied();
 
-        List<Exchange> midExchanges = mid.getExchanges();
-        Exchange midExchange = midExchanges.get(0);
-        String actualHeaderValue = midExchange.getIn().getHeader(headerName, String.class);
-
-        assertEquals(expectedHeaderValue, actualHeaderValue);
-        
-        List<Exchange> endExchanges = end.getExchanges();
-        Exchange endExchange = endExchanges.get(0);
-        
-        // header should be removed
-        assertNull(endExchange.getIn().getHeader(headerName, String.class));        
+        assertEquals(1, mock.getReceivedExchanges().get(0).getIn().getHeaders().size());
     }
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        end = getMockEndpoint("mock:end");
-        mid = getMockEndpoint("mock:mid");
+    public void testRemoveHeadersRegEx() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:end");
+        mock.expectedBodiesReceived("Hello World");
+        mock.expectedHeaderReceived("duck", "Donald");
+        mock.expectedHeaderReceived("BeerHeineken", "Good");
+
+        Map headers = new HashMap();
+        headers.put("dudeCool", "cool");
+        headers.put("dudeWicket", "wicket");
+        headers.put("duck", "Donald");
+        headers.put("BeerCarlsberg", "Great");
+        headers.put("BeerTuborg", "Also Great");
+        headers.put("BeerHeineken", "Good");
+
+        template.sendBodyAndHeaders("direct:start", "Hello World", headers);
+
+        assertMockEndpointsSatisfied();
+
+        assertEquals(2, mock.getReceivedExchanges().get(0).getIn().getHeaders().size());
     }
 
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from("direct:start").
-                    setHeader(headerName).constant(expectedHeaderValue).to("mock:mid").
-                    removeHeader(headerName).to("mock:end");
+                from("direct:start")
+                    .removeHeaders("dude*")
+                    .removeHeaders("Beer(Carlsberg|Tuborg)")
+                    .removeHeaders("foo")
+                    .to("mock:end");
             }
         };
     }
-}
+}
\ No newline at end of file

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyCallHttpThenExceptionTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyCallHttpThenExceptionTest.java?rev=919025&r1=919024&r2=919025&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyCallHttpThenExceptionTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyCallHttpThenExceptionTest.java Thu Mar  4 15:35:54 2010
@@ -20,7 +20,6 @@
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -29,7 +28,6 @@
 public class JettyCallHttpThenExceptionTest extends CamelTestSupport {
 
     @Test
-    @Ignore
     public void testJettyCallHttpThenException() throws Exception {
         getMockEndpoint("mock:foo").expectedBodiesReceived("World");
         getMockEndpoint("mock:bar").expectedBodiesReceived("Bye World");
@@ -54,23 +52,10 @@
             public void configure() throws Exception {
                 from("jetty://http://localhost:8234/myserver")
                     .to("log:A")
-                    .convertBodyTo(String.class)
-                    .removeHeader(Exchange.HTTP_PATH)
-                    .removeHeader(Exchange.HTTP_BASE_URI)
-                    .removeHeader(Exchange.HTTP_RESPONSE_CODE)
-                    .removeHeader(Exchange.HTTP_CHARACTER_ENCODING)
-                    .removeHeader(Exchange.HTTP_CHUNKED)
-                    .removeHeader(Exchange.HTTP_METHOD)
-                    .removeHeader(Exchange.HTTP_QUERY)
-                    .removeHeader(Exchange.HTTP_RESPONSE_CODE)
-                    .removeHeader(Exchange.HTTP_SERVLET_REQUEST)
-                    .removeHeader(Exchange.HTTP_SERVLET_RESPONSE)
-                    .removeHeader(Exchange.HTTP_URI)
-                    .removeHeader(Exchange.HTTP_URL)
-                    .removeHeader("Content-Length")
+                    // remove http headers before and after invoking http service
+                    .removeHeaders("CamelHttp*")
                     .to("http://localhost:8234/other")
-                    .convertBodyTo(String.class)
-                    .to("log:B")
+                    .removeHeaders("CamelHttp*")
                     .to("mock:bar")
                     // now just force an exception immediately
                     .throwException(new IllegalArgumentException("I cannot do this"));

Modified: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/RichMessage.scala
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/RichMessage.scala?rev=919025&r1=919024&r2=919025&view=diff
==============================================================================
--- camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/RichMessage.scala (original)
+++ camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/RichMessage.scala Thu Mar  4 15:35:54 2010
@@ -30,6 +30,8 @@
 
   def removeHeader(name: String) = message.removeHeader(name)
 
+  def removeHeaders(pattern: String) = message.removeHeaders(pattern)
+
   def removeAttachment(id: String) = message.removeAttachment(id)
 
   def isFault = message.isFault

Copied: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersTest.java (from r918911, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeaderTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeaderTest.java&r1=918911&r2=919025&rev=919025&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeaderTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersTest.java Thu Mar  4 15:35:54 2010
@@ -17,12 +17,14 @@
 package org.apache.camel.spring.processor;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.processor.RemoveHeaderTest;
+import org.apache.camel.processor.RemoveHeadersTest;
+
 import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
 
-public class SpringRemoveHeaderTest extends RemoveHeaderTest {
+public class SpringRemoveHeadersTest extends RemoveHeadersTest {
+
     protected CamelContext createCamelContext() throws Exception {
-        return createSpringCamelContext(this,
-                "org/apache/camel/spring/processor/removeHeader.xml");
+        return createSpringCamelContext(this, "org/apache/camel/spring/processor/removeHeaders.xml");
     }
-}
+    
+}
\ No newline at end of file

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/removeHeaders.xml (from r918911, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/removeHeader.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/removeHeaders.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/removeHeaders.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/removeHeader.xml&r1=918911&r2=919025&rev=919025&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/removeHeader.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/removeHeaders.xml Thu Mar  4 15:35:54 2010
@@ -21,17 +21,18 @@
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
-  <!-- START SNIPPET: example -->
-  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
-    <route>
-      <from uri="direct:start"/>      
-      <setHeader headerName="foo">
-        <constant>bar</constant>
-      </setHeader>
-      <to uri="mock:mid"/>
-      <removeHeader headerName="foo"/>
-      <to uri="mock:end"/>     
-    </route>
-  </camelContext>
-  <!-- END SNIPPET: example -->
+    <!-- START SNIPPET: example -->
+    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+        <route>
+            <from uri="direct:start"/>
+            <!-- remove all dude headers by wildcard -->
+            <removeHeaders pattern="dude*"/>
+            <!-- remove all Carlsberg or Tuborg headers using reg exp -->
+            <removeHeaders pattern="Beer(Carlsberg|Tuborg)"/>
+            <!-- remove the header with the name foo -->
+            <removeHeaders pattern="foo"/>
+            <to uri="mock:end"/>
+        </route>
+    </camelContext>
+    <!-- END SNIPPET: example -->
 </beans>