I checked Chirag's updated example which contains RouteConfiguration as XML and it worked.
Then I wondered what's the difference between Chirag's and my approach. It turned out that the code is basically the same, but there was a difference in used dependencies. Chirag's project uses: <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-xml-io-dsl</artifactId> </dependency> While my project uses: <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-xml-jaxb-dsl</artifactId> </dependency> When I switched to "camel-xml-io-dsl" it also worked on my project. I did however find this rather strange as: 1) The documentation says: "The route configuration is supported by all DSL’s, so useable by: Java, XML, Groovy, Kotlin and so forth." ( https://camel.apache.org/manual/route-configuration.html#_route_configuration_in_xml). The JAXB did work for a normal route, only not for associating the routeConfiguration (I gave no error on loading). 2) The IO-DSL seems just a newer/faster way to load XML's (based on http://www.davsclaus.com/2020/03/apache-camel-31-fast-loading-of-xml.html), but that the working is the same. 3) On the Camel documentation page "https://camel.apache.org/manual/dsl.html" there is a link only to IO-XML but nothing said about the JAXB. There is also a page ( https://camel.apache.org/components/next/others/java-xml-jaxb-dsl.html), but there it says nothing about the status or that it's deprecated. I already reported (https://issues.apache.org/jira/browse/CAMEL-17842) that the documentation isn't clear on using the XML DSL. I can recall that I tried the XML-IO-DSL before, but somehow I needed to switch back to JAXB (I can't remember why, however...). I leave this ticket open and let the Dev Team decide what to do with it. ( https://issues.apache.org/jira/browse/CAMEL-17953). Raymond On Wed, Apr 13, 2022 at 8:53 PM Chirag <chirag.sangh...@gmail.com> wrote: > while performing XML route, route needs to be explicitly associated > with configuration to use it. > > <route routeConfigurationId="xmlError"> > > Example on > https://camel.apache.org/manual/route-configuration.html#_route_configuration_in_xml > works. > > I think the gap is - when defining a framework based on camel - how to > associate specific routeconfigurations to all routes. > > ચિરાગ/चिराग/Chirag > ------------------------------------------ > Sent from My Gmail Account > > On Wed, Apr 13, 2022 at 3:27 AM ski n <raymondmees...@gmail.com> wrote: > > > > I also created an issue for this with an example: > > https://issues.apache.org/jira/browse/CAMEL-17953 > > > > > > On Wed, Apr 13, 2022 at 9:25 AM ski n <raymondmees...@gmail.com> wrote: > > > > > Yes, based on the link Claus send: > > > > > > https://camel.apache.org/manual/route-configuration.html > > > > > > There is an example of how to do it in Java and how to add it to the > > > CamelContext. There is also an example of how to do it with XML: > > > > > > <routeConfiguration id="xmlError"> > > > <onException> > > > <exception>java.lang.Exception</exception> > > > <handled><constant>true</constant></handled> > > > <log message="XML WARN: ${exception.message}"/> > > > </onException></routeConfiguration> > > > > > > > > > But there is nothing about how to add this to the CamelContext. I > assumed > > > I need to do this through the RoutesLoader (the same as a normal > route). > > > Note I add routes as String to the RoutesLoader. However this doesn't > seem > > > to work. > > > > > > Raymond > > > > > > > > > > > > On Tue, Apr 12, 2022 at 11:38 PM Chirag <chirag.sangh...@gmail.com> > wrote: > > > > > >> Raymond, > > >> > > >> to summarise: > > >> You want to load route configuration using XML? > > >> > > >> ચિરાગ/चिराग/Chirag > > >> ------------------------------------------ > > >> Sent from My Gmail Account > > >> > > >> On Tue, Apr 12, 2022 at 7:59 AM ski n <raymondmees...@gmail.com> > wrote: > > >> > > > >> > Loading the routeconfiguration through: > > >> > > > >> > loader.loadRoutes(resource); > > >> > > > >> > also doesn't work. Directly from Java is no problem. Is this a bug > or > > >> > should the XML RouteConfiguration loaded differently? > > >> > > > >> > Raymond > > >> > > > >> > On Mon, Apr 11, 2022 at 10:26 PM ski n <raymondmees...@gmail.com> > > >> wrote: > > >> > > > >> > > As a note: > > >> > > > > >> > > When when using the routeConfiguration from Java and load it: > > >> > > > > >> > > public class MyJavaErrorHandler extends RouteConfigurationBuilder > { > > >> > > > > >> > > @Override > > >> > > public void configuration() throws Exception { > > >> > > routeConfiguration("xmlError") > > >> > > .onException(Exception.class).handled(true) > > >> > > .log("Java WARN: ${exception.message}"); > > >> > > } > > >> > > } > > >> > > > > >> > > context.addRoutes(new MyJavaErrorHandler()); > > >> > > > > >> > > then it works as expected. Thus, it must be because of the way the > > >> > > routeconfiguration was loaded. I loaded it using: > > >> > > > > >> > > loader.updateRoutes(resource); > > >> > > > > >> > > I assumed it worked similar to the old "addOrUpdateXml" method as > it > > >> says > > >> > > > > >> > > "Loads or updates existing RoutesBuilder". However it works > > >> differently > > >> > > (at least for RouteConfiguration). When changing the > > >> > > routeConfiguration to: > > >> > > > > >> > > loader.loadRoutes(resource); > > >> > > > > >> > > then it worked. > > >> > > > > >> > > Raymond > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > On Mon, Apr 11, 2022 at 9:13 PM ski n <raymondmees...@gmail.com> > > >> wrote: > > >> > > > > >> > >> Yes, with the try-catch-finally clause one can have more > > >> fine-grained. > > >> > >> However, I am not the one who writes the routes. I am only > loading > > >> them. > > >> > >> That's why I need a more generic behavior (errorHandler) with > some > > >> > >> configuration options (routeConfiguration). > > >> > >> > > >> > >> I assumed that the XML routeConfiguration can be loaded the same > as a > > >> > >> 'normal' xml route. I loaded the following: > > >> > >> > > >> > >> <routeConfiguration id="xmlError"> > > >> > >> <onException> > > >> > >> <exception>java.lang.Exception</exception> > > >> > >> <handled><constant>true</constant></handled> > > >> > >> <log message="XML WARN: ${exception.message}"/> > > >> > >> </onException></routeConfiguration> > > >> > >> > > >> > >> And then the route: > > >> > >> > > >> > >> <route routeConfigurationId="xmlError"> > > >> > >> <from uri="timer:xml?period=5s"/> > > >> > >> <log message="I am XML"/> > > >> > >> <throwException exceptionType="java.lang.Exception" > > >> message="Some kind of XML error"/></route> > > >> > >> > > >> > >> > > >> > >> I see the error thrown "Some kind of XML error", but I don't see > it > > >> > >> handled (for example the XML WARN message). Is there something > that > > >> I am > > >> > >> missing? > > >> > >> > > >> > >> Raymond > > >> > >> > > >> > >> > > >> > >> > > >> > >> > > >> > >> > > >> > >> On Mon, Apr 11, 2022 at 6:06 PM Chirag < > chirag.sangh...@gmail.com> > > >> wrote: > > >> > >> > > >> > >>> You could wrap it using try/catch. > > >> > >>> > > >> > >>> See: https://camel.apache.org/manual/try-catch-finally.html > > >> > >>> > > >> > >>> My experience with it is - it depends on the endpoint involved > to > > >> > >>> throw exceptions and enter doCatch appropriately. > > >> > >>> > > >> > >>> ચિરાગ/चिराग/Chirag > > >> > >>> ------------------------------------------ > > >> > >>> Sent from My Gmail Account > > >> > >>> > > >> > >>> On Mon, Apr 11, 2022 at 11:10 AM Claus Ibsen < > claus.ib...@gmail.com > > >> > > > >> > >>> wrote: > > >> > >>> > > > >> > >>> > Hi > > >> > >>> > > > >> > >>> > See routes configuration > > >> > >>> > https://camel.apache.org/manual/route-configuration.html > > >> > >>> > > > >> > >>> > On Mon, Apr 11, 2022 at 4:30 PM ski n < > raymondmees...@gmail.com> > > >> > >>> wrote: > > >> > >>> > > > > >> > >>> > > I am indeed using Camel 3 (Currently 3.14.2) and using > Maven. I > > >> just > > >> > >>> use > > >> > >>> > > plain Java (camel core), so I have a similar setup as your > > >> example > > >> > >>> (only > > >> > >>> > > I'm using Java, instead of the application.properties to > > >> configure > > >> > >>> the > > >> > >>> > > Camel context and its routes). Your example helped me to > also > > >> use > > >> > >>> the Yaml > > >> > >>> > > dsl. > > >> > >>> > > > > >> > >>> > > I am still wondering how to do proper > errorHandling/onException > > >> with > > >> > >>> the > > >> > >>> > > routesloader. > > >> > >>> > > > > >> > >>> > > I can set for example the errorHandler globally: > > >> > >>> > > > > >> > >>> > > > extendedCamelContext.setErrorHandlerFactory(routeErrorHandler); > > >> > >>> > > > > >> > >>> > > But I rather set it per route / per exception (and best of > all > > >> from > > >> > >>> the > > >> > >>> > > xml/yaml files). Like it used to be done like this: > > >> > >>> > > > > >> > >>> > > <camelContext id="myCamelContext" xmlns=" > > >> > >>> > > http://camel.apache.org/schema/spring"> > > >> > >>> > > <!-- Catch the authorization exception and set the > Access > > >> Denied > > >> > >>> > > message back --> > > >> > >>> > > <onException> > > >> > >>> > > > > >> > >>> > <exception>org.apache.camel.CamelAuthorizationException</exception> > > >> > >>> > > <handled> > > >> > >>> > > <constant>true</constant> > > >> > >>> > > </handled> > > >> > >>> > > <transform> > > >> > >>> > > <simple>Access Denied with the Policy of > > >> > >>> ${exception.policyId} > > >> > >>> > > !</simple> > > >> > >>> > > </transform> > > >> > >>> > > </onException> > > >> > >>> > > > > >> > >>> > > <route> > > >> > >>> > > <from uri="servlet:user"/> > > >> > >>> > > <!-- wrap the route in the policy which enforces > security > > >> > >>> check --> > > >> > >>> > > <policy ref="user"> > > >> > >>> > > <transform> > > >> > >>> > > <simple>Normal user can access this > service</simple> > > >> > >>> > > </transform> > > >> > >>> > > </policy> > > >> > >>> > > </route> > > >> > >>> > > > > >> > >>> > > <route> > > >> > >>> > > <from uri="servlet:admin"/> > > >> > >>> > > <!-- wrap the route in the policy which enforces > security > > >> > >>> check --> > > >> > >>> > > <policy ref="admin"> > > >> > >>> > > <transform> > > >> > >>> > > <simple>Call the admin operation OK</simple> > > >> > >>> > > </transform> > > >> > >>> > > </policy> > > >> > >>> > > </route> > > >> > >>> > > > > >> > >>> > > </camelContext> > > >> > >>> > > > > >> > >>> > > But such files are not accepted by the routesLoader. > > >> > >>> > > > > >> > >>> > > I also tried setting the error handler on a specific route > from > > >> Java > > >> > >>> like > > >> > >>> > > this: > > >> > >>> > > > > >> > >>> > > Route route = context.getRoute(myRouteId); > > >> > >>> > > route.setErrorHandlerFactory(routeErrorHandler); > > >> > >>> > > > > >> > >>> > > But that didn't change anything. > > >> > >>> > > > > >> > >>> > > Raymond > > >> > >>> > > > > >> > >>> > > > > >> > >>> > > > > >> > >>> > > > > >> > >>> > > > > >> > >>> > > > > >> > >>> > > > > >> > >>> > > On Mon, Apr 11, 2022 at 3:36 PM Chirag < > > >> chirag.sangh...@gmail.com> > > >> > >>> wrote: > > >> > >>> > > > > >> > >>> > > > Hello Raymond, > > >> > >>> > > > > > >> > >>> > > > Are you trying to use Camel 3 ? > > >> > >>> > > > Would you use Maven or Gradle to build? > > >> > >>> > > > > > >> > >>> > > > Here is an example: > > >> > >>> > > > > > >> > >>> > > >> > https://github.com/chiragsanghavi/camel-experiments/tree/main/processor > > >> > >>> > > > if this helps. > > >> > >>> > > > > > >> > >>> > > > This example was built to demonstrate a bug- but if you > update > > >> > >>> maven > > >> > >>> > > > to use camel 3.1.5 - it should work. > > >> > >>> > > > Only thing needed to support YAML is a change in pom.xml > to > > >> include > > >> > >>> > > > yaml dsl and create yaml files and put them into "routes" > > >> folder. > > >> > >>> > > > > > >> > >>> > > > <dependency> > > >> > >>> > > > <groupId>org.apache.camel</groupId> > > >> > >>> > > > <artifactId>camel-yaml-dsl</artifactId> > > >> > >>> > > > </dependency> > > >> > >>> > > > > > >> > >>> > > > > > >> > >>> > > > > > >> > >>> > > > ચિરાગ/चिराग/Chirag > > >> > >>> > > > ------------------------------------------ > > >> > >>> > > > Sent from My Gmail Account > > >> > >>> > > > > > >> > >>> > > > On Mon, Apr 11, 2022 at 6:15 AM ski n < > > >> raymondmees...@gmail.com> > > >> > >>> wrote: > > >> > >>> > > > > > > >> > >>> > > > > Hi All, > > >> > >>> > > > > > > >> > >>> > > > > I like to use the routesLoader ( > > >> > >>> > > > > > > >> > >>> > > > > > >> > >>> > > >> > https://javadoc.io/static/org.apache.camel/camel-api/3.16.0/org/apache/camel/spi/annotations/RoutesLoader.html > > >> > >>> > > > > ). > > >> > >>> > > > > I have some questions about how to properly use it. > > >> > >>> > > > > > > >> > >>> > > > > 1) Is there any documentation on how to use it? (At > > >> > >>> > > > > https://camel.apache.org/manual/ or > > >> > >>> > > > > https://camel.apache.org/components/next/index.html). > > >> > >>> > > > > > > >> > >>> > > > > 2) I could find some examples ( > > >> > >>> https://github.com/apache/camel-examples > > >> > >>> > > > ), > > >> > >>> > > > > there the routesloader example says: > > >> > >>> > > > > > > >> > >>> > > > > <!-- > > >> > >>> > > > > if you want to have multiple routes, you can either > have > > >> > >>> multiple > > >> > >>> > > > files > > >> > >>> > > > > with 1 <route> per file or > > >> > >>> > > > > you can use <routes> as root tag, such as > > >> > >>> > > > > <routes><route>...</route><route>...</route></routes> > > >> > >>> > > > > --> > > >> > >>> > > > > > > >> > >>> > > > > <route> > > >> > >>> > > > > <from uri="timer:xml?period=5s"/> > > >> > >>> > > > > <log message="I am XML"/> > > >> > >>> > > > > </route> > > >> > >>> > > > > > > >> > >>> > > > > These examples loads xml, can it also loads other DSL's? > > >> (Like > > >> > >>> yaml or > > >> > >>> > > > > Java). > > >> > >>> > > > > > > >> > >>> > > > > 3) How to use OnException with the RouteLoader? > > >> > >>> > > > > > > >> > >>> > > > > I thought maybe like this > > >> > >>> > > > > > > >> > >>> > > > > <routes xmlns="http://camel.apache.org/schema/spring"> > > >> > >>> > > > > <onException> > > >> > >>> > > > > <exception>java.lang.Exception</exception> > > >> > >>> > > > > <redeliveryPolicy maximumRedeliveries="0" > > >> > >>> redeliveryDelay="5000"/> > > >> > >>> > > > > <handled><constant>true</constant></handled> > > >> > >>> > > > > <toD uri="file://some/directory"/> > > >> > >>> > > > > </onException> > > >> > >>> > > > > <route> > > >> > >>> > > > > <from uri="timer:xml?period=5s"/> > > >> > >>> > > > > <log message="I am XML"/> > > >> > >>> > > > > </route> > > >> > >>> > > > > </routes> > > >> > >>> > > > > > > >> > >>> > > > > But this gave me a nullpointer exception. > > >> > >>> > > > > > > >> > >>> > > > > 4) Load from string directly > > >> > >>> > > > > > > >> > >>> > > > > In Camel 2 you could load routes directly from string > like > > >> this: > > >> > >>> > > > > > > >> > >>> > > > > ManagedCamelContext managed = > > >> > >>> > > > > context.getExtension(ManagedCamelContext.class); > > >> > >>> > > > > managedContext = managed.getManagedCamelContext(); > > >> > >>> > > > > managedContext.addOrUpdateRoutesFromXml(routeAsString); > > >> > >>> > > > > > > >> > >>> > > > > In Camel 3 the "addOrUpdateRoutesFromXml" is depracated. > > >> With > > >> > >>> routeLoader > > >> > >>> > > > > from string I do it like this: > > >> > >>> > > > > > > >> > >>> > > > > ExtendedCamelContext extendedCamelContext = > > >> > >>> > > > > context.adapt(ExtendedCamelContext.class); > > >> > >>> > > > > RoutesLoader loader = > > >> extendedCamelContext.getRoutesLoader(); > > >> > >>> > > > > Resource resource = ResourceHelper.fromString("any.xml", > > >> route); > > >> > >>> > > > > > > >> > >>> > > > > loader.updateRoutes(resource); > > >> > >>> > > > > > > >> > >>> > > > > Is this the only way in Camel 3, or is there also a > specific > > >> > >>> method to > > >> > >>> > > > use > > >> > >>> > > > > strings directly (and maybe only specify the DSL used) > like: > > >> > >>> > > > > > > >> > >>> > > > > loader.updateRoutes(routeAsString, "xml"); > > >> > >>> > > > > > > >> > >>> > > > > > > >> > >>> > > > > Raymond > > >> > >>> > > > > > >> > >>> > > > >> > >>> > > > >> > >>> > > > >> > >>> > -- > > >> > >>> > Claus Ibsen > > >> > >>> > ----------------- > > >> > >>> > http://davsclaus.com @davsclaus > > >> > >>> > Camel in Action 2: https://www.manning.com/ibsen2 > > >> > >>> > > >> > >> > > >> > > > >