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
> > >>>
> > >>
>

Reply via email to