Thank you Willem. Regards, On Monday, November 17, 2014 2:31 PM, Willem Jiang <willem.ji...@gmail.com> wrote:
Hi Andrea, Do worry about that, I’m working on the fix now. Regards, -- Willem Jiang Red Hat, Inc. Web: http://www.redhat.com Blog: http://willemjiang.blogspot.com (English) http://jnn.iteye.com (Chinese) Twitter: willemjiang Weibo: 姜宁willem On November 17, 2014 at 8:13:25 PM, Andrea Cosentino (ancosen1...@yahoo.com.invalid) wrote: > Ok, sorry about this. > I'll work on the camel-scala component. Sorry. > > On Monday, November 17, 2014 12:56 PM, Claus Ibsen wrote: > > > The Scala DSL needs to have this added, as the compiler fails now. > > ERROR] > /Users/davsclaus/workspace/camel/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala:28: > > error: class RichExchange needs to be abstract, since: > [ERROR] it has 2 unimplemented members. > [ERROR] /** As seen from class RichExchange, the missing signatures > are as follows. > [ERROR] * For convenience, these are usable as stub implementations. > [ERROR] */ > [ERROR] def removeProperties(x$1: String,x$2: String*): Boolean = ??? > [ERROR] def removeProperties(x$1: String): Boolean = ??? > [ERROR] > [ERROR] class RichExchange(val exchange : Exchange) extends Exchange { > [ERROR] ^ > > On Mon, Nov 17, 2014 at 5:11 AM, wrote: > > Repository: camel > > Updated Branches: > > refs/heads/master f686fcb0d -> 0273cd737 > > > > > > CAMEL-8052 Added RemovePropertiesDefinition > > > > > > Project: http://git-wip-us.apache.org/repos/asf/camel/repo > > Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/29ba4c3d > > Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/29ba4c3d > > Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/29ba4c3d > > > > Branch: refs/heads/master > > Commit: 29ba4c3da595a6e09e1c93151b671750a14f8eff > > Parents: f686fcb > > Author: ancosen > > Authored: Sat Nov 15 16:20:04 2014 +0100 > > Committer: Willem Jiang > > Committed: Mon Nov 17 12:06:02 2014 +0800 > > > > ---------------------------------------------------------------------- > > .../main/java/org/apache/camel/Exchange.java | 18 ++++ > > .../apache/camel/builder/ProcessorBuilder.java | 32 ++++++ > > .../org/apache/camel/impl/DefaultExchange.java | 34 ++++++ > > .../apache/camel/model/ProcessorDefinition.java | 27 +++++ > > .../camel/model/RemovePropertiesDefinition.java | 106 +++++++++++++++++++ > > .../resources/org/apache/camel/model/jaxb.index | 1 + > > .../apache/camel/impl/DefaultExchangeTest.java | 70 ++++++++++++ > > .../RemovePropertiesWithExclusionTest.java | 85 +++++++++++++++ > > .../RemovePropertiesWithoutExclusionTest.java | 79 ++++++++++++++ > > 9 files changed, 452 insertions(+) > > ---------------------------------------------------------------------- > > > > > > http://git-wip-us.apache.org/repos/asf/camel/blob/29ba4c3d/camel-core/src/main/java/org/apache/camel/Exchange.java > > > > ---------------------------------------------------------------------- > > diff --git a/camel-core/src/main/java/org/apache/camel/Exchange.java > > b/camel-core/src/main/java/org/apache/camel/Exchange.java > > index a33253a..d8e5a4c 100644 > > --- a/camel-core/src/main/java/org/apache/camel/Exchange.java > > +++ b/camel-core/src/main/java/org/apache/camel/Exchange.java > > @@ -532,5 +532,23 @@ public interface Exchange { > > * @return the on completions > > */ > > List handoverCompletions(); > > + > > + /** > > + * Remove all of the properties associated with the exchange matching a > > specific pattern > > + * > > + * @param pattern pattern of names > > + * @return boolean whether any properties matched > > + */ > > + boolean removeProperties(String pattern); > > + > > + /** > > + * Removes the properties from this exchange that match the given pattern, > > > > + * except for the ones matching one ore more excludePatterns > > + * > > + * @param pattern pattern of names that should be removed > > + * @param excludePatterns one or more pattern of properties names that > > should be excluded > (= preserved) > > + * @return boolean whether any properties matched > > + */ > > + boolean removeProperties(String pattern, String... excludePatterns); > > > > } > > > > http://git-wip-us.apache.org/repos/asf/camel/blob/29ba4c3d/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java > > > > ---------------------------------------------------------------------- > > diff --git > > a/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java > b/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java > > index b909f99..f246f92 100644 > > --- > > a/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java > > +++ > > b/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java > > @@ -264,6 +264,38 @@ public final class ProcessorBuilder { > > } > > }; > > } > > + > > + /** > > + * Removes the properties on the exchange > > + */ > > + public static Processor removeProperties(final String pattern) { > > + return new Processor() { > > + public void process(Exchange exchange) { > > + exchange.removeProperties(pattern); > > + } > > + > > + @Override > > + public String toString() { > > + return "removeProperties(" + pattern + ")"; > > + } > > + }; > > + } > > + > > + /** > > + * Removes all properties on the exchange, except for the ones provided in > > the names > parameter > > + */ > > + public static Processor removeProperties(final String pattern, final > > String... > exceptionPatterns) { > > + return new Processor() { > > + public void process(Exchange exchange) { > > + exchange.removeProperties(pattern, exceptionPatterns); > > + } > > + > > + @Override > > + public String toString() { > > + return "removeProperties(" + pattern + ", " + > > Arrays.toString(exceptionPatterns) > + ")"; > > + } > > + }; > > + } > > > > /** > > * Throws an exception > > > > http://git-wip-us.apache.org/repos/asf/camel/blob/29ba4c3d/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java > > > > ---------------------------------------------------------------------- > > diff --git > > a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java > b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java > > index 164ae67..513546d 100644 > > --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java > > +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java > > @@ -29,6 +29,7 @@ import org.apache.camel.Message; > > import org.apache.camel.MessageHistory; > > import org.apache.camel.spi.Synchronization; > > import org.apache.camel.spi.UnitOfWork; > > +import org.apache.camel.util.EndpointHelper; > > import org.apache.camel.util.ExchangeHelper; > > import org.apache.camel.util.ObjectHelper; > > > > @@ -187,6 +188,30 @@ public final class DefaultExchange implements Exchange > > { > > } > > return getProperties().remove(name); > > } > > + > > + public boolean removeProperties(String pattern) { > > + return removeProperties(pattern, (String[]) null); > > + } > > + > > + public boolean removeProperties(String pattern, String... > > excludePatterns) > { > > + if (!hasProperties()) { > > + return false; > > + } > > + > > + boolean matches = false; > > + for (Map.Entry entry : properties.entrySet()) { > > + String key = entry.getKey(); > > + if (EndpointHelper.matchPattern(key, pattern)) { > > + if (excludePatterns != null && isExcludePatternMatch(key, > > excludePatterns)) > { > > + continue; > > + } > > + matches = true; > > + properties.remove(entry.getKey()); > > + } > > + > > + } > > + return matches; > > + } > > > > public Map getProperties() { > > if (properties == null) { > > @@ -450,4 +475,13 @@ public final class DefaultExchange implements Exchange > > { > > } > > return answer; > > } > > + > > + private static boolean isExcludePatternMatch(String key, String... > > excludePatterns) > { > > + for (String pattern : excludePatterns) { > > + if (EndpointHelper.matchPattern(key, pattern)) { > > + return true; > > + } > > + } > > + return false; > > + } > > } > > > > http://git-wip-us.apache.org/repos/asf/camel/blob/29ba4c3d/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java > > > > ---------------------------------------------------------------------- > > diff --git > > a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java > b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java > > index a6a8457..cf37350 100644 > > --- > > a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java > > +++ > > b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java > > @@ -2873,6 +2873,33 @@ public abstract class ProcessorDefinition > > addOutput(answer); > > return (Type) this; > > } > > + > > + /** > > + * Adds a processor which removes the properties in the exchange > > + * > > + * @param pattern a pattern to match properties names to be removed > > + * @return the builder > > + */ > > + @SuppressWarnings("unchecked") > > + public Type removeProperties(String pattern) { > > + RemovePropertiesDefinition answer = new > > RemovePropertiesDefinition(pattern); > > + addOutput(answer); > > + return (Type) this; > > + } > > + > > + /** > > + * Adds a processor which removes the properties in the exchange > > + * > > + * @param pattern a pattern to match properties names to be removed > > + * @param excludePatterns one or more pattern of properties names that > > should be excluded > (= preserved) > > + * @return the builder > > + */ > > + @SuppressWarnings("unchecked") > > + public Type removeProperties(String pattern, String... excludePatterns) { > > + RemovePropertiesDefinition answer = new > > RemovePropertiesDefinition(pattern, > excludePatterns); > > + addOutput(answer); > > + return (Type) this; > > + } > > > > /** > > * Converts the IN message body to the specified type > > > > http://git-wip-us.apache.org/repos/asf/camel/blob/29ba4c3d/camel-core/src/main/java/org/apache/camel/model/RemovePropertiesDefinition.java > > > > ---------------------------------------------------------------------- > > diff --git > > a/camel-core/src/main/java/org/apache/camel/model/RemovePropertiesDefinition.java > > > b/camel-core/src/main/java/org/apache/camel/model/RemovePropertiesDefinition.java > > > new file mode 100644 > > index 0000000..8480447 > > --- /dev/null > > +++ > > b/camel-core/src/main/java/org/apache/camel/model/RemovePropertiesDefinition.java > > > > @@ -0,0 +1,106 @@ > > +/** > > + * 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.model; > > + > > +import javax.xml.bind.annotation.XmlAccessType; > > +import javax.xml.bind.annotation.XmlAccessorType; > > +import javax.xml.bind.annotation.XmlAttribute; > > +import javax.xml.bind.annotation.XmlRootElement; > > +import javax.xml.bind.annotation.XmlTransient; > > + > > +import org.apache.camel.Processor; > > +import org.apache.camel.builder.ProcessorBuilder; > > +import org.apache.camel.spi.RouteContext; > > +import org.apache.camel.util.ObjectHelper; > > + > > +/** > > + * Represents an XML <removeProperties/> element > > + */ > > +@XmlRootElement(name = "removeProperties") > > +@XmlAccessorType(XmlAccessType.FIELD) > > +public class RemovePropertiesDefinition extends NoOutputDefinition > { > > + @XmlAttribute(required = true) > > + private String pattern; > > + @XmlAttribute > > + private String excludePattern; > > + // in XML we cannot use String[] for attributes, so we provide a single > > attribute instead > > + @XmlTransient > > + private String[] excludePatterns; > > + > > + public RemovePropertiesDefinition() { > > + } > > + > > + public RemovePropertiesDefinition(String pattern) { > > + setPattern(pattern); > > + } > > + > > + public RemovePropertiesDefinition(String pattern, String... > > excludePatterns) > { > > + setPattern(pattern); > > + setExcludePatterns(excludePatterns); > > + } > > + > > + @Override > > + public String toString() { > > + return "removeProperties[" + getPattern() + "]"; > > + } > > + > > + @Override > > + public String getShortName() { > > + return "removeProperties"; > > + } > > + > > + @Override > > + public String getLabel() { > > + return "removeProperties[" + getPattern() + "]"; > > + } > > + > > + @Override > > + public Processor createProcessor(RouteContext routeContext) throws > > Exception > { > > + ObjectHelper.notNull(getPattern(), "patterns", this); > > + if (getExcludePatterns() != null) { > > + return ProcessorBuilder.removeProperties(getPattern(), > > getExcludePatterns()); > > + } else if (getExcludePattern() != null) { > > + return ProcessorBuilder.removeProperties(getPattern(), > > getExcludePattern()); > > + } else { > > + return ProcessorBuilder.removeProperties(getPattern()); > > + } > > + } > > + > > + public void setPattern(String pattern) { > > + this.pattern = pattern; > > + } > > + > > + public String getPattern() { > > + return pattern; > > + } > > + > > + public String[] getExcludePatterns() { > > + return excludePatterns; > > + } > > + > > + public void setExcludePatterns(String[] excludePatterns) { > > + this.excludePatterns = excludePatterns; > > + } > > + > > + public String getExcludePattern() { > > + return excludePattern; > > + } > > + > > + public void setExcludePattern(String excludePattern) { > > + this.excludePattern = excludePattern; > > + } > > +} > > \ No newline at end of file > > > > http://git-wip-us.apache.org/repos/asf/camel/blob/29ba4c3d/camel-core/src/main/resources/org/apache/camel/model/jaxb.index > > > > ---------------------------------------------------------------------- > > diff --git > > a/camel-core/src/main/resources/org/apache/camel/model/jaxb.index > b/camel-core/src/main/resources/org/apache/camel/model/jaxb.index > > index ea0d2b9..7e47451 100644 > > --- a/camel-core/src/main/resources/org/apache/camel/model/jaxb.index > > +++ b/camel-core/src/main/resources/org/apache/camel/model/jaxb.index > > @@ -58,6 +58,7 @@ RedeliveryPolicyDefinition > > RemoveHeaderDefinition > > RemoveHeadersDefinition > > RemovePropertyDefinition > > +RemovePropertiesDefinition > > ResequenceDefinition > > RestContextRefDefinition > > RollbackDefinition > > > > http://git-wip-us.apache.org/repos/asf/camel/blob/29ba4c3d/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java > > > > ---------------------------------------------------------------------- > > diff --git > > a/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java > b/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java > > index 87e858a..cd6fd7e 100644 > > --- > > a/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java > > +++ > > b/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java > > @@ -120,6 +120,76 @@ public class DefaultExchangeTest extends > > ExchangeTestSupport > { > > assertEquals("banana", exchange.getProperty("beer", "banana")); > > assertEquals("banana", exchange.getProperty("beer", "banana", > > String.class)); > > } > > + > > + public void testRemoveProperties() throws Exception { > > + exchange.removeProperty("foobar"); > > + assertFalse(exchange.hasProperties()); > > + > > + exchange.setProperty("fruit", "apple"); > > + exchange.setProperty("fruit1", "banana"); > > + exchange.setProperty("zone", "Africa"); > > + assertTrue(exchange.hasProperties()); > > + > > + assertEquals("apple", exchange.getProperty("fruit")); > > + assertEquals("banana", exchange.getProperty("fruit1")); > > + assertEquals("Africa", exchange.getProperty("zone")); > > + > > + exchange.removeProperties("fr*"); > > + assertTrue(exchange.hasProperties()); > > + assertEquals(exchange.getProperties().size(), 1); > > + assertEquals(null, exchange.getProperty("fruit", String.class)); > > + assertEquals(null, exchange.getProperty("fruit1", String.class)); > > + assertEquals("Africa", exchange.getProperty("zone", String.class)); > > + } > > + > > + public void testRemovePropertiesWithExclusion() throws Exception { > > + exchange.removeProperty("foobar"); > > + assertFalse(exchange.hasProperties()); > > + > > + exchange.setProperty("fruit", "apple"); > > + exchange.setProperty("fruit1", "banana"); > > + exchange.setProperty("fruit2", "peach"); > > + exchange.setProperty("zone", "Africa"); > > + assertTrue(exchange.hasProperties()); > > + > > + assertEquals("apple", exchange.getProperty("fruit")); > > + assertEquals("banana", exchange.getProperty("fruit1")); > > + assertEquals("peach", exchange.getProperty("fruit2")); > > + assertEquals("Africa", exchange.getProperty("zone")); > > + > > + exchange.removeProperties("fr*","fruit1","fruit2"); > > + assertTrue(exchange.hasProperties()); > > + assertEquals(exchange.getProperties().size(), 3); > > + assertEquals(null, exchange.getProperty("fruit", String.class)); > > + assertEquals("banana", exchange.getProperty("fruit1", String.class)); > > + assertEquals("peach", exchange.getProperty("fruit2", String.class)); > > + assertEquals("Africa", exchange.getProperty("zone", String.class)); > > + } > > + > > + public void testRemovePropertiesPatternWithAllExcluded() throws Exception > > > { > > + exchange.removeProperty("foobar"); > > + assertFalse(exchange.hasProperties()); > > + > > + exchange.setProperty("fruit", "apple"); > > + exchange.setProperty("fruit1", "banana"); > > + exchange.setProperty("fruit2", "peach"); > > + exchange.setProperty("zone", "Africa"); > > + assertTrue(exchange.hasProperties()); > > + > > + assertEquals("apple", exchange.getProperty("fruit")); > > + assertEquals("banana", exchange.getProperty("fruit1")); > > + assertEquals("peach", exchange.getProperty("fruit2")); > > + assertEquals("Africa", exchange.getProperty("zone")); > > + > > + exchange.removeProperties("fr*","fruit","fruit1","fruit2","zone"); > > + assertTrue(exchange.hasProperties()); > > + assertEquals(exchange.getProperties().size(), 4); > > + assertEquals("apple", exchange.getProperty("fruit", String.class)); > > + assertEquals("banana", exchange.getProperty("fruit1", String.class)); > > + assertEquals("peach", exchange.getProperty("fruit2", String.class)); > > + assertEquals("Africa", exchange.getProperty("zone", String.class)); > > + } > > + > > > > public void testInType() throws Exception { > > exchange.setIn(new MyMessage()); > > > > http://git-wip-us.apache.org/repos/asf/camel/blob/29ba4c3d/camel-core/src/test/java/org/apache/camel/processor/RemovePropertiesWithExclusionTest.java > > > > ---------------------------------------------------------------------- > > diff --git > > a/camel-core/src/test/java/org/apache/camel/processor/RemovePropertiesWithExclusionTest.java > > > b/camel-core/src/test/java/org/apache/camel/processor/RemovePropertiesWithExclusionTest.java > > > new file mode 100644 > > index 0000000..058681c > > --- /dev/null > > +++ > > b/camel-core/src/test/java/org/apache/camel/processor/RemovePropertiesWithExclusionTest.java > > > > @@ -0,0 +1,85 @@ > > +/** > > + * 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.processor; > > + > > +import java.util.List; > > + > > +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 RemovePropertiesWithExclusionTest extends ContextTestSupport > { > > + private MockEndpoint end; > > + private MockEndpoint mid; > > + private String propertyName = "foo"; > > + private String expectedPropertyValue = "bar"; > > + private String propertyName1 = "fee"; > > + private String expectedPropertyValue1 = "bar1"; > > + private String propertyName2 = "fiu"; > > + private String expectedPropertyValue2 = "bar2"; > > + private String pattern = "f*"; > > + private String exclusion = "fiu"; > > + > > + public void > > testSetExchangePropertiesMidRouteThenRemoveWithPatternAndExclusion() > throws Exception { > > + mid.expectedMessageCount(1); > > + end.expectedMessageCount(1); > > + > > + template.sendBody("direct:start", "message"); > > + > > + // make sure we got the message > > + assertMockEndpointsSatisfied(); > > + > > + List midExchanges = mid.getExchanges(); > > + Exchange midExchange = midExchanges.get(0); > > + String actualPropertyValue = midExchange.getProperty(propertyName, > > String.class); > > + String actualPropertyValue1 = midExchange.getProperty(propertyName1, > > String.class); > > + String actualPropertyValue2 = midExchange.getProperty(propertyName2, > > String.class); > > + > > + assertEquals(expectedPropertyValue, actualPropertyValue); > > + assertEquals(expectedPropertyValue1, actualPropertyValue1); > > + assertEquals(expectedPropertyValue2, actualPropertyValue2); > > + > > + List endExchanges = end.getExchanges(); > > + Exchange endExchange = endExchanges.get(0); > > + > > + // property should be removed > > + assertNull(endExchange.getProperty(propertyName, String.class)); > > + assertNull(endExchange.getProperty(propertyName1, String.class)); > > + assertEquals(expectedPropertyValue2, > > endExchange.getProperty(propertyName2, > String.class)); > > + } > > + > > + @Override > > + protected void setUp() throws Exception { > > + super.setUp(); > > + end = getMockEndpoint("mock:end"); > > + mid = getMockEndpoint("mock:mid"); > > + } > > + > > + protected RouteBuilder createRouteBuilder() { > > + return new RouteBuilder() { > > + public void configure() { > > + from("direct:start"). > > + setProperty(propertyName).constant(expectedPropertyValue) > > + .setProperty(propertyName1).constant(expectedPropertyValue1) > > + > > .setProperty(propertyName2).constant(expectedPropertyValue2).to("mock:mid"). > > > > + removeProperties(pattern,exclusion).to("mock:end"); > > + } > > + }; > > + } > > +} > > > > http://git-wip-us.apache.org/repos/asf/camel/blob/29ba4c3d/camel-core/src/test/java/org/apache/camel/processor/RemovePropertiesWithoutExclusionTest.java > > > > ---------------------------------------------------------------------- > > diff --git > > a/camel-core/src/test/java/org/apache/camel/processor/RemovePropertiesWithoutExclusionTest.java > > > b/camel-core/src/test/java/org/apache/camel/processor/RemovePropertiesWithoutExclusionTest.java > > > new file mode 100644 > > index 0000000..698d7b1 > > --- /dev/null > > +++ > > b/camel-core/src/test/java/org/apache/camel/processor/RemovePropertiesWithoutExclusionTest.java > > > > @@ -0,0 +1,79 @@ > > +/** > > + * 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.processor; > > + > > +import java.util.List; > > + > > +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 RemovePropertiesWithoutExclusionTest extends > > ContextTestSupport > { > > + private MockEndpoint end; > > + private MockEndpoint mid; > > + private String propertyName = "foo"; > > + private String expectedPropertyValue = "bar"; > > + private String propertyName1 = "fee"; > > + private String expectedPropertyValue1 = "bar1"; > > + private String pattern = "f*"; > > + > > + public void testSetExchangePropertiesMidRouteThenRemoveWithPattern() > > throws > Exception { > > + mid.expectedMessageCount(1); > > + end.expectedMessageCount(1); > > + > > + template.sendBody("direct:start", "message"); > > + > > + // make sure we got the message > > + assertMockEndpointsSatisfied(); > > + > > + List midExchanges = mid.getExchanges(); > > + Exchange midExchange = midExchanges.get(0); > > + String actualPropertyValue = midExchange.getProperty(propertyName, > > String.class); > > + String actualPropertyValue1 = midExchange.getProperty(propertyName1, > > String.class); > > + > > + assertEquals(expectedPropertyValue, actualPropertyValue); > > + assertEquals(expectedPropertyValue1, actualPropertyValue1); > > + > > + List endExchanges = end.getExchanges(); > > + Exchange endExchange = endExchanges.get(0); > > + > > + // property should be removed > > + assertNull(endExchange.getProperty(propertyName, String.class)); > > + assertNull(endExchange.getProperty(propertyName1, String.class)); > > + } > > + > > + @Override > > + protected void setUp() throws Exception { > > + super.setUp(); > > + end = getMockEndpoint("mock:end"); > > + mid = getMockEndpoint("mock:mid"); > > + } > > + > > + protected RouteBuilder createRouteBuilder() { > > + return new RouteBuilder() { > > + public void configure() { > > + from("direct:start"). > > + setProperty(propertyName).constant(expectedPropertyValue) > > + .setProperty(propertyName1).constant(expectedPropertyValue1) > > + .to("mock:mid"). > > + removeProperties(pattern).to("mock:end"); > > + } > > + }; > > + } > > +} > > > > > > -- > Claus Ibsen > ----------------- > Red Hat, Inc. > Email: cib...@redhat.com > Twitter: davsclaus > Blog: http://davsclaus.com > Author of Camel in Action: http://www.manning.com/ibsen > hawtio: http://hawt.io/ > fabric8: http://fabric8.io/ > > >