Author: davsclaus
Date: Fri Nov  5 14:01:49 2010
New Revision: 1031566

URL: http://svn.apache.org/viewvc?rev=1031566&view=rev
Log:
CAMEL-3314: Fixed property placehodler resolution on EIP in nested sub routes.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentEIPChoiceConvertBodyToTest.java
      - copied, changed from r1031505, 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentEIPConvertBodyToTest.java
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.java
      - copied, changed from r1031505, 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.java
    
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.xml
      - copied, changed from r1031505, 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.xml
Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java?rev=1031566&r1=1031565&r2=1031566&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
 Fri Nov  5 14:01:49 2010
@@ -345,6 +345,10 @@ public abstract class ProcessorDefinitio
     protected Processor createOutputsProcessor(RouteContext routeContext, 
Collection<ProcessorDefinition> outputs) throws Exception {
         List<Processor> list = new ArrayList<Processor>();
         for (ProcessorDefinition<?> output : outputs) {
+
+            // resolve properties before we create the processor
+            resolvePropertyPlaceholders(routeContext, output);
+
             Processor processor = null;
             // at first use custom factory
             if (routeContext.getCamelContext().getProcessorFactory() != null) {
@@ -383,7 +387,7 @@ public abstract class ProcessorDefinitio
         Processor processor = null;
 
         // resolve properties before we create the processor
-        resolvePropertyPlaceholders(routeContext);
+        resolvePropertyPlaceholders(routeContext, this);
 
         // at first use custom factory
         if (routeContext.getCamelContext().getProcessorFactory() != null) {
@@ -402,28 +406,29 @@ public abstract class ProcessorDefinitio
     }
 
     /**
-     * Inspects this processor definition and resolves any property 
placeholders from its properties.
+     * Inspects the given processor definition and resolves any property 
placeholders from its properties.
      * <p/>
      * This implementation will check all the getter/setter pairs on this 
instance and for all the values
      * (which is a String type) will be property placeholder resolved.
      *
      * @param routeContext the route context
+     * @param definition   the processor definition
      * @throws Exception is thrown if property placeholders was used and there 
was an error resolving them
      * @see org.apache.camel.CamelContext#resolvePropertyPlaceholders(String)
      * @see org.apache.camel.component.properties.PropertiesComponent
      */
-    protected void resolvePropertyPlaceholders(RouteContext routeContext) 
throws Exception {
+    protected void resolvePropertyPlaceholders(RouteContext routeContext, 
ProcessorDefinition definition) throws Exception {
         if (log.isTraceEnabled()) {
-            log.trace("Resolving property placeholders for: " + this);
+            log.trace("Resolving property placeholders for: " + definition);
         }
 
         // find all String getter/setter
         Map<Object, Object> properties = new HashMap<Object, Object>();
-        IntrospectionSupport.getProperties(this, properties, null);
+        IntrospectionSupport.getProperties(definition, properties, null);
 
         if (!properties.isEmpty()) {
             if (log.isTraceEnabled()) {
-                log.trace("There are " + properties.size() + " properties on: 
" + this);
+                log.trace("There are " + properties.size() + " properties on: 
" + definition);
             }
 
             // lookup and resolve properties for String based properties
@@ -437,7 +442,7 @@ public abstract class ProcessorDefinitio
                     text = 
routeContext.getCamelContext().resolvePropertyPlaceholders(text);
                     if (text != value) {
                         // invoke setter as the text has changed
-                        IntrospectionSupport.setProperty(this, name, text);
+                        IntrospectionSupport.setProperty(definition, name, 
text);
                         if (log.isDebugEnabled()) {
                             log.debug("Changed property [" + name + "] from: " 
+ value + " to: " + text);
                         }

Copied: 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentEIPChoiceConvertBodyToTest.java
 (from r1031505, 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentEIPConvertBodyToTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentEIPChoiceConvertBodyToTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentEIPChoiceConvertBodyToTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentEIPConvertBodyToTest.java&r1=1031505&r2=1031566&rev=1031566&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentEIPConvertBodyToTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentEIPChoiceConvertBodyToTest.java
 Fri Nov  5 14:01:49 2010
@@ -24,11 +24,12 @@ import org.apache.camel.component.mock.M
 /**
  * @version $Revision$
  */
-public class PropertiesComponentEIPConvertBodyToTest extends 
ContextTestSupport {
+public class PropertiesComponentEIPChoiceConvertBodyToTest extends 
ContextTestSupport {
 
     public void testConvertToBytesCharset() throws Exception {
         byte[] body = "Hello World".getBytes("iso-8859-1");
 
+        getMockEndpoint("mock:null").expectedMessageCount(0);
         MockEndpoint result = getMockEndpoint("mock:result");
         result.expectedBodiesReceived(body);
 
@@ -37,14 +38,27 @@ public class PropertiesComponentEIPConve
         assertMockEndpointsSatisfied();
     }
 
+    public void testNullBody() throws Exception {
+        getMockEndpoint("mock:null").expectedMessageCount(1);
+        getMockEndpoint("mock:result").expectedMessageCount(0);
+
+        template.sendBody("direct:start", null);
+
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
                 from("direct:start")
-                    .convertBodyTo(byte[].class, "{{myCoolCharset}}")
-                    .to("mock:result");
+                    .choice()
+                        .when(body().isNotNull())
+                            .convertBodyTo(byte[].class, "{{myCoolCharset}}")
+                            .to("mock:result")
+                        .otherwise()
+                            .to("mock:null");
             }
         };
     }

Copied: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.java
 (from r1031505, 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.java&r1=1031505&r2=1031566&rev=1031566&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.java
 (original)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.java
 Fri Nov  5 14:01:49 2010
@@ -23,9 +23,9 @@ import static org.apache.camel.spring.pr
 /**
  * @version $Revision$
  */
-public class SpringPropertiesComponentEIPConvertBodyToTest extends 
PropertiesComponentEIPConvertBodyToTest {
+public class SpringPropertiesComponentEIPChoiceConvertBodyToTest extends 
PropertiesComponentEIPChoiceConvertBodyToTest {
 
     protected CamelContext createCamelContext() throws Exception {
-        return createSpringCamelContext(this, 
"org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.xml");
+        return createSpringCamelContext(this, 
"org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.xml");
     }
 }
\ No newline at end of file

Copied: 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.xml
 (from r1031505, 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.xml)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.xml&r1=1031505&r2=1031566&rev=1031566&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.xml
 (original)
+++ 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.xml
 Fri Nov  5 14:01:49 2010
@@ -29,8 +29,16 @@
     <camelContext xmlns="http://camel.apache.org/schema/spring";>
         <route>
             <from uri="direct:start"/>
-            <convertBodyTo type="byte[]" charset="{{myCoolCharset}}"/>
-            <to uri="mock:result"/>
+            <choice>
+                <when>
+                    <simple>${body} != null</simple>
+                    <convertBodyTo type="byte[]" charset="{{myCoolCharset}}"/>
+                    <to uri="mock:result"/>
+                </when>
+                <otherwise>
+                    <to uri="mock:null"/>
+                </otherwise>
+            </choice>
         </route>
     </camelContext>
 


Reply via email to