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/05/04 15:33:00 UTC

svn commit: r771301 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/ main/java/org/apache/camel/impl/ main/java/org/apache/camel/model/ main/java/org/apache/camel/spi/ test/java/org/apache/camel/processor/intercept/

Author: davsclaus
Date: Mon May  4 13:32:59 2009
New Revision: 771301

URL: http://svn.apache.org/viewvc?rev=771301&view=rev
Log:
CAMEL-1584: Added header for intercepted endpoint uri, so when using wildcards you known the real endpoint that was intercepted.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardHeaderUriTest.java
      - copied, changed from r771262, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardTest.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/InterceptFromDefinition.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EndpointStrategy.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptSendToEndpointDynamicTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=771301&r1=771300&r2=771301&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Mon May  4 13:32:59 2009
@@ -25,6 +25,7 @@
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.dataformat.DataFormatDefinition;
 import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.spi.ExchangeConverter;
 import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.FactoryFinderResolver;
@@ -35,7 +36,6 @@
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.TypeConverterRegistry;
-import org.apache.camel.spi.EndpointStrategy;
 
 /**
  * Interface used to represent the context used to configure routes and the

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=771301&r1=771300&r2=771301&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 May  4 13:32:59 2009
@@ -77,6 +77,8 @@
     String TRANSACTED = "CamelTransacted";
     String ROLLBACK_ONLY = "CamelRollbackOnly";
 
+    String INTERCEPTED_ENDPOINT = "CamelInterceptedEndpoint";
+
     /**
      * Returns the {@link ExchangePattern} (MEP) of this exchange.
      *

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=771301&r1=771300&r2=771301&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Mon May  4 13:32:59 2009
@@ -35,7 +35,6 @@
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.Processor;
 import org.apache.camel.ProducerTemplate;
-import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.Route;
 import org.apache.camel.Routes;
@@ -56,6 +55,7 @@
 import org.apache.camel.processor.interceptor.Tracer;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.ComponentResolver;
+import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.spi.ExchangeConverter;
 import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.FactoryFinderResolver;

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java?rev=771301&r1=771300&r2=771301&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java Mon May  4 13:32:59 2009
@@ -108,6 +108,9 @@
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("Sending to endpoint: " + getEndpointUri() + " is intercepted and detoured to: " + detour + " for exchange: " + exchange);
                 }
+                // add header with the real endpoint uri
+                exchange.getIn().setHeader(Exchange.INTERCEPTED_ENDPOINT, delegate.getEndpointUri());
+
                 detour.process(exchange);
                 // copy OUT to IN
                 if (exchange.hasOut()) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/InterceptFromDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/InterceptFromDefinition.java?rev=771301&r1=771300&r2=771301&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/InterceptFromDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/InterceptFromDefinition.java Mon May  4 13:32:59 2009
@@ -21,7 +21,9 @@
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.impl.ExpressionAdapter;
 import org.apache.camel.spi.RouteContext;
 
 /**
@@ -61,7 +63,22 @@
     }
 
     @Override
+    @SuppressWarnings("unchecked")
     public Processor createProcessor(RouteContext routeContext) throws Exception {
+        // insert a set property defintion so we can set the intercepted endpoint
+        // this allows us to use the same header for both the interceptFrom and interceptSendToEndpoint
+        // so end users is not confused if they should use another header for interceptFrom than interceptSendToEndpoint
+        SetHeaderDefinition headerDefinition = new SetHeaderDefinition(Exchange.INTERCEPTED_ENDPOINT, new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange, Class type) {
+                return exchange.getFromEndpoint().getEndpointUri();
+            }
+
+            public String toString() {
+                return "";
+            }
+        });
+        getOutputs().add(0, headerDefinition);
+
         return createOutputsProcessor(routeContext);
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EndpointStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EndpointStrategy.java?rev=771301&r1=771300&r2=771301&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EndpointStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EndpointStrategy.java Mon May  4 13:32:59 2009
@@ -30,6 +30,10 @@
  */
 public interface EndpointStrategy {
 
+    // TODO: Add more strategy methods for other endpoint related methods, such as lookup, remove etc.
+    // and add a base class EndpointStrategySupport that has noop impl of all methods so you can extend it
+    // if you only want to do custom behavior in one of the methods
+
     /**
      * Register the endpoint.
      *

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardHeaderUriTest.java (from r771262, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardHeaderUriTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardHeaderUriTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardTest.java&r1=771262&r2=771301&rev=771301&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardHeaderUriTest.java Mon May  4 13:32:59 2009
@@ -17,12 +17,13 @@
 package org.apache.camel.processor.intercept;
 
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 
 /**
  * Testing http://camel.apache.org/dsl.html
  */
-public class InterceptFromUriWildcardTest extends ContextTestSupport {
+public class InterceptFromUriWildcardHeaderUriTest extends ContextTestSupport {
 
     public void testNoIntercept() throws Exception {
         getMockEndpoint("mock:intercept").expectedMessageCount(0);
@@ -35,6 +36,7 @@
 
     public void testInterceptFoo() throws Exception {
         getMockEndpoint("mock:intercept").expectedMessageCount(1);
+        getMockEndpoint("mock:intercept").expectedHeaderReceived(Exchange.INTERCEPTED_ENDPOINT, "seda:foo");
         getMockEndpoint("mock:result").expectedMessageCount(1);
 
         template.sendBody("seda:foo", "Hello World");
@@ -44,6 +46,7 @@
 
     public void testInterceptBar() throws Exception {
         getMockEndpoint("mock:intercept").expectedMessageCount(1);
+        getMockEndpoint("mock:intercept").expectedHeaderReceived(Exchange.INTERCEPTED_ENDPOINT, "seda:bar");
         getMockEndpoint("mock:result").expectedMessageCount(1);
 
         template.sendBody("seda:bar", "Hello World");
@@ -54,8 +57,6 @@
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                // START SNIPPET: e1
-                // only trigger when incoming from any seda endpoint as we use the * wildcard
                 interceptFrom("seda*").to("mock:intercept");
 
                 from("direct:start").to("mock:result");
@@ -63,7 +64,6 @@
                 from("seda:bar").to("mock:result");
 
                 from("seda:foo").to("mock:result");
-                // END SNIPPET: e1
             }
         };
     }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardTest.java?rev=771301&r1=771300&r2=771301&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromUriWildcardTest.java Mon May  4 13:32:59 2009
@@ -17,6 +17,7 @@
 package org.apache.camel.processor.intercept;
 
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 
 /**
@@ -35,6 +36,7 @@
 
     public void testInterceptFoo() throws Exception {
         getMockEndpoint("mock:intercept").expectedMessageCount(1);
+        getMockEndpoint("mock:intercept").expectedHeaderReceived(Exchange.INTERCEPTED_ENDPOINT, "seda:foo");
         getMockEndpoint("mock:result").expectedMessageCount(1);
 
         template.sendBody("seda:foo", "Hello World");

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptSendToEndpointDynamicTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptSendToEndpointDynamicTest.java?rev=771301&r1=771300&r2=771301&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptSendToEndpointDynamicTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptSendToEndpointDynamicTest.java Mon May  4 13:32:59 2009
@@ -70,6 +70,29 @@
         assertMockEndpointsSatisfied();
     }
 
+    public void testSendToWildcardHeaderUri() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                interceptSendToEndpoint("file:*").skipSendToOriginalEndpoint()
+                    .to("mock:detour");
+
+                from("direct:first")
+                    .to("file://foo")
+                    .to("mock:result");
+            }
+        });
+        context.start();
+
+        getMockEndpoint("mock:detour").expectedMessageCount(1);
+        getMockEndpoint("mock:detour").expectedHeaderReceived(Exchange.INTERCEPTED_ENDPOINT, "file://foo");
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        template.sendBody("direct:first", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
     public void testSendToRegex() throws Exception {
         context.addRoutes(new RouteBuilder() {
             @Override