Hey everyone ! The last weeks, I've spend quite some time working on a camel metamodel. The idea is to invert the way things are built in camel so instead of generating the metamodel from the classes, the metamodel would be maintained manually and used to generate a bunch of things.
This would bring the following benefits: - the metamodel would necessarily be up to date - generate the model classes (XyzDefinition classes) with an homogeneous fluent api (similar to the new endpoint DSL) - get rid of some round tripping between java -> json -> java, copying json files everywhere , so great simplification of the build process - the DSL allows type-safe + property placeholders / references everywhere - generate xml readers / parsers without relying on JAXB - brings extensibility of the DSL as it would be much easier to create DSLs based on other languages from the metamodel (yaml for example) I've pushed a branch that shows my experiments. It's not fully working yet, but it gives a good idea. It's available at https://github.com/gnodet/camel/tree/model I'm progressing a bit slowly as there are lots of step by step adjustements to do in order to keep compatibility of the DSL. Currently the model is generated from the json files, but the idea is to reverse this process and have the metamodel the real primary input for all generation. The model currently looks like: https://gist.github.com/gnodet/75457febcca9a893c3c1a2b8499189b2 The current JAXB model will need to be moved into a separate module so that it can be kept for compatibility without interfering with the new generated java DSL. So, still quite some work left, but I wanted to bring it to the community sooner rather than later, especially before I go on PTO for a few weeks where I'll be mostly offline. Happy to discuss anything or provide more infos. Cheers, Guillaume Nodet