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 2009/12/14 15:21:16 UTC
svn commit: r890339 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/ main/java/org/apache/camel/processor/
main/java/org/apache/camel/processor/aggregate/
test/java/org/apache/camel/issues/ test/java/org/apache/camel/processor/
Author: davsclaus
Date: Mon Dec 14 14:21:16 2009
New Revision: 890339
URL: http://svn.apache.org/viewvc?rev=890339&view=rev
Log:
CAMEL-2288: Remove filter feature from split,enrich,pollEnrich as it was confusing and should not have been implemented in the first place.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/issues/TryCatchFinallyOnExceptionIssueTest.java (with props)
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FilterBeforeSplitTest.java
- copied, changed from r890261, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldNotSkipFilteredExchanges.java (contents, props changed)
- copied, changed from r890261, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldNotSkipFilteredExchanges.java (contents, props changed)
- copied, changed from r890261, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldSkipFilteredExchanges.java
Removed:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldSkipFilteredExchanges.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Enricher.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/FilterProcessor.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/MulticastProcessor.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/DefaultAggregationCollection.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java?rev=890339&r1=890338&r2=890339&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Mon Dec 14 14:21:16 2009
@@ -66,7 +66,6 @@
String FILE_NAME_PRODUCED = "CamelFileNameProduced";
String FILE_PATH = "CamelFilePath";
String FILE_PARENT = "CamelFileParent";
- String FILTERED = "CamelFiltered";
String GROUPED_EXCHANGE = "CamelGroupedExchange";
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Enricher.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Enricher.java?rev=890339&r1=890338&r2=890339&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Enricher.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Enricher.java Mon Dec 14 14:21:16 2009
@@ -35,7 +35,7 @@
* input data and additional data is delegated to an {@link AggregationStrategy}
* object.
* <p/>
- * Uses a {@link org.apache.camel.Producer} to obatin the additional data as opposed to {@link PollEnricher}
+ * Uses a {@link org.apache.camel.Producer} to obtain the additional data as opposed to {@link PollEnricher}
* that uses a {@link org.apache.camel.PollingConsumer}.
*
* @see PollEnricher
@@ -107,21 +107,12 @@
} else {
prepareResult(exchange);
- // aggregate original exchange and resource exchange
- // but do not aggregate if the resource exchange was filtered
- Boolean filtered = resourceExchange.getProperty(Exchange.FILTERED, Boolean.class);
- if (filtered == null || !filtered) {
- // prepare the exchanges for aggregation
- ExchangeHelper.prepareAggregation(exchange, resourceExchange);
- Exchange aggregatedExchange = aggregationStrategy.aggregate(exchange, resourceExchange);
- if (aggregatedExchange != null) {
- // copy aggregation result onto original exchange (preserving pattern)
- copyResultsPreservePattern(exchange, aggregatedExchange);
- }
- } else {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Cannot aggregate exchange as its filtered: " + resourceExchange);
- }
+ // prepare the exchanges for aggregation
+ ExchangeHelper.prepareAggregation(exchange, resourceExchange);
+ Exchange aggregatedExchange = aggregationStrategy.aggregate(exchange, resourceExchange);
+ if (aggregatedExchange != null) {
+ // copy aggregation result onto original exchange (preserving pattern)
+ copyResultsPreservePattern(exchange, aggregatedExchange);
}
}
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/FilterProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/FilterProcessor.java?rev=890339&r1=890338&r2=890339&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/FilterProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/FilterProcessor.java Mon Dec 14 14:21:16 2009
@@ -39,14 +39,14 @@
}
public void process(Exchange exchange) throws Exception {
- if (predicate.matches(exchange)) {
+ boolean matches = predicate.matches(exchange);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Filter matches: " + matches + " for exchange: " + exchange);
+ }
+
+ if (matches) {
super.process(exchange);
- } else {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Marking exchange as filtered: " + exchange);
- }
- // mark this exchange as filtered
- exchange.setProperty(Exchange.FILTERED, Boolean.TRUE);
}
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/MulticastProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/MulticastProcessor.java?rev=890339&r1=890338&r2=890339&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/MulticastProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/MulticastProcessor.java Mon Dec 14 14:21:16 2009
@@ -291,17 +291,11 @@
* @param exchange the exchange to be added to the result
*/
protected synchronized void doAggregate(AtomicExchange result, Exchange exchange) {
- // only aggregate if the exchange is not filtered (eg by the FilterProcessor)
- Boolean filtered = exchange.getProperty(Exchange.FILTERED, Boolean.class);
- if (aggregationStrategy != null && (filtered == null || !filtered)) {
+ if (aggregationStrategy != null) {
// prepare the exchanges for aggregation
Exchange oldExchange = result.get();
ExchangeHelper.prepareAggregation(oldExchange, exchange);
result.set(aggregationStrategy.aggregate(oldExchange, exchange));
- } else {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Cannot aggregate exchange as its filtered: " + exchange);
- }
}
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java?rev=890339&r1=890338&r2=890339&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java Mon Dec 14 14:21:16 2009
@@ -17,7 +17,6 @@
package org.apache.camel.processor;
import org.apache.camel.Exchange;
-import org.apache.camel.ExchangePattern;
import org.apache.camel.PollingConsumer;
import org.apache.camel.Processor;
import org.apache.camel.impl.EventDrivenPollingConsumer;
@@ -35,7 +34,7 @@
* input data and additional data is delegated to an {@link org.apache.camel.processor.aggregate.AggregationStrategy}
* object.
* <p/>
- * Uses a {@link org.apache.camel.PollingConsumer} to obatin the additional data as opposed to {@link Enricher}
+ * Uses a {@link org.apache.camel.PollingConsumer} to obtain the additional data as opposed to {@link Enricher}
* that uses a {@link org.apache.camel.Producer}.
*
* @see Enricher
@@ -145,24 +144,12 @@
} else {
prepareResult(exchange);
- // aggregate original exchange and resource exchange
- // but do not aggregate if the resource exchange was filtered
- Boolean filtered = null;
- if (resourceExchange != null) {
- filtered = resourceExchange.getProperty(Exchange.FILTERED, Boolean.class);
- }
- if (filtered == null || !filtered) {
- // prepare the exchanges for aggregation
- ExchangeHelper.prepareAggregation(exchange, resourceExchange);
- Exchange aggregatedExchange = aggregationStrategy.aggregate(exchange, resourceExchange);
- if (aggregatedExchange != null) {
- // copy aggregation result onto original exchange (preserving pattern)
- copyResultsPreservePattern(exchange, aggregatedExchange);
- }
- } else {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Cannot aggregate exchange as its filtered: " + resourceExchange);
- }
+ // prepare the exchanges for aggregation
+ ExchangeHelper.prepareAggregation(exchange, resourceExchange);
+ Exchange aggregatedExchange = aggregationStrategy.aggregate(exchange, resourceExchange);
+ if (aggregatedExchange != null) {
+ // copy aggregation result onto original exchange (preserving pattern)
+ copyResultsPreservePattern(exchange, aggregatedExchange);
}
}
}
@@ -189,21 +176,6 @@
}
}
- /**
- * Creates a new {@link org.apache.camel.impl.DefaultExchange} instance from the given
- * <code>exchange</code>. The resulting exchange's pattern is defined by
- * <code>pattern</code>.
- *
- * @param source exchange to copy from.
- * @param pattern exchange pattern to set.
- * @return created exchange.
- */
- protected Exchange createResourceExchange(Exchange source, ExchangePattern pattern) {
- Exchange target = source.copy();
- target.setPattern(pattern);
- return target;
- }
-
private static void prepareResult(Exchange exchange) {
if (exchange.getPattern().isOutCapable()) {
exchange.getOut().copyFrom(exchange.getIn());
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/DefaultAggregationCollection.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/DefaultAggregationCollection.java?rev=890339&r1=890338&r2=890339&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/DefaultAggregationCollection.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/DefaultAggregationCollection.java Mon Dec 14 14:21:16 2009
@@ -58,15 +58,6 @@
@Override
public boolean add(Exchange exchange) {
- // do not add exchange if it was filtered
- Boolean filtered = exchange.getProperty(Exchange.FILTERED, Boolean.class);
- if (filtered != null && filtered) {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Cannot aggregate exchange as its filtered: " + exchange);
- }
- return false;
- }
-
Object correlationKey = correlationExpression.evaluate(exchange, Object.class);
if (LOG.isTraceEnabled()) {
LOG.trace("Evaluated expression: " + correlationExpression + " as correlation key: " + correlationKey);
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/TryCatchFinallyOnExceptionIssueTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/issues/TryCatchFinallyOnExceptionIssueTest.java?rev=890339&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/issues/TryCatchFinallyOnExceptionIssueTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/issues/TryCatchFinallyOnExceptionIssueTest.java Mon Dec 14 14:21:16 2009
@@ -0,0 +1,59 @@
+/**
+ * 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.issues;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class TryCatchFinallyOnExceptionIssueTest extends ContextTestSupport {
+
+ public void testTryCatchFinallyOnExceptionIssue() throws Exception {
+ // doTry .. doCatch .. doFinally uses its own error handling so we wont get one here
+ getMockEndpoint("mock:error").expectedMessageCount(0);
+
+ getMockEndpoint("mock:finally").expectedMessageCount(1);
+ getMockEndpoint("mock:end").expectedMessageCount(0);
+
+ template.sendBody("seda:start", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("seda:start")
+ .onException(Exception.class)
+ .handled(true)
+ .maximumRedeliveries(2)
+ .to("mock:error")
+ .end()
+ .doTry()
+ .throwException(new IllegalArgumentException("Damn"))
+ .doFinally()
+ .to("mock:finally")
+ .end()
+ .to("mock:end");
+ }
+ };
+ }
+}
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/TryCatchFinallyOnExceptionIssueTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/TryCatchFinallyOnExceptionIssueTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FilterBeforeSplitTest.java (from r890261, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FilterBeforeSplitTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FilterBeforeSplitTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java&r1=890261&r2=890339&rev=890339&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FilterBeforeSplitTest.java Mon Dec 14 14:21:16 2009
@@ -16,9 +16,6 @@
*/
package org.apache.camel.processor;
-import java.util.ArrayList;
-import java.util.List;
-
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.Predicate;
@@ -27,26 +24,36 @@
import org.apache.camel.processor.aggregate.AggregationStrategy;
/**
- * Unit test to verify that Splitter aggregator does not included filtered exchanges.
+ * Unit test to verify that Splitter aggregator clear the filtered history in case
+ * filter has been used <b>before</b> the splitter.
*
* @version $Revision$
*/
-public class SplitShouldSkipFilteredExchanges extends ContextTestSupport {
- public void testSplitWithFilter() throws Exception {
+public class FilterBeforeSplitTest extends ContextTestSupport {
+
+ public void testFilterBeforeSplit() throws Exception {
+ getMockEndpoint("mock:good").expectedBodiesReceived("Hello World how are you?");
+
MockEndpoint mock = getMockEndpoint("mock:result");
- mock.expectedBodiesReceived("Hello World,Bye World");
+ mock.expectedBodiesReceived("Hello,World,how,are,you?");
- MockEndpoint filtered = getMockEndpoint("mock:filtered");
- filtered.expectedBodiesReceived("Hello World", "Bye World");
+ MockEndpoint split = getMockEndpoint("mock:split");
+ split.expectedBodiesReceived("Hello", "World", "how", "are", "you?");
- List<String> body = new ArrayList<String>();
- body.add("Hello World");
- body.add("Hi there");
- body.add("Bye World");
- body.add("How do you do?");
+ template.sendBody("direct:start", "Hello World how are you?");
+
+ assertMockEndpointsSatisfied();
+ }
- template.sendBody("direct:start", body);
+ public void testFiltered() throws Exception {
+ getMockEndpoint("mock:good").expectedBodiesReceived("Hello World");
+ getMockEndpoint("mock:before").expectedBodiesReceived("I will be filtered", "Hello World");
+ getMockEndpoint("mock:result").expectedBodiesReceived("I,will,be,filtered", "Hello,World");
+ getMockEndpoint("mock:split").expectedBodiesReceived("I", "will", "be", "filtered", "Hello", "World");
+
+ template.sendBody("direct:start", "I will be filtered");
+ template.sendBody("direct:start", "Hello World");
assertMockEndpointsSatisfied();
}
@@ -56,15 +63,17 @@
return new RouteBuilder() {
@Override
public void configure() throws Exception {
+ Predicate goodWord = body().contains("World");
+
from("direct:start")
- .to("direct:split")
+ .to("mock:before")
+ .filter(goodWord)
+ .to("mock:good")
+ .end()
+ .split(body().tokenize(" "), new MyAggregationStrategy())
+ .to("mock:split")
+ .end()
.to("mock:result");
-
- Predicate goodWord = body().contains("World");
- from("direct:split")
- .split(body(List.class), new MyAggregationStrategy())
- .filter(goodWord)
- .to("mock:filtered");
}
};
}
@@ -85,4 +94,4 @@
}
}
-}
+}
\ No newline at end of file
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldNotSkipFilteredExchanges.java (from r890261, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldNotSkipFilteredExchanges.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldNotSkipFilteredExchanges.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java&r1=890261&r2=890339&rev=890339&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldNotSkipFilteredExchanges.java Mon Dec 14 14:21:16 2009
@@ -27,15 +27,15 @@
import org.apache.camel.processor.aggregate.AggregationStrategy;
/**
- * Unit test to verify that Splitter aggregator does not included filtered exchanges.
+ * Unit test to verify that Splitter aggregator always include any exchanges.
*
* @version $Revision$
*/
-public class SplitShouldSkipFilteredExchanges extends ContextTestSupport {
+public class SplitShouldNotSkipFilteredExchanges extends ContextTestSupport {
public void testSplitWithFilter() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
- mock.expectedBodiesReceived("Hello World,Bye World");
+ mock.expectedBodiesReceived("Hello World,Hi there,Bye World,How do you do?");
MockEndpoint filtered = getMockEndpoint("mock:filtered");
filtered.expectedBodiesReceived("Hello World", "Bye World");
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldNotSkipFilteredExchanges.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldNotSkipFilteredExchanges.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldNotSkipFilteredExchanges.java (from r890261, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldSkipFilteredExchanges.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldNotSkipFilteredExchanges.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldNotSkipFilteredExchanges.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldSkipFilteredExchanges.java&r1=890261&r2=890339&rev=890339&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldSkipFilteredExchanges.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldNotSkipFilteredExchanges.java Mon Dec 14 14:21:16 2009
@@ -22,11 +22,11 @@
import org.apache.camel.builder.RouteBuilder;
/**
- * Unit test to verify that Splitter aggregator does not included filtered exchanges.
+ * Unit test to verify that Splitter aggregator always include any exchanges.
*
* @version $Revision$
*/
-public class SplitWithNestedFilterShouldSkipFilteredExchanges extends SplitShouldSkipFilteredExchanges {
+public class SplitWithNestedFilterShouldNotSkipFilteredExchanges extends SplitShouldNotSkipFilteredExchanges {
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldNotSkipFilteredExchanges.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldNotSkipFilteredExchanges.java
------------------------------------------------------------------------------
svn:keywords = Rev Date