[
https://issues.apache.org/jira/browse/CAMEL-8197?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-8197.
--------------------------------
Resolution: Fixed
Thanks
Great you want to help with the last pieces.
> Create Maven plugin to inject EIP documentation into the spring and blueprint
> XML DSL
> -------------------------------------------------------------------------------------
>
> Key: CAMEL-8197
> URL: https://issues.apache.org/jira/browse/CAMEL-8197
> Project: Camel
> Issue Type: Sub-task
> Components: eip, tooling
> Reporter: Claus Ibsen
> Assignee: Willem Jiang
> Fix For: 2.15.0
>
>
> So we can include documentation out of the box in the XSD schema files, which
> allows end users to better work with Camel, as their IDE editors can show the
> documentation in the IDE.
> To do this we need to
> 1)
> Create a new Maven plugin at
> https://github.com/apache/camel/tree/master/tooling/maven
> which can be inspired by
> https://github.com/apache/camel/tree/master/tooling/maven/camel-package-maven-plugin
> 2)
> Run this plugin in camel-spring and camel-blueprint, so it can read the
> camel-spring.xsd, camel-blueprint.xsd file, and inject documentation.
> 3)
> Parse the XSD maybe using SAX, and inject the documentation.
> For each xs:element in the top of the schema file
> http://camel.apache.org/schema/spring/camel-spring.xsd
> Then use the name, eg (name=split)
> {code}
> <xs:element name="split" type="tns:splitDefinition"/>
> {code}
> To find the split.json file in camel-core. Then the json file has the
> documentation for that type (including inherited types).
> So for the split definition
> {code}
> <xs:complexType name="splitDefinition">
> <xs:complexContent>
> <xs:extension base="tns:expressionNode">
> <xs:sequence/>
> <xs:attribute name="parallelProcessing" type="xs:boolean"/>
> <xs:attribute name="strategyRef" type="xs:string"/>
> <xs:attribute name="strategyMethodName" type="xs:string"/>
> <xs:attribute name="strategyMethodAllowNull" type="xs:boolean"/>
> <xs:attribute name="executorServiceRef" type="xs:string"/>
> <xs:attribute name="streaming" type="xs:boolean"/>
> <xs:attribute name="stopOnException" type="xs:boolean"/>
> <xs:attribute name="timeout" type="xs:long"/>
> <xs:attribute name="onPrepareRef" type="xs:string"/>
> <xs:attribute name="shareUnitOfWork" type="xs:boolean"/>
> <xs:anyAttribute namespace="##other" processContents="skip"/>
> </xs:extension>
> </xs:complexContent>
> </xs:complexType>
> {code}
> We can find the description of these attributes, and elements from the json
> file.
> For example for the streaming attribute we have
> {code}
> "streaming": { "kind": "attribute": "required": "false", "type": "boolean",
> "javaType": "java.lang.Boolean", "description": "The splitter should use
> streaming -- exchanges are being sent as the data for them becomes available.
> This improves throughput and memory usage but it has a drawback: - the sent
> exchanges will no longer contain the link org.apache.camel.ExchangeSPLIT_SIZE
> header property"
> {code}
> Then add the needed xs:annotation to document it.
> http://www.w3schools.com/schema/el_annotation.asp
> Which should be
> {code}
> <xs:annotation>
> <xs:documentation xml:lang="en">
> The splitter should use streaming -- exchanges are being sent as the data for
> them becomes available. This improves throughput and memory usage but it has
> a drawback: - the sent exchanges will no longer contain the link
> org.apache.camel.ExchangeSPLIT_SIZE header property
> </xs:documentation>
> </xs:annotation>
> {code}
> Notice that the xsd will become bigger due the verbosity of how to annotate
> xsd fields.
> Mind that sometimes there is not yet documentation, so check for not empty
> value.
> To parse the json file, then use this class from camel-core
> {code}
> List<Map<String, String>> rows =
> JsonSchemaHelper.parseJsonSchema("properties", json, true);
> {code}
> Then you have a map with key/value for all those values.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)