Endpoint documentation is manually created on the wiki which is quite error prone; plus the wiki page has to then cope with every version of Camel we release and is very easy to get stale and incorrect - and with all the 'since version X' text its confusing for users.
Additionally its hard for tool providers to create user interfaces to let users create and edit endpoint parameters in IDEs and web consoles. To help address this we now have: * a maven plugin which can automaticaly generate HTML documentation for how to configure an endpoint as part of the maven site, if you add a few annotations into your Endpoint code. https://issues.apache.org/jira/browse/CAMEL-6304 If you grab the latest code, do a build, then run: cd camel-core open target/classes/org/apache/camel/component/timer.html you'll see the generated HTML docuemtnation for the timer endpoint. This is then included by default in the jar; so folks can easily get the documentation for the components on their classpath. Or run: mvn site and you'll see the Camel Endpoints page generated in the maven site reports. To get an idea of the annotations, here's the Timer endpoint https://github.com/apache/camel/blob/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerEndpoint.java#L40 notice the use of @UriEndpoint on the endpoint (which links to the consumer also) then the @UriParam for any URI parameter. (We could in the future use @UriParam on setters too; for now only field annotation is supported). * a ComponentConfiguration API so that tools can introspect components to discover the available parameters and their types and metadata; then create/edit either URIs or Endpoints directly https://issues.apache.org/jira/browse/CAMEL-6306 The nice thing about the new ComponentConfiguration API is that a tool can start from scratch; you don't need to create an endpoint first from a URI before you can configure things like with EndpointConfiguration. Also the ComponentConfiguration API is introspectable; you can ask for all the available ParameterConfiguration objects (with the name and their types and any associated metadata such as if Bean Validation API annotations are used etc). So today all Camel components work nicely with the ComponentConfiguration API out of the box; though for components which don't use the @UriEndpoint annotations, you have to create an endpoint first before you can introspect what parameters are available. However for @UriEndpoint annotated endpoints you can immediately get all the parameter names and types (and any associated metadata such as if bean validation annotations are used etc). To get an idea for what tools can do with the ComponentConfiguration API check out the test case: https://github.com/apache/camel/blob/trunk/camel-core/src/test/java/org/apache/camel/impl/ComponentConfigurationTest.java#L69 Note the differences between UriEndpointComponents (i.e. components annotated with @UriEndpoint) and with regular camel components with no metadata. Also note how you can start with nothing; or start with an existing endpoint or URI; then edit the configuration and finally create or edit a URI or Endpoint. Going forward: ------------------- Ideally it would be good to annotate as many of the camel components as possible and move the documentation from the wiki into the Java source code as javadoc comments so we can more to a more code generated model of endpoint documentation; we can then generate the maven site for each release to make the docs a little easier to grok (so when folks are looking at older releases they don't see loads of new features all over the page that they can't use ;-). Annotating the existing components is pretty trivial stuff and it doesn't change the behaviour of the code at all; its purely for documentation generation. It would be good to get a CI job to run "mvn site:deploy" so that we can view & browse the generated documentation and maybe eventually link the wiki to the generated docs (or even include the generted docs inside the wiki page). I guess now we should recommend folks start writing new endpoints with the annotations as an easier way to start writing components; which are then self-documenting and more easily used in tools. For now I've not yet wired the EndpointConfiguration to the ComponentConfiguration; we could then unify the two things together so that EndpointConfiguration delegates to ComponentConfiguration maybe; then folks could create a configuration from a Component (i.e. in an empty command line / form in a tool) or could create a configuration from an Endpoint (which can then be pre-populated with the parameters and their types etc). What do folks think of the HTML reports? It might be nice to generate an index site too (e.g. a bit like JavaDoc but with endpoint schemes rather than packages/classes) so its easier to navigate all the camel endpoint configuration? Plus adding in Bean Validation annotation support would be nice (so we could highlight validation rules etc). Thoughts? -- James ------- Red Hat Email: jstra...@redhat.com Web: http://fusesource.com Twitter: jstrachan, fusenews Blog: http://macstrac.blogspot.com/ Open Source Integration