Since we're on a major migration process of this website, some component documents here are out of sync right now. In the meantime you may want to look at the early version of the new website
https://camel.apache.org/staging/
We would very much like to receive any feedback on the new site, please join the discussion on the Camel user mailing list.
Unsupported Groovy DSL Features on Web ConsoleMost of the DSL features have been supported on Web Console, so you can view and edit in an easy way. However, Web Console doesn't support all the features that you can get from an IDE. Here will list and explain the unsupported features, including the reason for giving up them, alternative solutions or some suggestion for those who indeed need to extend them. Unsupported Features ListCreating New ClassesWhen writing a route in Java DSL, we often create new classes. For example, we may create a processor as follows: from("direct:start").process(new Processor() { public void process(Exchange exchange) { Message in = exchange.getIn(); in.setBody(in.getBody(String.class) + " World!"); } }).to("mock:result"); Here an anonymous inner class is created to process the message. But this feature is not supported on Web Console since it use a groovy class loader to parse the route content and you should use groovy grammar to build the processor.
Invoking Un-Imported ClassseThis feature also appears frequently. In the try...catch DSL or onException DSL, we may use some external or custom exception classes. But current groovy renderer doesn't process the import packages, so you should manually add the import lines each time you edit it. Another problem is that groovy renderer can't return the instance name of that class. For example, you may define a route like: import org.apache.camel.*; import org.apache.camel.processor.*; import org.apache.camel.language.groovy.GroovyRouteBuilder; class GroovyRoute extends GroovyRouteBuilder { void configure() { MyValidator validator = new MyValidator(); from("direct:start") .doTry().process(validator).to("mock:valid") .doCatch(ValidationException.class).to("mock:invalid") } } For this route, groovy renderer can't return the name: validator and it only know there is a processor instance here.
Filter and When DSL using Groovy ClosureThe Web Console parses routes in groovy language by using the GroovyRouteBuilder in camel-groovy component. GroovyRouteBuilder uses the ConfigureCamel to dynamically add methods for the route configuration behaviors. Currently it has added closure for filter and when DSL. So you can use two method to defined a filter through Web Console: from("direct:start").filter(header("foo").isEqualTo("bar")).to("mock:result") or from("direct:start").filter {e -> e.in.headers.foo == "bar"}.to("mock:result") However, groovy renderer can only render the first filter because a closure is unreadable in Camel Context. Other FeaturesSome expression and predicate have complex and refractory toString method, so the ExpressionRenderer and PredicateRenderer class are implemented a little hard. |