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/07/07 08:36:13 UTC
svn commit: r961251 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/model/ main/java/org/apache/camel/spi/
test/java/org/apache/camel/processor/
Author: davsclaus
Date: Wed Jul 7 06:36:13 2010
New Revision: 961251
URL: http://svn.apache.org/viewvc?rev=961251&view=rev
Log:
CAMEL-2914: Adjusted the DefinitionAwarePolicy slightly to ensure the Policy contract is preserved in the wrap method.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/PolicyDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/TransactedDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/DefinitionAwarePolicy.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DefinitionPolicyPerProcessorTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/PolicyDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/PolicyDefinition.java?rev=961251&r1=961250&r2=961251&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/PolicyDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/PolicyDefinition.java Wed Jul 7 06:36:13 2010
@@ -23,7 +23,6 @@ import javax.xml.bind.annotation.XmlRoot
import javax.xml.bind.annotation.XmlTransient;
import org.apache.camel.Processor;
-import org.apache.camel.processor.DelegateProcessor;
import org.apache.camel.processor.WrapProcessor;
import org.apache.camel.spi.DefinitionAwarePolicy;
import org.apache.camel.spi.Policy;
@@ -122,18 +121,20 @@ public class PolicyDefinition extends Ou
@Override
public Processor createProcessor(RouteContext routeContext) throws Exception {
- DelegateProcessor childProcessor = new DelegateProcessor();
-
Policy policy = resolvePolicy(routeContext);
ObjectHelper.notNull(policy, "policy", this);
- Processor target;
+
+ // before wrap
if (policy instanceof DefinitionAwarePolicy) {
- target = ((DefinitionAwarePolicy)policy).wrap(routeContext, childProcessor, this);
- } else {
- target = policy.wrap(routeContext, childProcessor);
+ DefinitionAwarePolicy aware = (DefinitionAwarePolicy) policy;
+ aware.beforeWrap(routeContext, this);
}
-
- childProcessor.setProcessor(this.createChildProcessor(routeContext, true));
+
+ // create processor after the before wrap
+ Processor childProcessor = this.createChildProcessor(routeContext, true);
+
+ // wrap
+ Processor target = policy.wrap(routeContext, childProcessor);
// wrap the target so it becomes a service and we can manage its lifecycle
WrapProcessor wrap = new WrapProcessor(target, childProcessor);
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/TransactedDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/TransactedDefinition.java?rev=961251&r1=961250&r2=961251&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/TransactedDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/TransactedDefinition.java Wed Jul 7 06:36:13 2010
@@ -27,6 +27,7 @@ import javax.xml.bind.annotation.XmlTran
import org.apache.camel.Processor;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.processor.WrapProcessor;
+import org.apache.camel.spi.DefinitionAwarePolicy;
import org.apache.camel.spi.Policy;
import org.apache.camel.spi.RouteContext;
import org.apache.camel.spi.TransactedPolicy;
@@ -130,10 +131,19 @@ public class TransactedDefinition extend
@Override
public Processor createProcessor(RouteContext routeContext) throws Exception {
- Processor childProcessor = this.createChildProcessor(routeContext, true);
-
Policy policy = resolvePolicy(routeContext);
ObjectHelper.notNull(policy, "policy", this);
+
+ // before wrap
+ if (policy instanceof DefinitionAwarePolicy) {
+ DefinitionAwarePolicy aware = (DefinitionAwarePolicy) policy;
+ aware.beforeWrap(routeContext, this);
+ }
+
+ // create processor after the before wrap
+ Processor childProcessor = this.createChildProcessor(routeContext, true);
+
+ // wrap
Processor target = policy.wrap(routeContext, childProcessor);
// wrap the target so it becomes a service and we can manage its lifecycle
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/DefinitionAwarePolicy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/DefinitionAwarePolicy.java?rev=961251&r1=961250&r2=961251&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/DefinitionAwarePolicy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/DefinitionAwarePolicy.java Wed Jul 7 06:36:13 2010
@@ -16,23 +16,29 @@
*/
package org.apache.camel.spi;
-import org.apache.camel.Processor;
import org.apache.camel.model.ProcessorDefinition;
/**
- * A strategy capable of applying interceptors to a processor
+ * A strategy capable of applying interceptors to a processor.
+ * <p/>
+ * This <i>aware</i> policy allows you to do any custom work before the processor is wrapped.
+ * For example to manipulate the {@link org.apache.camel.model.ProcessorDefinition definiton}.
*
+ *
+ * @see org.apache.camel.spi.Policy
* @version $Revision: 761894 $
*/
public interface DefinitionAwarePolicy extends Policy {
/**
- * Wraps any applicable interceptors around the given processor
+ * Callback invoked before the wrap.
+ * <p/>
+ * This allows you to do any custom logic before the processor is wrapped. For example to
+ * manipulate the {@link org.apache.camel.model.ProcessorDefinition definiton}
*
- * @param routeContext the route context
- * @param ProcessorDefinition<ProcessorDefinition>
- * @param processor the processor to be intercepted
- * @return either the original processor or a processor wrapped in one or more interceptors
+ * @param routeContext the route context
+ * @param definition the processor definition
*/
- Processor wrap(RouteContext routeContext, Processor processor, ProcessorDefinition<?> processorDefinition);
+ void beforeWrap(RouteContext routeContext, ProcessorDefinition<?> definition);
+
}
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DefinitionPolicyPerProcessorTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DefinitionPolicyPerProcessorTest.java?rev=961251&r1=961250&r2=961251&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DefinitionPolicyPerProcessorTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DefinitionPolicyPerProcessorTest.java Wed Jul 7 06:36:13 2010
@@ -19,12 +19,11 @@ package org.apache.camel.processor;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
-import org.apache.camel.builder.ExpressionClause;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.JndiRegistry;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.SetBodyDefinition;
-import org.apache.camel.model.language.ExpressionDefinition;
+import org.apache.camel.model.language.ConstantExpression;
import org.apache.camel.spi.DefinitionAwarePolicy;
import org.apache.camel.spi.RouteContext;
@@ -75,23 +74,16 @@ public class DefinitionPolicyPerProcesso
this.name = name;
}
- public Processor wrap(RouteContext routeContext, final Processor processor) {
- throw new UnsupportedOperationException("This method should not be called");
- }
-
public int getInvoked() {
return invoked;
}
- public Processor wrap(final RouteContext routeContext,
- final Processor processor,
- final ProcessorDefinition<?> processorDefinition) {
-
- // alter the child definition
- SetBodyDefinition bodyDef = (SetBodyDefinition) processorDefinition.getOutputs().get(0);
- ((ExpressionClause<?>)((ExpressionDefinition)bodyDef.getExpression()).getExpressionValue()).constant("body was altered");
+ public void beforeWrap(RouteContext routeContext, ProcessorDefinition<?> definition) {
+ SetBodyDefinition bodyDef = (SetBodyDefinition) definition.getOutputs().get(0);
+ bodyDef.setExpression(new ConstantExpression("body was altered"));
+ }
- // make sure the normal "wrap" still works.
+ public Processor wrap(final RouteContext routeContext, final Processor processor) {
return new Processor() {
public void process(Exchange exchange) throws Exception {
invoked++;
@@ -100,5 +92,6 @@ public class DefinitionPolicyPerProcesso
}
};
}
+
}
}