This isn’t quite you’re use case since I don’t extend routes, but I have
RouteBuilders that I deploy hundreds of times with different configurations
using either camel-blueprint, camel-scr and Blueprint namespace handlers.
I allow minor variations the routes based on the configuration of the
RouteBuilder, so if I were going to try your example, the configure method
would look something like this:
public void configure() throws Exception {
ProcessorDefinition<?> routeDef =
from("file://").routeId(routeId)
.log(LoggingLevel.INFO, "[FILEREADER], file:
${in.header.CamelFileName}");
if (SPLITTER_ELEMENT_NAME != null && !SPLITTER_ELEMENT_NAME.isEmpty()) {
routeDef = routeDef.split().tokenizeXML(SPLITTER_ELEMENT_NAME).streaming()
}
routeDef.to(queueEndpointUri);
}
Notice that If the SPLITTER_ELEMENT_NAME property is set, then the route will
include the “split”.
I’ve used this technique quite a bit, and I’ll reiterate the comment Claus made
about complexity - be careful with this. MINOR variations of the route are
supportable, but too many allowed variations can make the RouteBuilder very
difficult to support.
HTH
> On Apr 20, 2017, at 3:25 AM, Claus Ibsen <[email protected]> wrote:
>
> Hi
>
> A RouteBuilder is essentially just java, so you can create base
> classes / abstract classes and have getter/setter (or what you prefer)
> for configuration.
>
> You can also use java's if .. else .. etc to add parts to the route if
> you need. You can then put the routes together using the model classes
> (the xxxDefinition).
>
> But try to not make this to complex / confusing to maintain. You may
> want to have special routes for splitter vs non splitter etc.
>
>
> On Thu, Apr 20, 2017 at 11:04 AM, Burkard Stephan
> <[email protected]> wrote:
>> Hi Camel users
>>
>> Let's say I have this generic file to JMS route I would like to put in a
>> library.
>>
>> from(directory?options...)
>> .routeId("basicFileToJmsRoute")
>> .log(LoggingLevel.INFO, "[FILEREADER], file: ${in.header.CamelFileName}")
>> .to(queueEndpointUri);
>>
>>
>> Then I would like to build multiple modules who use the route where each
>> module has its own configuration (directory, queue etc).
>>
>> But some of them have also additional requirements, for example split large
>> XML files:
>>
>> from(directory?options...)
>> .routeId("basicFileToJmsRoute")
>> .log(LoggingLevel.INFO, "[FILEREADER], file: ${in.header.CamelFileName}")
>> => .split().tokenizeXML(SPLITTER_ELEMENT_NAME).streaming()
>> .to(queueEndpointUri);
>>
>>
>> Is there a best practice approach to extend a basic route like this in
>> another module?
>>
>> Thanks
>> Stephan
>>
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2