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>