Hi

I have created a ticket you can check stats upon
https://issues.apache.org/jira/browse/CAMEL-3543


On Fri, Jan 14, 2011 at 3:23 PM, Claus Ibsen <[email protected]> wrote:
> Hi
>
> Yeah I think the loading of routes XML files lack a step where it
> merges stuff from its parent CamelContext such as transacted error
> handlers and whatnot. I will have to move some logic from
> camel-core-xml into camel-core to have it unified in one place and
> reusable by spring, blueprint and from 3rd party like you using the
> API from CamelContext.
>
> I will see if I got time to work on this before 2.6 is being cut next week.
>
>
> On Fri, Jan 14, 2011 at 3:17 PM, bfischer <[email protected]> wrote:
>>
>> Hi Claus,
>>
>> thank for spending your time with my problem ...
>>
>> I followed your advice and tested the behavior on Camel 2.6.0 latest
>> snapshot after extracting it out of our internal projects. But behavior
>> stays unchanged.
>>
>> And of course I'm loading loading routes from a separate xml file inside of
>> <routes> tags ... Maybe it would be better to describe it a little in coding
>> style ...
>>
>> I'm using Spring to "boot" Camel. So I have a spring-config.xml containing
>> following camleContext
>>
>>  <camelContext id ="camel-core" xmlns
>> ="http://camel.apache.org/schema/spring";>
>>    <route id="core-route01">
>>      <from uri="direct:core-route01"/>
>>      <transacted/>
>>      <to   uri="mock:core-route01"/>
>>    </route>
>>  </camelContext>
>>
>> Of course all the stuff to make <transacted/> working are present too and
>> only let out to shorting this post.
>> In my testcase I verify that this route is loaded and working
>>
>>    Assert.assertNotNull( this.context.getRoute( "core-route01" ) );
>>    Assert.assertEquals ( 1, this.context.getRoutes().size() );
>>    [....]
>>
>> Works fine.
>>
>> Now I'm loading new route from xml file (routeContext-test01.xml)
>>
>>  <routes xmlns="http://camel.apache.org/schema/spring";>
>>    <route id="test01-route01">
>>      <from uri="direct:test01-route01"/>
>>      <to   uri="mock:test01-route01"/>
>>    </route>
>>  </routes>
>>
>> with following code
>>
>>    Resource rs = new ClassPathResource( "routeContext-test01.xml",
>> this.getClass() );
>>    RoutesDefinition routes = this.context.loadRoutesDefinition(
>> rs.getInputStream() );
>>    this.context.addRouteDefinitions( routes.getRoutes() );
>>
>> and verifying it again (I don't repeat the code).
>>
>> Works fine.
>>
>> Now I'm going to load next xml file (routeContext-test02.xml)
>>
>> <routes xmlns="http://camel.apache.org/schema/spring";>
>>  <route id="test02-route01">
>>    <from uri="direct:test02-route01"/>
>>    <transacted/>
>>    <to   uri="mock:test02-route01"/>
>>  </route>
>> </routes>
>>
>> Only difference to test01 is added <transacted/> tag. And it should be
>> basically same like the one in camelContext. Of course naming is a little
>> bit different too but I hope this wouldn't be reason ...
>>
>> Loading it with code snippet shown above now leads to an exception
>>
>> org.apache.camel.FailedToCreateRouteException: Failed to create route
>> test02-route01 at: >>> From[direct:test02-route01] <<< in route:
>> Route[[From[direct:test02-route01]] -> [Transacted[ref:null]... because of
>> Route test02-route01 has no output processors. You need to add outputs to
>> the route such as to("log:foo").
>>        at
>> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:764)
>>        at
>> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:174)
>>        at
>> org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:698)
>>        at
>> org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:1603)
>>        at
>> org.apache.camel.impl.DefaultCamelContext.addRouteDefinitions(DefaultCamelContext.java:649)
>>        at
>> com.gk_software.camel.testRouteLoading.TestCase.test01(TestCase.java:104)
>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>        at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>        at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>        at java.lang.reflect.Method.invoke(Method.java:592)
>>        at
>> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
>>        at
>> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>>        at
>> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
>>        at
>> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>>        at
>> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>>        at
>> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
>>        at
>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
>>        at
>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
>>        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>>        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>>        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>>        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>>        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>>        at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>>        at
>> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
>>        at
>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>>        at
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>>        at
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>>        at
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>>        at
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
>> Caused by: java.lang.IllegalArgumentException: Route test02-route01 has no
>> output processors. You need to add outputs to the route such as
>> to("log:foo").
>>        at
>> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:762)
>>        ... 29 more
>>
>> Reason why a route described (to avoid the word "loading") in camelContext
>> behaves different than a route loaded from <routes> tags are in my opinion
>> the post processing happening in
>> AbstractCamelContextFactoryBean.afterPropertiesSet().
>>
>> Maybe this bavior is wanted, I don't know. If full "power" of spring dsl for
>> routes is useable only if they are processed during startup of camelContext
>> ...
>>
>> For now it seems real reloading can be done only by restarting complete
>> camelContext ...
>>
>> Still I haven't any idea how do go around - reloading of routes is a needed
>> key feature for us ...
>>
>>
>> -----
>> Bernd Fischer
>> GK Software AG
>> [email protected]
>> --
>> View this message in context: 
>> http://camel.465427.n5.nabble.com/Loading-routes-from-XML-files-with-Camel-2-4-0-tp3340082p3341319.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>
>
>
> --
> Claus Ibsen
> -----------------
> FuseSource
> Email: [email protected]
> Web: http://fusesource.com
> Twitter: davsclaus
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: [email protected]
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to