Repository: camel Updated Branches: refs/heads/master 629d63a2e -> 34950ceee
CAMEL-9482: Generate json schema model for camel-spring Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/34950cee Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/34950cee Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/34950cee Branch: refs/heads/master Commit: 34950ceee931f9a9e92d45f1c8b29d52254992cd Parents: 532371a Author: Claus Ibsen <[email protected]> Authored: Wed Aug 10 19:08:00 2016 +0200 Committer: Claus Ibsen <[email protected]> Committed: Wed Aug 10 19:08:13 2016 +0200 ---------------------------------------------------------------------- .../org/apache/camel/spi/ThreadPoolProfile.java | 2 +- ...bstractCamelConsumerTemplateFactoryBean.java | 3 +- .../xml/AbstractCamelEndpointFactoryBean.java | 7 ++++- .../core/xml/AbstractCamelFactoryBean.java | 3 +- ...bstractCamelProducerTemplateFactoryBean.java | 5 ++-- ...bstractCamelRedeliveryPolicyFactoryBean.java | 24 ++++++++++++++++ .../xml/AbstractCamelThreadPoolFactoryBean.java | 10 +++++++ .../apt/CamelContextAnnotationProcessor.java | 29 ++++++++++++++++---- 8 files changed, 71 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/34950cee/camel-core/src/main/java/org/apache/camel/spi/ThreadPoolProfile.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/spi/ThreadPoolProfile.java b/camel-core/src/main/java/org/apache/camel/spi/ThreadPoolProfile.java index 429af5b..2f84c63 100644 --- a/camel-core/src/main/java/org/apache/camel/spi/ThreadPoolProfile.java +++ b/camel-core/src/main/java/org/apache/camel/spi/ThreadPoolProfile.java @@ -200,7 +200,7 @@ public class ThreadPoolProfile implements Serializable, Cloneable { } /** - * Sets whethre to allow core threads to timeout + * Sets whether to allow core threads to timeout * * @param allowCoreThreadTimeOut <tt>true</tt> to allow timeout */ http://git-wip-us.apache.org/repos/asf/camel/blob/34950cee/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java index 877b51a..971c415 100644 --- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java @@ -23,6 +23,7 @@ import javax.xml.bind.annotation.XmlTransient; import org.apache.camel.ConsumerTemplate; import org.apache.camel.impl.DefaultConsumerTemplate; +import org.apache.camel.spi.Metadata; import org.apache.camel.util.ServiceHelper; /** @@ -36,7 +37,7 @@ public abstract class AbstractCamelConsumerTemplateFactoryBean extends AbstractC @XmlTransient private ConsumerTemplate template; - @XmlAttribute + @XmlAttribute @Metadata(description = "Sets a custom maximum cache size to use in the backing cache pools.") private Integer maximumCacheSize; public ConsumerTemplate getObject() throws Exception { http://git-wip-us.apache.org/repos/asf/camel/blob/34950cee/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java index 72bd289..b7d68f1 100644 --- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java @@ -30,19 +30,24 @@ import org.apache.camel.Endpoint; import org.apache.camel.ExchangePattern; import org.apache.camel.NoSuchEndpointException; import org.apache.camel.model.PropertyDefinition; +import org.apache.camel.spi.Metadata; import org.apache.camel.util.URISupport; @XmlAccessorType(XmlAccessType.FIELD) public abstract class AbstractCamelEndpointFactoryBean extends AbstractCamelFactoryBean<Endpoint> { - @XmlAttribute(required = false) + @XmlAttribute @Deprecated + @Metadata(description = "Not in use") private Boolean singleton; @XmlAttribute(required = true) + @Metadata(description = "Sets the URI to use to resolve the endpoint. Notice that additional options can be configured using a series of property.") private String uri; @XmlAttribute @Deprecated + @Metadata(description = "Sets the exchange pattern of the endpoint") private ExchangePattern pattern; @XmlElementRef + @Metadata(description = "To configure additional endpoint options using a XML style which is similar as configuring Spring or Blueprint beans.") private List<PropertyDefinition> properties = new ArrayList<PropertyDefinition>(); @XmlTransient private Endpoint endpoint; http://git-wip-us.apache.org/repos/asf/camel/blob/34950cee/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelFactoryBean.java index cae7a71..9689136 100644 --- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelFactoryBean.java +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelFactoryBean.java @@ -24,12 +24,13 @@ import javax.xml.bind.annotation.XmlTransient; import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; import org.apache.camel.model.IdentifiedType; +import org.apache.camel.spi.Metadata; import org.apache.camel.util.ObjectHelper; @XmlAccessorType(XmlAccessType.FIELD) public abstract class AbstractCamelFactoryBean<T> extends IdentifiedType implements CamelContextAware { - @XmlAttribute + @XmlAttribute @Metadata(description = "Id of CamelContext to use if there are multiple CamelContexts in the same JVM") private String camelContextId; @XmlTransient private CamelContext camelContext; http://git-wip-us.apache.org/repos/asf/camel/blob/34950cee/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelProducerTemplateFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelProducerTemplateFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelProducerTemplateFactoryBean.java index 956ebba..8690be0 100644 --- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelProducerTemplateFactoryBean.java +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelProducerTemplateFactoryBean.java @@ -25,6 +25,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; import org.apache.camel.ProducerTemplate; import org.apache.camel.impl.DefaultProducerTemplate; +import org.apache.camel.spi.Metadata; import org.apache.camel.util.ServiceHelper; /** @@ -37,9 +38,9 @@ import org.apache.camel.util.ServiceHelper; public abstract class AbstractCamelProducerTemplateFactoryBean extends AbstractCamelFactoryBean<ProducerTemplate> { @XmlTransient private ProducerTemplate template; - @XmlAttribute(required = false) + @XmlAttribute @Metadata(description = "Sets the default endpoint URI used by default for sending message exchanges") private String defaultEndpoint; - @XmlAttribute + @XmlAttribute @Metadata(description = "Sets a custom maximum cache size to use in the backing cache pools.") private Integer maximumCacheSize; public ProducerTemplate getObject() throws Exception { http://git-wip-us.apache.org/repos/asf/camel/blob/34950cee/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java index f353415..98b3813 100644 --- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java @@ -23,6 +23,7 @@ import javax.xml.bind.annotation.XmlAttribute; import org.apache.camel.CamelContext; import org.apache.camel.LoggingLevel; import org.apache.camel.processor.RedeliveryPolicy; +import org.apache.camel.spi.Metadata; import org.apache.camel.util.CamelContextHelper; /** @@ -34,46 +35,69 @@ import org.apache.camel.util.CamelContextHelper; public abstract class AbstractCamelRedeliveryPolicyFactoryBean extends AbstractCamelFactoryBean<RedeliveryPolicy> { @XmlAttribute + @Metadata(description = "Sets the maximum number of times a message exchange will be redelivered. Setting a negative value will retry forever.") private String maximumRedeliveries; @XmlAttribute + @Metadata(defaultValue = "1000", description = "Sets the maximum redelivery delay. Use -1 if you wish to have no maximum") private String redeliveryDelay; @XmlAttribute + @Metadata(defaultValue = "false", description = "Sets whether asynchronous delayed redelivery is allowed. This is disabled by default. When enabled it allows Camel to schedule a future task for delayed" + + " redelivery which prevents current thread from blocking while waiting. Exchange which is transacted will however always use synchronous delayed redelivery because" + + " the transaction must execute in the same thread context.") private String asyncDelayedRedelivery; @XmlAttribute + @Metadata(defaultValue = "2", description = "Sets the multiplier used to increase the delay between redeliveries if useExponentialBackOff is enabled") private String backOffMultiplier; @XmlAttribute + @Metadata(defaultValue = "false", description = "Enables/disables exponential backoff using the backOffMultiplier to increase the time between retries") private String useExponentialBackOff; @XmlAttribute + @Metadata(defaultValue = "0.15", description = "Sets the factor used for collision avoidance if enabled via useCollisionAvoidance.") private String collisionAvoidanceFactor; @XmlAttribute + @Metadata(defaultValue = "false", description = "Enables/disables collision avoidance which adds some randomization to the backoff timings to reduce contention probability") private String useCollisionAvoidance; @XmlAttribute + @Metadata(defaultValue = "60000", description = "Sets the maximum redelivery delay. Use -1 if you wish to have no maximum") private String maximumRedeliveryDelay; @XmlAttribute + @Metadata(defaultValue = "ERROR", description = "Sets the logging level to use for log messages when retries have been exhausted.") private LoggingLevel retriesExhaustedLogLevel; @XmlAttribute + @Metadata(defaultValue = "DEBUG", description = "Sets the logging level to use for log messages when retries are attempted.") private LoggingLevel retryAttemptedLogLevel; @XmlAttribute + @Metadata(defaultValue = "true", description = "Sets whether to log retry attempts") private String logRetryAttempted; @XmlAttribute + @Metadata(defaultValue = "true", description = "Sets whether stack traces should be logged or not") private String logStackTrace; @XmlAttribute + @Metadata(defaultValue = "false", description = "Sets whether stack traces should be logged or not") private String logRetryStackTrace; @XmlAttribute + @Metadata(defaultValue = "false", description = "Sets whether errors should be logged even if its handled") private String logHandled; @XmlAttribute + @Metadata(defaultValue = "false", description = "Sets whether errors should be logged even if its continued") private String logContinued; @XmlAttribute + @Metadata(defaultValue = "true", description = "Sets whether exhausted exceptions should be logged or not") private String logExhausted; @XmlAttribute + @Metadata(defaultValue = "false", description = "Sets whether to log exhausted errors including message history") private String logExhaustedMessageHistory; @XmlAttribute + @Metadata(defaultValue = "false", description = "Disables redelivery by setting maximum redeliveries to 0.") private String disableRedelivery; @XmlAttribute + @Metadata(description = "Sets an optional delay pattern to use instead of fixed delay.") private String delayPattern; @XmlAttribute + @Metadata(defaultValue = "true", description = "Controls whether to allow redelivery while stopping/shutting down a route that uses error handling.") private String allowRedeliveryWhileStopping; @XmlAttribute + @Metadata(description = "Sets the reference of the instance of {@link org.apache.camel.spi.ExchangeFormatter} to generate the log message from exchange.") private String exchangeFormatterRef; public RedeliveryPolicy getObject() throws Exception { http://git-wip-us.apache.org/repos/asf/camel/blob/34950cee/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java index 98439d6..f2f7f65 100644 --- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java @@ -26,6 +26,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.camel.ThreadPoolRejectedPolicy; import org.apache.camel.builder.ThreadPoolProfileBuilder; import org.apache.camel.builder.xml.TimeUnitAdapter; +import org.apache.camel.spi.Metadata; import org.apache.camel.spi.ThreadPoolProfile; import org.apache.camel.util.CamelContextHelper; @@ -38,23 +39,32 @@ import org.apache.camel.util.CamelContextHelper; public abstract class AbstractCamelThreadPoolFactoryBean extends AbstractCamelFactoryBean<ExecutorService> { @XmlAttribute(required = true) + @Metadata(description = "Sets the core pool size (threads to keep minimum in pool)") private String poolSize; @XmlAttribute + @Metadata(description = "Sets the maximum pool size") private String maxPoolSize; @XmlAttribute + @Metadata(description = "Sets the keep alive time for inactive threads") private String keepAliveTime; @XmlAttribute @XmlJavaTypeAdapter(TimeUnitAdapter.class) + @Metadata(description = "Sets the time unit used for keep alive time", defaultValue = "SECONDS") private TimeUnit timeUnit = TimeUnit.SECONDS; @XmlAttribute + @Metadata(description = "Sets the maximum number of tasks in the work queue. Use -1 for an unbounded queue") private String maxQueueSize; @XmlAttribute + @Metadata(description = "Sets whether to allow core threads to timeout") private String allowCoreThreadTimeOut; @XmlAttribute + @Metadata(description = "Sets the handler for tasks which cannot be executed by the thread pool.", defaultValue = "CallerRuns") private ThreadPoolRejectedPolicy rejectedPolicy = ThreadPoolRejectedPolicy.CallerRuns; @XmlAttribute(required = true) + @Metadata(description = "To use a custom thread name / pattern") private String threadName; @XmlAttribute + @Metadata(description = "Whether to use a scheduled thread pool", defaultValue = "false") private Boolean scheduled; public ExecutorService getObject() throws Exception { http://git-wip-us.apache.org/repos/asf/camel/blob/34950cee/tooling/apt/src/main/java/org/apache/camel/tools/apt/CamelContextAnnotationProcessor.java ---------------------------------------------------------------------- diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/CamelContextAnnotationProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/CamelContextAnnotationProcessor.java index 9f10d0f..f8e6b71 100644 --- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/CamelContextAnnotationProcessor.java +++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/CamelContextAnnotationProcessor.java @@ -36,6 +36,7 @@ import javax.lang.model.util.ElementFilter; import javax.lang.model.util.Elements; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementRef; import javax.xml.bind.annotation.XmlElements; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @@ -237,6 +238,11 @@ public class CamelContextAnnotationProcessor extends AbstractAnnotationProcessor processElements(roundEnv, classElement, elements, fieldElement, eipOptions, prefix); } + XmlElementRef elementRef = fieldElement.getAnnotation(XmlElementRef.class); + if (elementRef != null) { + processElement(roundEnv, classElement, null, elementRef, fieldElement, eipOptions, prefix); + } + XmlElement element = fieldElement.getAnnotation(XmlElement.class); if (element != null) { if ("rests".equals(fieldName)) { @@ -244,7 +250,7 @@ public class CamelContextAnnotationProcessor extends AbstractAnnotationProcessor } else if ("routes".equals(fieldName)) { processRoutes(roundEnv, classElement, element, fieldElement, fieldName, eipOptions, prefix); } else { - processElement(roundEnv, classElement, element, fieldElement, eipOptions, prefix); + processElement(roundEnv, classElement, element, null, fieldElement, eipOptions, prefix); } } } @@ -284,6 +290,10 @@ public class CamelContextAnnotationProcessor extends AbstractAnnotationProcessor String defaultValue = findDefaultValue(fieldElement, fieldTypeName); String docComment = findJavaDoc(elementUtils, fieldElement, fieldName, name, classElement, true); + if (isNullOrEmpty(docComment)) { + Metadata metadata = fieldElement.getAnnotation(Metadata.class); + docComment = metadata != null ? metadata.description() : null; + } boolean required = attribute.required(); // metadata may overrule element required required = findRequired(fieldElement, required); @@ -352,16 +362,16 @@ public class CamelContextAnnotationProcessor extends AbstractAnnotationProcessor eipOptions.add(ep); } - private void processElement(RoundEnvironment roundEnv, TypeElement classElement, XmlElement element, VariableElement fieldElement, + private void processElement(RoundEnvironment roundEnv, TypeElement classElement, XmlElement element, XmlElementRef elementRef, VariableElement fieldElement, Set<EipOption> eipOptions, String prefix) { Elements elementUtils = processingEnv.getElementUtils(); String fieldName; fieldName = fieldElement.getSimpleName().toString(); - if (element != null) { + if (element != null || elementRef != null) { String kind = "element"; - String name = element.name(); + String name = element != null ? element.name() : elementRef.name(); if (isNullOrEmpty(name) || "##default".equals(name)) { name = fieldName; } @@ -372,7 +382,11 @@ public class CamelContextAnnotationProcessor extends AbstractAnnotationProcessor String defaultValue = findDefaultValue(fieldElement, fieldTypeName); String docComment = findJavaDoc(elementUtils, fieldElement, fieldName, name, classElement, true); - boolean required = element.required(); + if (isNullOrEmpty(docComment)) { + Metadata metadata = fieldElement.getAnnotation(Metadata.class); + docComment = metadata != null ? metadata.description() : null; + } + boolean required = element != null ? element.required() : elementRef.required(); // metadata may overrule element required required = findRequired(fieldElement, required); @@ -443,7 +457,10 @@ public class CamelContextAnnotationProcessor extends AbstractAnnotationProcessor String defaultValue = findDefaultValue(fieldElement, fieldTypeName); String docComment = findJavaDoc(elementUtils, fieldElement, fieldName, name, classElement, true); - + if (isNullOrEmpty(docComment)) { + Metadata metadata = fieldElement.getAnnotation(Metadata.class); + docComment = metadata != null ? metadata.description() : null; + } boolean required = false; required = findRequired(fieldElement, required);
