You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ha...@apache.org on 2012/01/17 05:59:41 UTC

svn commit: r1232304 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/builder/ test/java/org/apache/camel/builder/

Author: hadrian
Date: Tue Jan 17 04:59:41 2012
New Revision: 1232304

URL: http://svn.apache.org/viewvc?rev=1232304&view=rev
Log:
CAMEL-4603. Add attachments expression returning just attachment values to be used with splitter

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ExpressionClauseTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=1232304&r1=1232303&r2=1232304&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java Tue Jan 17 04:59:41 2012
@@ -81,6 +81,24 @@ public final class ExpressionBuilder {
     }
 
     /**
+     * Returns an expression for the inbound message attachments
+     *
+     * @return an expression object which will return the inbound message attachments
+     */
+    public static Expression attachmentValuesExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                return exchange.getIn().getAttachments().values();
+            }
+
+            @Override
+            public String toString() {
+                return "attachments";
+            }
+        };
+    }
+
+    /**
      * Returns an expression for the header value with the given name
      * <p/>
      * Will fallback and look in properties if not found in headers.

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java?rev=1232304&r1=1232303&r2=1232304&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java Tue Jan 17 04:59:41 2012
@@ -137,6 +137,13 @@ public class ExpressionClause<T> extends
     }
 
     /**
+     * An expression of the inbound headers
+     */
+    public T attachments() {
+        return delegate.attachments();
+    }
+
+    /**
      * An expression of an exchange property of the given name
      */
     public T property(String name) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java?rev=1232304&r1=1232303&r2=1232304&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java Tue Jan 17 04:59:41 2012
@@ -164,6 +164,13 @@ public class ExpressionClauseSupport<T> 
     }
 
     /**
+     * An expression of the inbound message attachments
+     */
+    public T attachments() {
+        return expression(ExpressionBuilder.attachmentValuesExpression());
+    }
+
+    /**
      * An expression of the exchange pattern
      */
     public T exchangePattern() {

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ExpressionClauseTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ExpressionClauseTest.java?rev=1232304&r1=1232303&r2=1232304&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ExpressionClauseTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ExpressionClauseTest.java Tue Jan 17 04:59:41 2012
@@ -16,7 +16,17 @@
  */
 package org.apache.camel.builder;
 
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+import javax.activation.FileDataSource;
+
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.component.bean.pojomessage.Person;
+import org.apache.camel.component.bean.pojomessage.PojoProxyHelperRequestReplyTest.PersonHandler;
 import org.apache.camel.component.mock.MockEndpoint;
 
 /**
@@ -34,13 +44,46 @@ public class ExpressionClauseTest extend
         assertMockEndpointsSatisfied();
     }
 
+    public void testAttachments() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMessageCount(2);
+        mock.expectedBodiesReceivedInAnyOrder("log4j.properties", "jndi-example.properties");
+
+        template.send("direct:begin", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                Message m = exchange.getIn();
+                m.setBody("Hello World");
+                m.addAttachment("log4j", new DataHandler(new FileDataSource("src/test/resources/log4j.properties")));
+                m.addAttachment("jndi-example", new DataHandler(new FileDataSource("src/test/resources/jndi-example.properties")));
+            }
+        });
+
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
                 from("direct:start").to("mock:result");
+                from("direct:begin")
+                    .split().attachments()
+                    // extract just the name from the DataHandler/DataSource to simplify assertions
+                    .bean(new Extractor())
+                    .to("mock:result");
             }
         };
     }
+    
+    public final class Extractor {
+        public String extractName(DataHandler body) {
+            DataSource ds = (body != null) ? body.getDataSource() : null;
+            if (ds != null && ds instanceof FileDataSource) {
+                return ((FileDataSource)ds).getName();
+            }
+            return null;
+        }
+    }
 }