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
>

Reply via email to