This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch camel-master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 8eebc84f8f8f57d23b703497cfddeefead3bc916 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Tue Feb 18 08:14:03 2020 +0000 Upgrade to Camel 3.1.0 - WIP --- catalog/camel-quarkus-catalog/pom.xml | 27 +- .../catalog/quarkus/QuarkusRuntimeProvider.java | 5 +- .../quarkus/QuarkusRuntimeProviderTest.java | 14 +- .../pages/list-of-camel-quarkus-extensions.adoc | 8 +- .../component/bindy/deployment/BindyProcessor.java | 12 + .../consul/deployment/ConsulProcessor.java | 12 - .../component/xml/deployment/XmlProcessor.java | 9 +- extensions/core-xml/runtime/pom.xml | 4 + .../camel/quarkus/component/xml/XmlRecorder.java | 27 +- .../quarkus/core/deployment/BuildProcessor.java | 13 +- .../CamelModelToXMLDumperBuildItem.java} | 22 +- .../deployment/CamelRoutesLoaderBuildItems.java | 10 +- extensions/core/runtime/pom.xml | 10 +- .../quarkus/core/CamelMainEventDispatcher.java | 5 + .../apache/camel/quarkus/core/CamelMainEvents.java | 6 + .../camel/quarkus/core/CamelMainRecorder.java | 6 +- .../apache/camel/quarkus/core/CamelRecorder.java | 27 +- .../camel/quarkus/core/CamelRoutesCollector.java | 17 +- .../camel/quarkus/core/CamelRuntimeCatalog.java | 7 +- ...esLoader.java => DisabledModelToXMLDumper.java} | 15 +- .../core/DisabledPredicateValidatorReifier.java | 6 +- .../quarkus/core/DisabledValidateReifier.java | 6 +- .../core/DisabledXMLRoutesDefinitionLoader.java} | 23 +- .../camel/quarkus/core/FastCamelContext.java | 67 +-- .../org/apache/camel/quarkus/core/FastModel.java | 8 +- .../camel/quarkus/core/FastTypeConverter.java | 11 +- .../component/pdf/deployment/PdfProcessor.java | 19 +- extensions/readme.adoc | 8 +- .../support/policy/deployment/PolicyProcessor.java | 8 +- extensions/support/xml/runtime/pom.xml | 2 +- .../quarkus/component/bindy/it/BindyTestRoute.java | 4 +- .../apache/camel/quarkus/core/CamelServlet.java | 5 + .../org/apache/camel/quarkus/core/CamelTest.java | 5 + .../apache/camel/quarkus/core/CamelServlet.java | 4 +- .../org/apache/camel/quarkus/core/CamelTest.java | 5 +- .../apache/camel/quarkus/core/CamelServlet.java | 4 +- .../quarkus/component/pdf/it/PdfResource.java | 2 +- .../core/runtime/support/SupportListener.java | 4 + pom.xml | 23 +- poms/bom/pom.xml | 21 +- tooling/package-maven-plugin/pom.xml | 32 ++ .../apache/camel/quarkus/maven/ExtMvelHelper.java | 12 +- .../camel/quarkus/maven/JSonSchemaHelper.java | 567 +++++++++++++++++++++ .../quarkus/maven/PrepareCatalogQuarkusMojo.java | 2 +- .../quarkus/maven/UpdateDocExtensionsListMojo.java | 132 ++--- 45 files changed, 976 insertions(+), 260 deletions(-) diff --git a/catalog/camel-quarkus-catalog/pom.xml b/catalog/camel-quarkus-catalog/pom.xml index a234169..eb6e3d0 100644 --- a/catalog/camel-quarkus-catalog/pom.xml +++ b/catalog/camel-quarkus-catalog/pom.xml @@ -22,8 +22,9 @@ <parent> <groupId>org.apache.camel.quarkus</groupId> - <artifactId>catalog</artifactId> + <artifactId>camel-quarkus-build-parent</artifactId> <version>1.1.0-SNAPSHOT</version> + <relativePath>../../poms/build-parent/pom.xml</relativePath> </parent> <artifactId>camel-catalog-quarkus</artifactId> @@ -35,33 +36,27 @@ <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-catalog</artifactId> - <version>${camel.version}</version> </dependency> <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.12</version> + <groupId>org.jboss.logging</groupId> + <artifactId>jboss-logging</artifactId> <scope>test</scope> </dependency> - - <!-- logging --> <dependency> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-api</artifactId> - <version>2.12.1</version> + <groupId>org.jboss.slf4j</groupId> + <artifactId>slf4j-jboss-logging</artifactId> <scope>test</scope> </dependency> + <dependency> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-core</artifactId> - <version>2.12.1</version> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <dependency> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-slf4j-impl</artifactId> - <version>2.12.1</version> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> diff --git a/catalog/camel-quarkus-catalog/src/main/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProvider.java b/catalog/camel-quarkus-catalog/src/main/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProvider.java index b1c37c6..d8a72bf 100644 --- a/catalog/camel-quarkus-catalog/src/main/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProvider.java +++ b/catalog/camel-quarkus-catalog/src/main/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProvider.java @@ -22,11 +22,12 @@ import java.util.ArrayList; import java.util.List; import org.apache.camel.catalog.CamelCatalog; -import org.apache.camel.catalog.CatalogHelper; import org.apache.camel.catalog.RuntimeProvider; +import org.apache.camel.catalog.impl.CatalogHelper; /** - * A Quarkus based {@link RuntimeProvider} which only includes the supported Camel components, data formats, and languages + * A Quarkus based {@link RuntimeProvider} which only includes the supported Camel components, data formats, and + * languages * which can be installed in Quarkus using the Camel extensions. */ public class QuarkusRuntimeProvider implements RuntimeProvider { diff --git a/catalog/camel-quarkus-catalog/src/test/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProviderTest.java b/catalog/camel-quarkus-catalog/src/test/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProviderTest.java index 2c6b1d1..eb0f52d 100644 --- a/catalog/camel-quarkus-catalog/src/test/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProviderTest.java +++ b/catalog/camel-quarkus-catalog/src/test/java/org/apache/camel/catalog/quarkus/QuarkusRuntimeProviderTest.java @@ -20,19 +20,19 @@ import java.util.List; import org.apache.camel.catalog.CamelCatalog; import org.apache.camel.catalog.DefaultCamelCatalog; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; public class QuarkusRuntimeProviderTest { static CamelCatalog catalog; - @BeforeClass + @BeforeAll public static void createCamelCatalog() { catalog = new DefaultCamelCatalog(); catalog.setRuntimeProvider(new QuarkusRuntimeProvider()); diff --git a/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc b/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc index f6d250e..0a5fd7c 100644 --- a/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc +++ b/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc @@ -18,7 +18,7 @@ In case you are missing some Camel feature in the list: == Camel Components // components: START -Number of Camel components: 65 in 56 JAR artifacts (0 deprecated) +Number of Camel components: 66 in 57 JAR artifacts (0 deprecated) [width="100%",cols="4,1,5",options="header"] |=== @@ -64,7 +64,7 @@ Number of Camel components: 65 in 56 JAR artifacts (0 deprecated) `aws-sqs:queueNameOrArn` | 0.2.0 | The aws-sqs component is used for sending and receiving messages to Amazon's SQS service. | link:https://camel.apache.org/components/latest/aws-translate-component.html[AWS Translate] (camel-quarkus-aws-translate) + -`aws-translate:label` | 1.0.0-M3 | The aws-kms is used for managing Amazon Translate +`aws-translate:label` | 1.0.0-M3 | The aws-translate component is used for managing Amazon Translate | link:https://camel.apache.org/components/latest/bean-component.html[Bean] (camel-quarkus-bean) + `bean:beanName` | 0.2.0 | The bean component is for invoking Java beans from Camel. @@ -76,7 +76,7 @@ Number of Camel components: 65 in 56 JAR artifacts (0 deprecated) `box:apiName/methodName` | 1.2.0 | For uploading downloading and managing files folders groups collaborations etc on box DOT com. | link:https://camel.apache.org/components/latest/class-component.html[Class] (camel-quarkus-bean) + -`class:beanName` | 0.2.0 | The class component is for invoking Java classes (Java beans) from Camel. +`class:beanName` | 0.2.0 | The Class component is for invoking Java classes (Java beans) from Camel. | link:https://camel.apache.org/components/latest/consul-component.html[Consul] (camel-quarkus-consul) + `consul:apiEndpoint` | 1.0.0-M3 | The camel consul component allows you to work with Consul, a distributed, highly available, datacenter-aware, service discovery and configuration system. @@ -273,7 +273,7 @@ Number of Camel languages: 9 in 3 JAR artifacts (0 deprecated) | link:https://camel.apache.org/components/latest/bean-language.html[Bean method] (camel-quarkus-bean) | 0.2.0 | To use a Java bean (aka method call) in Camel expressions or predicates. -| link:https://camel.apache.org/components/latest/constant-language.html[Constant] (camel-quarkus-core) | 0.2.0 | To use a constant value in Camel expressions or predicates. +| link:https://camel.apache.org/components/latest/constant-language.html[Constant] (camel-quarkus-core) | 0.2.0 | To use a constant value in Camel expressions or predicates. Important: this is a fixed constant value that is only set once during starting up the route, do not use this if you want dynamic values during routing. | link:https://camel.apache.org/components/latest/exchangeProperty-language.html[ExchangeProperty] (camel-quarkus-core) | 0.2.0 | To use a Camel Exchange property in expressions or predicates. diff --git a/extensions/bindy/deployment/src/main/java/org/apache/camel/quarkus/component/bindy/deployment/BindyProcessor.java b/extensions/bindy/deployment/src/main/java/org/apache/camel/quarkus/component/bindy/deployment/BindyProcessor.java index 74bd071..65f9d97 100644 --- a/extensions/bindy/deployment/src/main/java/org/apache/camel/quarkus/component/bindy/deployment/BindyProcessor.java +++ b/extensions/bindy/deployment/src/main/java/org/apache/camel/quarkus/component/bindy/deployment/BindyProcessor.java @@ -18,6 +18,8 @@ package org.apache.camel.quarkus.component.bindy.deployment; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.builditem.FeatureBuildItem; +import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceDirectoryBuildItem; +import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; class BindyProcessor { @@ -28,4 +30,14 @@ class BindyProcessor { return new FeatureBuildItem(FEATURE); } + @BuildStep + ReflectiveClassBuildItem reflectiveClasses() { + return new ReflectiveClassBuildItem(false, false, "com.ibm.icu.text.BreakIteratorFactory"); + } + + @BuildStep + NativeImageResourceDirectoryBuildItem resourceBundles() { + return new NativeImageResourceDirectoryBuildItem("com/ibm/icu/impl/data"); + } + } diff --git a/extensions/consul/deployment/src/main/java/org/apache/camel/quarkus/component/consul/deployment/ConsulProcessor.java b/extensions/consul/deployment/src/main/java/org/apache/camel/quarkus/component/consul/deployment/ConsulProcessor.java index 131adba..ac2cf5b 100644 --- a/extensions/consul/deployment/src/main/java/org/apache/camel/quarkus/component/consul/deployment/ConsulProcessor.java +++ b/extensions/consul/deployment/src/main/java/org/apache/camel/quarkus/component/consul/deployment/ConsulProcessor.java @@ -16,11 +16,9 @@ */ package org.apache.camel.quarkus.component.consul.deployment; -import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; -import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; class ConsulProcessor { private static final String FEATURE = "camel-consul"; @@ -35,14 +33,4 @@ class ConsulProcessor { return new ExtensionSslNativeSupportBuildItem(FEATURE); } - @BuildStep - void reflectiveClasses(BuildProducer<ReflectiveClassBuildItem> reflectiveClasses) { - reflectiveClasses.produce(new ReflectiveClassBuildItem( - true, - false, - "org.apache.camel.component.consul.ConsulConfiguration", - "org.apache.camel.component.consul.ConsulClientConfiguration", - "org.apache.camel.component.consul.health.ConsulHealthCheckRepositoryConfiguration", - "org.apache.camel.component.consul.cloud.ConsulServiceRegistryConfiguration")); - } } diff --git a/extensions/core-xml/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java b/extensions/core-xml/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java index 07329c8..19b096b 100644 --- a/extensions/core-xml/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java +++ b/extensions/core-xml/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java @@ -24,6 +24,7 @@ import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.jaxb.deployment.JaxbFileRootBuildItem; import org.apache.camel.quarkus.component.xml.XmlRecorder; import org.apache.camel.quarkus.core.deployment.CamelModelJAXBContextFactoryBuildItem; +import org.apache.camel.quarkus.core.deployment.CamelModelToXMLDumperBuildItem; import org.apache.camel.quarkus.core.deployment.CamelRoutesLoaderBuildItems; import org.apache.camel.quarkus.core.deployment.CamelSupport; import org.apache.camel.quarkus.support.common.CamelCapabilities; @@ -56,7 +57,13 @@ class XmlProcessor { @BuildStep @Record(value = ExecutionTime.STATIC_INIT, optional = true) CamelRoutesLoaderBuildItems.Xml xmlLoader(XmlRecorder recorder) { - return new CamelRoutesLoaderBuildItems.Xml(recorder.newDefaultXmlLoader()); + return new CamelRoutesLoaderBuildItems.Xml(recorder.newJaxbXMLRoutesDefinitionLoader()); + } + + @BuildStep + @Record(value = ExecutionTime.STATIC_INIT, optional = true) + CamelModelToXMLDumperBuildItem xmlModelDumper(XmlRecorder recorder) { + return new CamelModelToXMLDumperBuildItem(recorder.newJaxbModelToXMLDumper()); } @BuildStep diff --git a/extensions/core-xml/runtime/pom.xml b/extensions/core-xml/runtime/pom.xml index aac5cda..f61467d 100644 --- a/extensions/core-xml/runtime/pom.xml +++ b/extensions/core-xml/runtime/pom.xml @@ -48,6 +48,10 @@ <dependencies> <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-xml-jaxb</artifactId> + </dependency> + <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-core</artifactId> </dependency> diff --git a/extensions/core-xml/runtime/src/main/java/org/apache/camel/quarkus/component/xml/XmlRecorder.java b/extensions/core-xml/runtime/src/main/java/org/apache/camel/quarkus/component/xml/XmlRecorder.java index 0170587..1469086 100644 --- a/extensions/core-xml/runtime/src/main/java/org/apache/camel/quarkus/component/xml/XmlRecorder.java +++ b/extensions/core-xml/runtime/src/main/java/org/apache/camel/quarkus/component/xml/XmlRecorder.java @@ -24,12 +24,15 @@ import org.apache.camel.RuntimeCamelException; import org.apache.camel.impl.DefaultModelJAXBContextFactory; import org.apache.camel.model.ValidateDefinition; import org.apache.camel.model.validator.PredicateValidatorDefinition; -import org.apache.camel.quarkus.core.XmlRoutesLoader; import org.apache.camel.reifier.ProcessorReifier; import org.apache.camel.reifier.ValidateReifier; import org.apache.camel.reifier.validator.PredicateValidatorReifier; import org.apache.camel.reifier.validator.ValidatorReifier; import org.apache.camel.spi.ModelJAXBContextFactory; +import org.apache.camel.spi.ModelToXMLDumper; +import org.apache.camel.spi.XMLRoutesDefinitionLoader; +import org.apache.camel.xml.jaxb.JaxbModelToXMLDumper; +import org.apache.camel.xml.jaxb.JaxbXMLRoutesDefinitionLoader; import org.graalvm.nativeimage.ImageInfo; @Recorder @@ -47,12 +50,30 @@ public class XmlRecorder { return new RuntimeValue<>(factory); } - public RuntimeValue<XmlRoutesLoader> newDefaultXmlLoader() { - return new RuntimeValue<>(new DefaultXmlRoutesLoader()); + public RuntimeValue<XMLRoutesDefinitionLoader> newJaxbXMLRoutesDefinitionLoader() { + return new RuntimeValue<>(new JaxbXMLRoutesDefinitionLoader()); + } + + public RuntimeValue<ModelToXMLDumper> newJaxbModelToXMLDumper() { + return new RuntimeValue<>(new JaxbModelToXMLDumper()); } public void initXmlReifiers() { ProcessorReifier.registerReifier(ValidateDefinition.class, ValidateReifier::new); ValidatorReifier.registerReifier(PredicateValidatorDefinition.class, PredicateValidatorReifier::new); } + + /* + + + @Override + protected XMLRoutesDefinitionLoader createXMLRoutesDefinitionLoader() { + return xmlLoader; + } + + @Override + protected ModelToXMLDumper createModelToXMLDumper() { + return modelDumper; + } + */ } diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java index 2672806..1783ab3 100644 --- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java +++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java @@ -334,8 +334,15 @@ class BuildProcessor { @Overridable @BuildStep @Record(value = ExecutionTime.STATIC_INIT, optional = true) - public CamelRoutesLoaderBuildItems.Xml createXmlLoader(CamelRecorder recorder) { - return new CamelRoutesLoaderBuildItems.Xml(recorder.newDisabledXmlRoutesLoader()); + public CamelRoutesLoaderBuildItems.Xml createXMLRoutesLoader(CamelRecorder recorder) { + return new CamelRoutesLoaderBuildItems.Xml(recorder.newDisabledXMLRoutesDefinitionLoader()); + } + + @Overridable + @BuildStep + @Record(value = ExecutionTime.STATIC_INIT, optional = true) + public CamelModelToXMLDumperBuildItem createModelToXMLDumper(CamelRecorder recorder) { + return new CamelModelToXMLDumperBuildItem(recorder.newDisabledModelToXMLDumper()); } @BuildStep @@ -355,6 +362,7 @@ class BuildProcessor { CamelTypeConverterRegistryBuildItem typeConverterRegistry, CamelModelJAXBContextFactoryBuildItem contextFactory, CamelRoutesLoaderBuildItems.Xml xmlLoader, + CamelModelToXMLDumperBuildItem modelDumper, CamelFactoryFinderResolverBuildItem factoryFinderResolverBuildItem, BeanContainerBuildItem beanContainer, CamelConfig config) { @@ -364,6 +372,7 @@ class BuildProcessor { typeConverterRegistry.getRegistry(), contextFactory.getContextFactory(), xmlLoader.getLoader(), + modelDumper.getValue(), factoryFinderResolverBuildItem.getFactoryFinderResolver(), beanContainer.getValue(), CamelSupport.getCamelVersion(), diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/XmlRoutesLoader.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelModelToXMLDumperBuildItem.java similarity index 61% rename from extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/XmlRoutesLoader.java rename to extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelModelToXMLDumperBuildItem.java index 36a2c1d..0bab4db 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/XmlRoutesLoader.java +++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelModelToXMLDumperBuildItem.java @@ -14,18 +14,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.quarkus.core; +package org.apache.camel.quarkus.core.deployment; -import java.io.InputStream; +import io.quarkus.builder.item.SimpleBuildItem; +import io.quarkus.runtime.RuntimeValue; +import org.apache.camel.spi.ModelToXMLDumper; -import org.apache.camel.CamelContext; -import org.apache.camel.model.RoutesDefinition; -import org.apache.camel.model.rest.RestsDefinition; +public final class CamelModelToXMLDumperBuildItem extends SimpleBuildItem { + private final RuntimeValue<ModelToXMLDumper> value; -public interface XmlRoutesLoader { - - RoutesDefinition loadRoutesDefinition(CamelContext context, InputStream inputStream) throws Exception; - - RestsDefinition loadRestsDefinition(CamelContext context, InputStream is) throws Exception; + public CamelModelToXMLDumperBuildItem(RuntimeValue<ModelToXMLDumper> value) { + this.value = value; + } + public RuntimeValue<ModelToXMLDumper> getValue() { + return value; + } } diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelRoutesLoaderBuildItems.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelRoutesLoaderBuildItems.java index 815cff7..5638bbc 100644 --- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelRoutesLoaderBuildItems.java +++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelRoutesLoaderBuildItems.java @@ -19,7 +19,7 @@ package org.apache.camel.quarkus.core.deployment; import io.quarkus.builder.item.SimpleBuildItem; import io.quarkus.runtime.RuntimeValue; import org.apache.camel.quarkus.core.RegistryRoutesLoader; -import org.apache.camel.quarkus.core.XmlRoutesLoader; +import org.apache.camel.spi.XMLRoutesDefinitionLoader; public final class CamelRoutesLoaderBuildItems { private CamelRoutesLoaderBuildItems() { @@ -41,16 +41,16 @@ public final class CamelRoutesLoaderBuildItems { } /** - * Holds the {@link XmlRoutesLoader} instance. + * Holds the {@link XMLRoutesDefinitionLoader} instance. */ public static final class Xml extends SimpleBuildItem { - private final RuntimeValue<XmlRoutesLoader> value; + private final RuntimeValue<XMLRoutesDefinitionLoader> value; - public Xml(RuntimeValue<XmlRoutesLoader> value) { + public Xml(RuntimeValue<XMLRoutesDefinitionLoader> value) { this.value = value; } - public RuntimeValue<XmlRoutesLoader> getLoader() { + public RuntimeValue<XMLRoutesDefinitionLoader> getLoader() { return value; } } diff --git a/extensions/core/runtime/pom.xml b/extensions/core/runtime/pom.xml index 906fd04..c91b25f 100644 --- a/extensions/core/runtime/pom.xml +++ b/extensions/core/runtime/pom.xml @@ -77,12 +77,6 @@ <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core-engine</artifactId> - <exclusions> - <exclusion> - <groupId>org.apache.camel</groupId> - <artifactId>camel-jaxp</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>org.apache.camel</groupId> @@ -90,6 +84,10 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-core-catalog</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-caffeine-lrucache</artifactId> </dependency> <dependency> diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainEventDispatcher.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainEventDispatcher.java index 1df54ab..2b6f368 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainEventDispatcher.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainEventDispatcher.java @@ -26,6 +26,11 @@ import org.apache.camel.main.MainSupport; */ public class CamelMainEventDispatcher implements org.apache.camel.main.MainListener { @Override + public void beforeConfigure(BaseMainSupport main) { + fireEvent(CamelMainEvents.BeforeConfigure.class, new CamelMainEvents.BeforeConfigure()); + } + + @Override public void configure(CamelContext context) { fireEvent(CamelMainEvents.Configure.class, new CamelMainEvents.Configure()); } diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainEvents.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainEvents.java index 122803a..75b1d0e 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainEvents.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainEvents.java @@ -21,6 +21,12 @@ public final class CamelMainEvents { } /** + * Event fired by {@link CamelMain} before the CamelContext is configured. + */ + public static class BeforeConfigure { + } + + /** * Event fired by {@link CamelMain} before the CamelContext is being created and started. */ public static class BeforeStart { diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java index f023163..ec0d238 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java @@ -21,11 +21,13 @@ import io.quarkus.runtime.RuntimeValue; import io.quarkus.runtime.ShutdownContext; import io.quarkus.runtime.annotations.Recorder; import org.apache.camel.CamelContext; +import org.apache.camel.ExtendedCamelContext; import org.apache.camel.RoutesBuilder; import org.apache.camel.impl.engine.DefaultReactiveExecutor; import org.apache.camel.main.MainListener; import org.apache.camel.main.RoutesCollector; import org.apache.camel.spi.ReactiveExecutor; +import org.apache.camel.spi.XMLRoutesDefinitionLoader; @Recorder public class CamelMainRecorder { @@ -75,7 +77,7 @@ public class CamelMainRecorder { } public void setReactiveExecutor(RuntimeValue<CamelMain> main, RuntimeValue<ReactiveExecutor> executor) { - main.getValue().getCamelContext().setReactiveExecutor(executor.getValue()); + main.getValue().getCamelContext().adapt(ExtendedCamelContext.class).setReactiveExecutor(executor.getValue()); } public void start(ShutdownContext shutdown, RuntimeValue<CamelMain> main) { @@ -100,7 +102,7 @@ public class CamelMainRecorder { public RuntimeValue<RoutesCollector> newRoutesCollector( RuntimeValue<RegistryRoutesLoader> registryRoutesLoader, - RuntimeValue<XmlRoutesLoader> xmlRoutesLoader) { + RuntimeValue<XMLRoutesDefinitionLoader> xmlRoutesLoader) { return new RuntimeValue<>(new CamelRoutesCollector(registryRoutesLoader.getValue(), xmlRoutesLoader.getValue())); } diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java index db05027..35e5688 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java @@ -20,17 +20,19 @@ import io.quarkus.arc.runtime.BeanContainer; import io.quarkus.runtime.RuntimeValue; import io.quarkus.runtime.annotations.Recorder; import org.apache.camel.CamelContext; +import org.apache.camel.catalog.RuntimeCamelCatalog; import org.apache.camel.model.ValidateDefinition; import org.apache.camel.model.validator.PredicateValidatorDefinition; import org.apache.camel.quarkus.core.FastFactoryFinderResolver.Builder; import org.apache.camel.reifier.ProcessorReifier; import org.apache.camel.reifier.validator.ValidatorReifier; -import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.spi.FactoryFinderResolver; import org.apache.camel.spi.ModelJAXBContextFactory; +import org.apache.camel.spi.ModelToXMLDumper; import org.apache.camel.spi.Registry; import org.apache.camel.spi.TypeConverterLoader; import org.apache.camel.spi.TypeConverterRegistry; +import org.apache.camel.spi.XMLRoutesDefinitionLoader; @Recorder public class CamelRecorder { @@ -60,21 +62,24 @@ public class CamelRecorder { RuntimeValue<Registry> registry, RuntimeValue<TypeConverterRegistry> typeConverterRegistry, RuntimeValue<ModelJAXBContextFactory> contextFactory, - RuntimeValue<XmlRoutesLoader> xmlLoader, + RuntimeValue<XMLRoutesDefinitionLoader> xmlLoader, + RuntimeValue<ModelToXMLDumper> xmlModelDumper, RuntimeValue<FactoryFinderResolver> factoryFinderResolver, BeanContainer beanContainer, String version, CamelConfig config) { - FastCamelContext context = new FastCamelContext(factoryFinderResolver.getValue(), version); - context.setDefaultExtension(RuntimeCamelCatalog.class, () -> new CamelRuntimeCatalog(context, config.runtimeCatalog)); + FastCamelContext context = new FastCamelContext( + factoryFinderResolver.getValue(), + version, + xmlLoader.getValue(), + xmlModelDumper.getValue()); + + context.setDefaultExtension(RuntimeCamelCatalog.class, () -> new CamelRuntimeCatalog(config.runtimeCatalog)); context.setRegistry(registry.getValue()); context.setTypeConverterRegistry(typeConverterRegistry.getValue()); context.setLoadTypeConverters(false); context.setModelJAXBContextFactory(contextFactory.getValue()); - - FastModel model = new FastModel(context, xmlLoader.getValue()); - context.setModel(model); context.init(); // register to the container @@ -122,8 +127,12 @@ public class CamelRecorder { return new RuntimeValue<>(new DisabledModelJAXBContextFactory()); } - public RuntimeValue<XmlRoutesLoader> newDisabledXmlRoutesLoader() { - return new RuntimeValue<>(new DisabledXmlRoutesLoader()); + public RuntimeValue<XMLRoutesDefinitionLoader> newDisabledXMLRoutesDefinitionLoader() { + return new RuntimeValue<>(new DisabledXMLRoutesDefinitionLoader()); + } + + public RuntimeValue<ModelToXMLDumper> newDisabledModelToXMLDumper() { + return new RuntimeValue<>(new DisabledModelToXMLDumper()); } public RuntimeValue<RegistryRoutesLoader> newDefaultRegistryRoutesLoader() { diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRoutesCollector.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRoutesCollector.java index 8f63cea..0c63b2a 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRoutesCollector.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRoutesCollector.java @@ -29,6 +29,7 @@ import org.apache.camel.main.RoutesCollector; import org.apache.camel.model.RoutesDefinition; import org.apache.camel.model.rest.RestsDefinition; import org.apache.camel.spi.PackageScanResourceResolver; +import org.apache.camel.spi.XMLRoutesDefinitionLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,9 +37,9 @@ public class CamelRoutesCollector implements RoutesCollector { private static final Logger LOGGER = LoggerFactory.getLogger(CamelRoutesCollector.class); private final RegistryRoutesLoader registryRoutesLoader; - private final XmlRoutesLoader xmlRoutesLoader; + private final XMLRoutesDefinitionLoader xmlRoutesLoader; - public CamelRoutesCollector(RegistryRoutesLoader registryRoutesLoader, XmlRoutesLoader xmlRoutesLoader) { + public CamelRoutesCollector(RegistryRoutesLoader registryRoutesLoader, XMLRoutesDefinitionLoader xmlRoutesLoader) { this.registryRoutesLoader = registryRoutesLoader; this.xmlRoutesLoader = xmlRoutesLoader; } @@ -47,7 +48,7 @@ public class CamelRoutesCollector implements RoutesCollector { return registryRoutesLoader; } - public XmlRoutesLoader getXmlRoutesLoader() { + public XMLRoutesDefinitionLoader getXmlRoutesLoader() { return xmlRoutesLoader; } @@ -69,7 +70,10 @@ public class CamelRoutesCollector implements RoutesCollector { LOGGER.info("Loading additional Camel XML routes from: {}", part); try { for (InputStream is : resolver.findResources(part)) { - answer.add(xmlRoutesLoader.loadRoutesDefinition(camelContext, is)); + Object definition = xmlRoutesLoader.loadRoutesDefinition(camelContext, is); + if (definition instanceof RoutesDefinition) { + answer.add((RoutesDefinition) definition); + } } } catch (FileNotFoundException e) { LOGGER.debug("No XML routes found in {}. Skipping XML routes detection.", part); @@ -90,7 +94,10 @@ public class CamelRoutesCollector implements RoutesCollector { LOGGER.info("Loading additional Camel XML rests from: {}", part); try { for (InputStream is : resolver.findResources(part)) { - answer.add(xmlRoutesLoader.loadRestsDefinition(camelContext, is)); + Object definition = xmlRoutesLoader.loadRestsDefinition(camelContext, is); + if (definition instanceof RestsDefinition) { + answer.add((RestsDefinition) definition); + } } } catch (FileNotFoundException e) { LOGGER.debug("No XML rests found in {}. Skipping XML rests detection.", part); diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRuntimeCatalog.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRuntimeCatalog.java index 5b56b9c..98474b3 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRuntimeCatalog.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRuntimeCatalog.java @@ -16,15 +16,12 @@ */ package org.apache.camel.quarkus.core; -import org.apache.camel.CamelContext; -import org.apache.camel.runtimecatalog.impl.DefaultRuntimeCamelCatalog; +import org.apache.camel.catalog.impl.DefaultRuntimeCamelCatalog; public class CamelRuntimeCatalog extends DefaultRuntimeCamelCatalog { private final CamelConfig.RuntimeCatalogConfig config; - public CamelRuntimeCatalog(CamelContext camelContext, CamelConfig.RuntimeCatalogConfig config) { - super(camelContext, true); - + public CamelRuntimeCatalog(CamelConfig.RuntimeCatalogConfig config) { this.config = config; } diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXmlRoutesLoader.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledModelToXMLDumper.java similarity index 73% rename from extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXmlRoutesLoader.java rename to extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledModelToXMLDumper.java index b470294..94f2f03 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXmlRoutesLoader.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledModelToXMLDumper.java @@ -16,22 +16,19 @@ */ package org.apache.camel.quarkus.core; -import java.io.InputStream; - import org.apache.camel.CamelContext; -import org.apache.camel.model.RoutesDefinition; -import org.apache.camel.model.rest.RestsDefinition; - -public class DisabledXmlRoutesLoader implements XmlRoutesLoader { +import org.apache.camel.NamedNode; +import org.apache.camel.spi.ModelToXMLDumper; +public class DisabledModelToXMLDumper implements ModelToXMLDumper { @Override - public RoutesDefinition loadRoutesDefinition(CamelContext context, InputStream inputStream) throws Exception { + public String dumpModelAsXml(CamelContext context, NamedNode definition) throws Exception { throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-core-xml"); } @Override - public RestsDefinition loadRestsDefinition(CamelContext context, InputStream is) throws Exception { + public String dumpModelAsXml(CamelContext context, NamedNode definition, boolean resolvePlaceholders, + boolean resolveDelegateEndpoints) throws Exception { throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-core-xml"); } - } diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledPredicateValidatorReifier.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledPredicateValidatorReifier.java index ee6347f..ef4c206 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledPredicateValidatorReifier.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledPredicateValidatorReifier.java @@ -24,12 +24,12 @@ import org.apache.camel.spi.Validator; public class DisabledPredicateValidatorReifier extends ValidatorReifier<PredicateValidatorDefinition> { - public DisabledPredicateValidatorReifier(ValidatorDefinition definition) { - super((PredicateValidatorDefinition) definition); + public DisabledPredicateValidatorReifier(CamelContext camelContext, ValidatorDefinition definition) { + super(camelContext, (PredicateValidatorDefinition) definition); } @Override - protected Validator doCreateValidator(CamelContext context) throws Exception { + protected Validator doCreateValidator() { throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-core-xml"); } diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java index 6eb8f75..4d796f8 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java @@ -24,12 +24,12 @@ import org.apache.camel.spi.RouteContext; public class DisabledValidateReifier extends ProcessorReifier<ValidateDefinition> { - public DisabledValidateReifier(ProcessorDefinition<?> definition) { - super((ValidateDefinition) definition); + public DisabledValidateReifier(RouteContext routeContext, ProcessorDefinition<?> definition) { + super(routeContext, (ValidateDefinition) definition); } @Override - public Processor createProcessor(RouteContext routeContext) throws Exception { + public Processor createProcessor() throws Exception { throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-core-xml"); } } diff --git a/extensions/core-xml/runtime/src/main/java/org/apache/camel/quarkus/component/xml/DefaultXmlRoutesLoader.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXMLRoutesDefinitionLoader.java similarity index 51% rename from extensions/core-xml/runtime/src/main/java/org/apache/camel/quarkus/component/xml/DefaultXmlRoutesLoader.java rename to extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXMLRoutesDefinitionLoader.java index c9e1455..c38edc8 100644 --- a/extensions/core-xml/runtime/src/main/java/org/apache/camel/quarkus/component/xml/DefaultXmlRoutesLoader.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXMLRoutesDefinitionLoader.java @@ -14,26 +14,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.quarkus.component.xml; +package org.apache.camel.quarkus.core; import java.io.InputStream; import org.apache.camel.CamelContext; -import org.apache.camel.model.ModelHelper; -import org.apache.camel.model.RoutesDefinition; -import org.apache.camel.model.rest.RestsDefinition; -import org.apache.camel.quarkus.core.XmlRoutesLoader; - -public class DefaultXmlRoutesLoader implements XmlRoutesLoader { +import org.apache.camel.NamedNode; +import org.apache.camel.spi.XMLRoutesDefinitionLoader; +public class DisabledXMLRoutesDefinitionLoader implements XMLRoutesDefinitionLoader { @Override - public RoutesDefinition loadRoutesDefinition(CamelContext context, InputStream is) throws Exception { - return ModelHelper.loadRoutesDefinition(context, is); + public Object loadRoutesDefinition(CamelContext context, InputStream inputStream) throws Exception { + throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-core-xml"); } @Override - public RestsDefinition loadRestsDefinition(CamelContext context, InputStream is) throws Exception { - return ModelHelper.loadRestsDefinition(context, is); + public Object loadRestsDefinition(CamelContext context, InputStream inputStream) throws Exception { + throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-core-xml"); } + @Override + public <T extends NamedNode> T createModelFromXml(CamelContext context, String xml, Class<T> type) throws Exception { + throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-core-xml"); + } } diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java index 1a2640b..da27c25 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java @@ -26,15 +26,14 @@ import org.apache.camel.AsyncProcessor; import org.apache.camel.CatalogCamelContext; import org.apache.camel.Component; import org.apache.camel.Endpoint; -import org.apache.camel.PollingConsumer; import org.apache.camel.Processor; -import org.apache.camel.Producer; import org.apache.camel.TypeConverter; +import org.apache.camel.catalog.RuntimeCamelCatalog; +import org.apache.camel.catalog.impl.DefaultRuntimeCamelCatalog; import org.apache.camel.component.microprofile.config.CamelMicroProfilePropertiesSource; import org.apache.camel.health.HealthCheckRegistry; import org.apache.camel.impl.DefaultExecutorServiceManager; import org.apache.camel.impl.engine.AbstractCamelContext; -import org.apache.camel.impl.engine.BaseRouteService; import org.apache.camel.impl.engine.BeanProcessorFactoryResolver; import org.apache.camel.impl.engine.BeanProxyFactoryResolver; import org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager; @@ -43,6 +42,7 @@ import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor; import org.apache.camel.impl.engine.DefaultCamelContextNameStrategy; import org.apache.camel.impl.engine.DefaultClassResolver; import org.apache.camel.impl.engine.DefaultComponentResolver; +import org.apache.camel.impl.engine.DefaultConfigurerResolver; import org.apache.camel.impl.engine.DefaultDataFormatResolver; import org.apache.camel.impl.engine.DefaultEndpointRegistry; import org.apache.camel.impl.engine.DefaultInflightRepository; @@ -63,13 +63,11 @@ import org.apache.camel.impl.engine.DefaultValidatorRegistry; import org.apache.camel.impl.engine.EndpointKey; import org.apache.camel.impl.engine.HeadersMapFactoryResolver; import org.apache.camel.impl.engine.RestRegistryFactoryResolver; -import org.apache.camel.impl.engine.ServicePool; import org.apache.camel.impl.health.DefaultHealthCheckRegistry; import org.apache.camel.impl.transformer.TransformerKey; import org.apache.camel.impl.validator.ValidatorKey; import org.apache.camel.model.Model; import org.apache.camel.processor.MulticastProcessor; -import org.apache.camel.quarkus.core.FastModel.FastRouteContext; import org.apache.camel.spi.AsyncProcessorAwaitManager; import org.apache.camel.spi.BeanIntrospection; import org.apache.camel.spi.BeanProcessorFactory; @@ -78,6 +76,7 @@ import org.apache.camel.spi.CamelBeanPostProcessor; import org.apache.camel.spi.CamelContextNameStrategy; import org.apache.camel.spi.ClassResolver; import org.apache.camel.spi.ComponentResolver; +import org.apache.camel.spi.ConfigurerResolver; import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.DataFormatResolver; import org.apache.camel.spi.EndpointRegistry; @@ -91,6 +90,7 @@ import org.apache.camel.spi.LanguageResolver; import org.apache.camel.spi.ManagementNameStrategy; import org.apache.camel.spi.MessageHistoryFactory; import org.apache.camel.spi.ModelJAXBContextFactory; +import org.apache.camel.spi.ModelToXMLDumper; import org.apache.camel.spi.NodeIdFactory; import org.apache.camel.spi.PackageScanClassResolver; import org.apache.camel.spi.PackageScanResourceResolver; @@ -108,35 +108,31 @@ import org.apache.camel.spi.TypeConverterRegistry; import org.apache.camel.spi.UnitOfWorkFactory; import org.apache.camel.spi.UuidGenerator; import org.apache.camel.spi.ValidatorRegistry; +import org.apache.camel.spi.XMLRoutesDefinitionLoader; import org.apache.camel.support.CamelContextHelper; import org.apache.camel.util.IOHelper; public class FastCamelContext extends AbstractCamelContext implements CatalogCamelContext { - private Model model; + private final Model model; private final String version; + private final XMLRoutesDefinitionLoader xmlLoader; + private final ModelToXMLDumper modelDumper; - public FastCamelContext(FactoryFinderResolver factoryFinderResolver, String version) { + public FastCamelContext(FactoryFinderResolver factoryFinderResolver, String version, XMLRoutesDefinitionLoader xmlLoader, + ModelToXMLDumper modelDumper) { super(false); this.version = version; + this.xmlLoader = xmlLoader; + this.modelDumper = modelDumper; + this.model = new FastModel(this); setFactoryFinderResolver(factoryFinderResolver); setTracing(Boolean.FALSE); setDebugging(Boolean.FALSE); setMessageHistory(Boolean.FALSE); - setDefaultExtension(HealthCheckRegistry.class, DefaultHealthCheckRegistry::new); - } - - public void setModel(Model model) { - this.model = model; - } - public void clearModel() { - this.model = null; - for (BaseRouteService rs : getRouteServices().values()) { - ((FastRouteContext) rs.getRouteContext()).clearModel(); - } } @Override @@ -274,16 +270,6 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam } @Override - protected ServicePool<Producer> createProducerServicePool() { - return new ServicePool<>(Endpoint::createProducer, Producer::getEndpoint, 100); - } - - @Override - protected ServicePool<PollingConsumer> createPollingConsumerServicePool() { - return new ServicePool<>(Endpoint::createPollingConsumer, PollingConsumer::getEndpoint, 100); - } - - @Override protected UnitOfWorkFactory createUnitOfWorkFactory() { return new DefaultUnitOfWorkFactory(); } @@ -328,6 +314,21 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam } @Override + protected XMLRoutesDefinitionLoader createXMLRoutesDefinitionLoader() { + return xmlLoader; + } + + @Override + protected ModelToXMLDumper createModelToXMLDumper() { + return modelDumper; + } + + @Override + protected RuntimeCamelCatalog createRuntimeCamelCatalog() { + return new DefaultRuntimeCamelCatalog(); + } + + @Override protected Tracer createTracer() { Tracer tracer = null; if (getRegistry() != null) { @@ -365,12 +366,12 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam } @Override - protected TransformerRegistry<TransformerKey> createTransformerRegistry() throws Exception { + protected TransformerRegistry<TransformerKey> createTransformerRegistry() { return new DefaultTransformerRegistry(this); } @Override - protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() throws Exception { + protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() { return new DefaultValidatorRegistry(this); } @@ -387,6 +388,11 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam } @Override + protected ConfigurerResolver createConfigurerResolver() { + return new DefaultConfigurerResolver(); + } + + @Override public void setTypeConverterRegistry(TypeConverterRegistry typeConverterRegistry) { super.setTypeConverterRegistry(typeConverterRegistry); @@ -486,7 +492,6 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam if (inputStream != null) { try { - log.debug("loading scheme {} ", path); return IOHelper.loadText(inputStream); } finally { IOHelper.close(inputStream); diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java index 182f252..9be64bd 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java @@ -40,12 +40,8 @@ import org.apache.camel.reifier.RouteReifier; import org.apache.camel.support.CamelContextHelper; public class FastModel extends BaseModel { - - private final XmlRoutesLoader xmlLoader; - - public FastModel(CamelContext camelContext, XmlRoutesLoader xmlLoader) { + public FastModel(CamelContext camelContext) { super(camelContext); - this.xmlLoader = xmlLoader; } @Override @@ -58,7 +54,7 @@ public class FastModel extends BaseModel { try { String id = routeDefinition.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory()); FastRouteContext routeContext = new FastRouteContext(camelContext, routeDefinition, id); - Route route = new RouteReifier(routeDefinition).createRoute(camelContext, routeContext); + Route route = new RouteReifier(routeContext, routeDefinition).createRoute(); FastRouteService routeService = createRouteService(route); mcc.startRouteService(routeService, true); } finally { diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java index 3a829ff..178250f 100644 --- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java +++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java @@ -18,8 +18,12 @@ package org.apache.camel.quarkus.core; import org.apache.camel.impl.converter.DefaultTypeConverter; import org.apache.camel.spi.TypeConverterLoader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class FastTypeConverter extends DefaultTypeConverter { + private static final Logger LOG = LoggerFactory.getLogger(FastTypeConverter.class); + public FastTypeConverter() { super(null, null, null, null, false); } @@ -27,7 +31,7 @@ public class FastTypeConverter extends DefaultTypeConverter { @Override protected void doStart() throws Exception { for (TypeConverterLoader loader : getCamelContext().getRegistry().findByType(TypeConverterLoader.class)) { - log.debug("TypeConverterLoader: {} loading converters", loader); + LOG.debug("TypeConverterLoader: {} loading converters", loader); loader.load(this); } } @@ -36,9 +40,4 @@ public class FastTypeConverter extends DefaultTypeConverter { public void loadCoreAndFastTypeConverters() throws Exception { throw new UnsupportedOperationException(); } - - @Override - protected void initTypeConverterLoaders() { - // no-op - } } diff --git a/extensions/pdf/deployment/src/main/java/org/apache/camel/quarkus/component/pdf/deployment/PdfProcessor.java b/extensions/pdf/deployment/src/main/java/org/apache/camel/quarkus/component/pdf/deployment/PdfProcessor.java index e7bbf14..612e673 100644 --- a/extensions/pdf/deployment/src/main/java/org/apache/camel/quarkus/component/pdf/deployment/PdfProcessor.java +++ b/extensions/pdf/deployment/src/main/java/org/apache/camel/quarkus/component/pdf/deployment/PdfProcessor.java @@ -19,9 +19,8 @@ package org.apache.camel.quarkus.component.pdf.deployment; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.builditem.FeatureBuildItem; -import io.quarkus.deployment.builditem.nativeimage.NativeImageConfigBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; -import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; +import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem; class PdfProcessor { @@ -32,6 +31,12 @@ class PdfProcessor { "org/apache/pdfbox/resources/glyphlist/additional.txt", "org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf" }; + private static final String[] RUNTIME_INITIALIZED_CLASSES = new String[] { + "org.apache.pdfbox.pdmodel.font.PDType1Font", + "org.apache.camel.component.pdf.PdfConfiguration", + "org.apache.camel.component.pdf.Standard14Fonts", + }; + @BuildStep FeatureBuildItem feature() { return new FeatureBuildItem(FEATURE); @@ -43,11 +48,9 @@ class PdfProcessor { } @BuildStep - NativeImageConfigBuildItem build(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) { - return NativeImageConfigBuildItem.builder() - .addRuntimeInitializedClass("org.apache.pdfbox.pdmodel.font.PDType1Font") - .addRuntimeInitializedClass("org.apache.camel.component.pdf.PdfConfiguration") - .build(); + void configureRuntimeInitializedClasses(BuildProducer<RuntimeInitializedClassBuildItem> runtimeInitializedClass) { + for (String className : RUNTIME_INITIALIZED_CLASSES) { + runtimeInitializedClass.produce(new RuntimeInitializedClassBuildItem(className)); + } } - } diff --git a/extensions/readme.adoc b/extensions/readme.adoc index 9e13c22..e79c4b4 100644 --- a/extensions/readme.adoc +++ b/extensions/readme.adoc @@ -5,7 +5,7 @@ Apache Camel Quarkus supports the following Camel artifacts as Quarkus Extension == Camel Components // components: START -Number of Camel components: 65 in 56 JAR artifacts (0 deprecated) +Number of Camel components: 66 in 57 JAR artifacts (0 deprecated) [width="100%",cols="4,1,5",options="header"] |=== @@ -51,7 +51,7 @@ Number of Camel components: 65 in 56 JAR artifacts (0 deprecated) `aws-sqs:queueNameOrArn` | 0.2.0 | The aws-sqs component is used for sending and receiving messages to Amazon's SQS service. | link:https://camel.apache.org/components/latest/aws-translate-component.html[AWS Translate] (camel-quarkus-aws-translate) + -`aws-translate:label` | 1.0.0-M3 | The aws-kms is used for managing Amazon Translate +`aws-translate:label` | 1.0.0-M3 | The aws-translate component is used for managing Amazon Translate | link:https://camel.apache.org/components/latest/bean-component.html[Bean] (camel-quarkus-bean) + `bean:beanName` | 0.2.0 | The bean component is for invoking Java beans from Camel. @@ -63,7 +63,7 @@ Number of Camel components: 65 in 56 JAR artifacts (0 deprecated) `box:apiName/methodName` | 1.2.0 | For uploading downloading and managing files folders groups collaborations etc on box DOT com. | link:https://camel.apache.org/components/latest/class-component.html[Class] (camel-quarkus-bean) + -`class:beanName` | 0.2.0 | The class component is for invoking Java classes (Java beans) from Camel. +`class:beanName` | 0.2.0 | The Class component is for invoking Java classes (Java beans) from Camel. | link:https://camel.apache.org/components/latest/consul-component.html[Consul] (camel-quarkus-consul) + `consul:apiEndpoint` | 1.0.0-M3 | The camel consul component allows you to work with Consul, a distributed, highly available, datacenter-aware, service discovery and configuration system. @@ -262,7 +262,7 @@ Number of Camel languages: 9 in 3 JAR artifacts (0 deprecated) | link:https://camel.apache.org/components/latest/bean-language.html[Bean method] (camel-quarkus-bean) | 0.2.0 | To use a Java bean (aka method call) in Camel expressions or predicates. -| link:https://camel.apache.org/components/latest/constant-language.html[Constant] (camel-quarkus-core) | 0.2.0 | To use a constant value in Camel expressions or predicates. +| link:https://camel.apache.org/components/latest/constant-language.html[Constant] (camel-quarkus-core) | 0.2.0 | To use a constant value in Camel expressions or predicates. Important: this is a fixed constant value that is only set once during starting up the route, do not use this if you want dynamic values during routing. | link:https://camel.apache.org/components/latest/exchangeProperty-language.html[ExchangeProperty] (camel-quarkus-core) | 0.2.0 | To use a Camel Exchange property in expressions or predicates. diff --git a/extensions/support/policy/deployment/src/main/java/org/apache/camel/quarkus/component/support/policy/deployment/PolicyProcessor.java b/extensions/support/policy/deployment/src/main/java/org/apache/camel/quarkus/component/support/policy/deployment/PolicyProcessor.java index 8993afa..9a2ce53 100644 --- a/extensions/support/policy/deployment/src/main/java/org/apache/camel/quarkus/component/support/policy/deployment/PolicyProcessor.java +++ b/extensions/support/policy/deployment/src/main/java/org/apache/camel/quarkus/component/support/policy/deployment/PolicyProcessor.java @@ -65,13 +65,7 @@ class PolicyProcessor { "org.apache.camel.component.fhir.FhirHistoryEndpointConfiguration", "org.apache.camel.component.fhir.FhirMetaEndpointConfiguration", "org.apache.camel.component.fhir.FhirPatchEndpointConfiguration", - "org.apache.camel.component.fhir.FhirDeleteEndpointConfiguration", - - /* org.apache.camel.component.consul.* can be removed after the upgrade to Camel 3.1 */ - "org.apache.camel.component.consul.ConsulConfiguration", - "org.apache.camel.component.consul.ConsulClientConfiguration", - "org.apache.camel.component.consul.health.ConsulHealthCheckRepositoryConfiguration", - "org.apache.camel.component.consul.cloud.ConsulServiceRegistryConfiguration"); + "org.apache.camel.component.fhir.FhirDeleteEndpointConfiguration"); } /* Make the build fail as long as there are banned classes registered for reflection */ diff --git a/extensions/support/xml/runtime/pom.xml b/extensions/support/xml/runtime/pom.xml index e72f1ab..5f99efa 100644 --- a/extensions/support/xml/runtime/pom.xml +++ b/extensions/support/xml/runtime/pom.xml @@ -52,7 +52,7 @@ <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-jaxp</artifactId> + <artifactId>camel-xml-jaxp</artifactId> </dependency> </dependencies> diff --git a/integration-tests/bindy/src/main/java/org/apache/camel/quarkus/component/bindy/it/BindyTestRoute.java b/integration-tests/bindy/src/main/java/org/apache/camel/quarkus/component/bindy/it/BindyTestRoute.java index f98c016..2d26c32 100644 --- a/integration-tests/bindy/src/main/java/org/apache/camel/quarkus/component/bindy/it/BindyTestRoute.java +++ b/integration-tests/bindy/src/main/java/org/apache/camel/quarkus/component/bindy/it/BindyTestRoute.java @@ -30,13 +30,13 @@ public class BindyTestRoute extends RouteBuilder { public void configure() { BindyDataFormat bindyCsvDataFormat = new BindyDataFormat(); bindyCsvDataFormat.setClassType(CsvOrder.class); - bindyCsvDataFormat.setType(BindyType.Csv); + bindyCsvDataFormat.setType(BindyType.Csv.name()); from("direct:jsonToCsv").marshal(bindyCsvDataFormat); from("direct:csvToJson").unmarshal(bindyCsvDataFormat); BindyDataFormat bindyFixedLengthDataFormat = new BindyDataFormat(); bindyFixedLengthDataFormat.setClassType(FixedLengthOrder.class); - bindyFixedLengthDataFormat.setType(BindyType.Fixed); + bindyFixedLengthDataFormat.setType(BindyType.Fixed.name()); from("direct:jsonToFixedLength").marshal(bindyFixedLengthDataFormat); from("direct:fixedLengthToJson").unmarshal(bindyFixedLengthDataFormat); diff --git a/integration-tests/core-main-xml/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java b/integration-tests/core-main-xml/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java index bab7f56..d7052bb 100644 --- a/integration-tests/core-main-xml/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java +++ b/integration-tests/core-main-xml/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java @@ -28,6 +28,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.apache.camel.CamelContext; +import org.apache.camel.ExtendedCamelContext; import org.apache.camel.spi.Registry; @Path("/test") @@ -44,6 +45,8 @@ public class CamelServlet { @GET @Produces(MediaType.APPLICATION_JSON) public JsonObject describeMain() { + final ExtendedCamelContext camelContext = main.getCamelContext().adapt(ExtendedCamelContext.class); + JsonArrayBuilder listeners = Json.createArrayBuilder(); main.getMainListeners().forEach(listener -> listeners.add(listener.getClass().getName())); @@ -62,6 +65,8 @@ public class CamelServlet { } return Json.createObjectBuilder() + .add("xml-loader", camelContext.getXMLRoutesDefinitionLoader().getClass().getName()) + .add("xml-model-dumper", camelContext.getModelToXMLDumper().getClass().getName()) .add("routes-collector", collector) .add("listeners", listeners) .add("routeBuilders", routeBuilders) diff --git a/integration-tests/core-main-xml/src/test/java/org/apache/camel/quarkus/core/CamelTest.java b/integration-tests/core-main-xml/src/test/java/org/apache/camel/quarkus/core/CamelTest.java index b6bc1eb..d3fd12d 100644 --- a/integration-tests/core-main-xml/src/test/java/org/apache/camel/quarkus/core/CamelTest.java +++ b/integration-tests/core-main-xml/src/test/java/org/apache/camel/quarkus/core/CamelTest.java @@ -21,6 +21,8 @@ import javax.ws.rs.core.MediaType; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import io.restassured.path.json.JsonPath; +import org.apache.camel.xml.jaxb.JaxbModelToXMLDumper; +import org.apache.camel.xml.jaxb.JaxbXMLRoutesDefinitionLoader; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -38,6 +40,9 @@ public class CamelTest { .body() .jsonPath(); + assertThat(p.getString("xml-loader")).isEqualTo(JaxbXMLRoutesDefinitionLoader.class.getName()); + assertThat(p.getString("xml-model-dumper")).isEqualTo(JaxbModelToXMLDumper.class.getName()); + assertThat(p.getList("routeBuilders", String.class)) .isEmpty(); assertThat(p.getList("routes", String.class)) diff --git a/integration-tests/core-main/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java b/integration-tests/core-main/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java index 1d13b31..de0c8ca 100644 --- a/integration-tests/core-main/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java +++ b/integration-tests/core-main/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java @@ -147,6 +147,8 @@ public class CamelServlet { } return Json.createObjectBuilder() + .add("xml-loader", camelContext.getXMLRoutesDefinitionLoader().getClass().getName()) + .add("xml-model-dumper", camelContext.getModelToXMLDumper().getClass().getName()) .add("routes-collector", collector) .add("listeners", listeners) .add("routeBuilders", routeBuilders) @@ -165,7 +167,7 @@ public class CamelServlet { @GET @Produces(MediaType.TEXT_PLAIN) public JsonObject reactiveExecutor() { - ReactiveExecutor executor = context.getReactiveExecutor(); + ReactiveExecutor executor = context.adapt(ExtendedCamelContext.class).getReactiveExecutor(); JsonObjectBuilder builder = Json.createObjectBuilder(); builder.add("class", executor.getClass().getName()); diff --git a/integration-tests/core-main/src/test/java/org/apache/camel/quarkus/core/CamelTest.java b/integration-tests/core-main/src/test/java/org/apache/camel/quarkus/core/CamelTest.java index a9c5892..ab7e3d4 100644 --- a/integration-tests/core-main/src/test/java/org/apache/camel/quarkus/core/CamelTest.java +++ b/integration-tests/core-main/src/test/java/org/apache/camel/quarkus/core/CamelTest.java @@ -77,9 +77,12 @@ public class CamelTest { .body() .jsonPath(); + assertThat(p.getString("xml-loader")).isEqualTo(DisabledXMLRoutesDefinitionLoader.class.getName()); + assertThat(p.getString("xml-model-dumper")).isEqualTo(DisabledModelToXMLDumper.class.getName()); + assertThat(p.getString("routes-collector.type")).isEqualTo(CamelRoutesCollector.class.getName()); assertThat(p.getString("routes-collector.type-registry")).isEqualTo(RegistryRoutesLoaders.Default.class.getName()); - assertThat(p.getString("routes-collector.type-xml")).isEqualTo(DisabledXmlRoutesLoader.class.getName()); + assertThat(p.getString("routes-collector.type-xml")).isEqualTo(DisabledXMLRoutesDefinitionLoader.class.getName()); assertThat(p.getList("listeners", String.class)) .containsOnly(CamelMainEventDispatcher.class.getName(), SupportListener.class.getName()); diff --git a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java index d83da39..773d87e 100644 --- a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java +++ b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CamelServlet.java @@ -30,8 +30,8 @@ import javax.ws.rs.core.MediaType; import org.apache.camel.CamelContext; import org.apache.camel.NoSuchLanguageException; +import org.apache.camel.catalog.RuntimeCamelCatalog; import org.apache.camel.component.log.LogComponent; -import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.spi.Registry; import org.apache.camel.support.processor.DefaultExchangeFormatter; @@ -103,7 +103,7 @@ public class CamelServlet { @GET @Produces(MediaType.APPLICATION_JSON) public String catalog(@PathParam("type") String type, @PathParam("name") String name) throws IOException { - final RuntimeCamelCatalog catalog = context.getExtension(RuntimeCamelCatalog.class); + final CamelRuntimeCatalog catalog = (CamelRuntimeCatalog) context.getExtension(RuntimeCamelCatalog.class); switch (type) { case "component": diff --git a/integration-tests/pdf/src/main/java/org/apache/camel/quarkus/component/pdf/it/PdfResource.java b/integration-tests/pdf/src/main/java/org/apache/camel/quarkus/component/pdf/it/PdfResource.java index c8d7bda..ffd6fa8 100644 --- a/integration-tests/pdf/src/main/java/org/apache/camel/quarkus/component/pdf/it/PdfResource.java +++ b/integration-tests/pdf/src/main/java/org/apache/camel/quarkus/component/pdf/it/PdfResource.java @@ -51,7 +51,7 @@ public class PdfResource { @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response createFromText(String message) throws Exception { document = producerTemplate.requestBody( - "pdf:create?fontSize=6&pageSize=PAGE_SIZE_A5", message, byte[].class); + "pdf:create?fontSize=6&pageSize=PAGE_SIZE_A5&font=Courier", message, byte[].class); LOG.infof("The PDDocument has been created and contains %d bytes", document.length); diff --git a/integration-tests/support/core-main/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/SupportListener.java b/integration-tests/support/core-main/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/SupportListener.java index 962d471..decef0a 100644 --- a/integration-tests/support/core-main/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/SupportListener.java +++ b/integration-tests/support/core-main/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/support/SupportListener.java @@ -39,6 +39,10 @@ public class SupportListener implements MainListener { } @Override + public void beforeConfigure(BaseMainSupport main) { + } + + @Override public void beforeStart(BaseMainSupport main) { main.addRoutesBuilder(new MyBuilder()); } diff --git a/pom.xml b/pom.xml index 6d63464..64e2d03 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,7 @@ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <ahc.version>2.10.4</ahc.version> - <camel.version>3.0.1</camel.version> + <camel.version>3.1.0</camel.version> <guava.version>26.0-jre</guava.version> <hapi.version>4.1.0</hapi.version> <quarkus.version>1.3.0.Alpha2</quarkus.version> @@ -173,6 +173,17 @@ <repositories> <repository> + <id>apache.camel.staging</id> + <url>https://repository.apache.org/content/repositories/orgapachecamel-1176/</url> + <name>Apache Camel 3.1.0 Staging Repo</name> + <snapshots> + <enabled>false</enabled> + </snapshots> + <releases> + <enabled>true</enabled> + </releases> + </repository> + <repository> <id>apache.snapshots</id> <url>https://repository.apache.org/snapshots/</url> <name>Apache Snapshot Repo</name> @@ -186,6 +197,16 @@ </repositories> <pluginRepositories> <pluginRepository> + <id>apache.camel.staging</id> + <url>https://repository.apache.org/content/repositories/orgapachecamel-1176/</url> + <snapshots> + <enabled>false</enabled> + </snapshots> + <releases> + <enabled>true</enabled> + </releases> + </pluginRepository> + <pluginRepository> <id>apache.snapshots</id> <url>https://repository.apache.org/snapshots/</url> <snapshots> diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml index bf2c976..aa79fad 100644 --- a/poms/bom/pom.xml +++ b/poms/bom/pom.xml @@ -178,6 +178,11 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-catalog</artifactId> + <version>${camel.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-cloud</artifactId> <version>${camel.version}</version> </dependency> @@ -198,6 +203,11 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-core-catalog</artifactId> + <version>${camel.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-core-engine</artifactId> <version>${camel.version}</version> </dependency> @@ -300,11 +310,6 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-jaxp</artifactId> - <version>${camel.version}</version> - </dependency> - <dependency> - <groupId>org.apache.camel</groupId> <artifactId>camel-jdbc</artifactId> <version>${camel.version}</version> </dependency> @@ -355,6 +360,12 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-main</artifactId> <version>${camel.version}</version> + <exclusions> + <exclusion> + <groupId>org.apache.camel</groupId> + <artifactId>camel-headersmap</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>org.apache.camel</groupId> diff --git a/tooling/package-maven-plugin/pom.xml b/tooling/package-maven-plugin/pom.xml index ad49f19..d8d07f2 100644 --- a/tooling/package-maven-plugin/pom.xml +++ b/tooling/package-maven-plugin/pom.xml @@ -53,6 +53,28 @@ </exclusions> </dependency> <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-support</artifactId> + <version>${camel.version}</version> + <exclusions> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-util</artifactId> + <version>${camel.version}</version> + <exclusions> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId> <exclusions> @@ -69,6 +91,10 @@ <artifactId>commons-io</artifactId> </exclusion> <exclusion> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </exclusion> + <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> @@ -77,6 +103,12 @@ <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-artifact</artifactId> + <exclusions> + <exclusion> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>org.apache.maven</groupId> diff --git a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/ExtMvelHelper.java b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/ExtMvelHelper.java index 5066e5d..0b0f86e 100644 --- a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/ExtMvelHelper.java +++ b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/ExtMvelHelper.java @@ -19,10 +19,10 @@ package org.apache.camel.quarkus.maven; import java.nio.file.Path; import org.apache.camel.maven.packaging.MvelHelper; -import org.apache.camel.maven.packaging.StringHelper; -import org.apache.camel.maven.packaging.model.ComponentModel; -import org.apache.camel.maven.packaging.model.DataFormatModel; -import org.apache.camel.maven.packaging.model.LanguageModel; +import org.apache.camel.tooling.util.Strings; +import org.apache.camel.tooling.model.ComponentModel; +import org.apache.camel.tooling.model.DataFormatModel; +import org.apache.camel.tooling.model.LanguageModel; public class ExtMvelHelper { @@ -37,7 +37,7 @@ public class ExtMvelHelper { } public String getFirstVersionShort(Object model) { - return StringHelper.cutLastZeroDigit((String) invokeGetter(model, "getFirstVersion")); + return org.apache.camel.tooling.model.Strings.cutLastZeroDigit((String) invokeGetter(model, "getFirstVersion")); } public String getDocLink(Object model) { @@ -76,6 +76,6 @@ public class ExtMvelHelper { } private String getExtensionDocName(Object model) { - return StringHelper.after((String) invokeGetter(model, "getArtifactId"), "camel-quarkus-") + ".adoc"; + return Strings.after((String) invokeGetter(model, "getArtifactId"), "camel-quarkus-") + ".adoc"; } } diff --git a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/JSonSchemaHelper.java b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/JSonSchemaHelper.java new file mode 100644 index 0000000..1b560d0 --- /dev/null +++ b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/JSonSchemaHelper.java @@ -0,0 +1,567 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.quarkus.maven; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.apache.camel.util.json.JsonArray; +import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; + +/** + * Used for parsing Camel components json meta-data descriptors. + */ +public final class JSonSchemaHelper { + + private static final String[] LOGGING_LEVELS = new String[]{"ERROR", "WARN", "INFO", "DEBUG", "TRACE", "OFF"}; + + private JSonSchemaHelper() { + } + + /** + * Parses the camel-main json schema to split it into a list or rows, where each row contains key value pairs with the metadata + * + * @param json the main configuration json + * @return a list of all the rows, where each row is a set of key value pairs with metadata + * @throws RuntimeException is thrown if error parsing the json data + */ + @SuppressWarnings("unchecked") + public static List<Map<String, String>> parseMainJsonSchema(String json) { + List<Map<String, String>> answer = new ArrayList<>(); + if (json == null) { + return answer; + } + + // convert into a List<Map<String, String>> structure which is expected as output from this parser + try { + JsonObject output = (JsonObject) Jsoner.deserialize(json); + for (String key : output.keySet()) { + JsonArray array = (JsonArray) output.get(key); + if (key.equals("properties")) { + // flattern each entry in the row with name as they key, and its value as the content (its a map also) + for (Object obj : array) { + Map entry = (Map) obj; + Map<String, String> newRow = new LinkedHashMap(); + newRow.putAll(entry); + answer.add(newRow); + String name = ((Map) obj).get("name").toString(); + // use naming style with camel case + String lookupKey = dashToCamelCase(name); + newRow.put("name", lookupKey); + // its the java type + String type = newRow.get("type"); + newRow.put("javaType", type); + newRow.put("type", fromMainToType(type)); + // add known enums + if ("org.apache.camel.LoggingLevel".equals(type)) { + newRow.put("enum", "ERROR,WARN,INFO,DEBUG,TRACE,OFF"); + } else if ("org.apache.camel.ManagementStatisticsLevel".equals(type)) { + newRow.put("enum", "Extended,Default,RoutesOnly,Off"); + } else if ("org.apache.camel.spi.RestBindingMode".equals(type)) { + newRow.put("enum", "auto,off,json,xml,json_xml"); + } else if ("org.apache.camel.spi.RestHostNameResolver".equals(type)) { + newRow.put("enum", "allLocalIp,localIp,localHostName"); + } + } + } + } + } catch (Exception e) { + // wrap parsing exceptions as runtime + throw new RuntimeException("Cannot parse json", e); + } + + return answer; + } + + private static String fromMainToType(String type) { + if ("boolean".equals(type) || "java.lang.Boolean".equals(type)) { + return "boolean"; + } else if ("int".equals(type) || "java.lang.Integer".equals(type)) { + return "integer"; + } else if ("long".equals(type) || "java.lang.Long".equals(type)) { + return "integer"; + } else if ("float".equals(type) || "java.lang.Float".equals(type)) { + return "number"; + } else if ("double".equals(type) || "java.lang.Double".equals(type)) { + return "number"; + } else if ("string".equals(type) || "java.lang.String".equals(type)) { + return "string"; + } else { + return "object"; + } + } + + /** + * Parses the json schema to split it into a list or rows, where each row contains key value pairs with the metadata + * + * @param group the group to parse from such as <tt>component</tt>, <tt>componentProperties</tt>, or <tt>properties</tt>. + * @param json the json + * @return a list of all the rows, where each row is a set of key value pairs with metadata + * @throws RuntimeException is thrown if error parsing the json data + */ + @SuppressWarnings("unchecked") + public static List<Map<String, String>> parseJsonSchema(String group, String json, boolean parseProperties) { + List<Map<String, String>> answer = new ArrayList<>(); + if (json == null) { + return answer; + } + + // convert into a List<Map<String, String>> structure which is expected as output from this parser + try { + JsonObject output = (JsonObject) Jsoner.deserialize(json); + for (String key : output.keySet()) { + Map row = output.getMap(key); + if (key.equals(group)) { + if (parseProperties) { + // flattern each entry in the row with name as they key, and its value as the content (its a map also) + for (Object obj : row.entrySet()) { + Map.Entry entry = (Map.Entry) obj; + Map<String, String> newRow = new LinkedHashMap(); + newRow.put("name", entry.getKey().toString()); + + Map newData = transformMap((Map) entry.getValue()); + newRow.putAll(newData); + answer.add(newRow); + } + } else { + // flattern each entry in the row as a list of single Map<key, value> elements + Map newData = transformMap(row); + for (Object obj : newData.entrySet()) { + Map.Entry entry = (Map.Entry) obj; + Map<String, String> newRow = new LinkedHashMap<>(); + newRow.put(entry.getKey().toString(), entry.getValue().toString()); + answer.add(newRow); + } + } + } + } + } catch (Exception e) { + // wrap parsing exceptions as runtime + throw new RuntimeException("Cannot parse json", e); + } + + return answer; + } + + private static Map<String, String> transformMap(Map jsonMap) { + Map<String, String> answer = new LinkedHashMap<>(); + + for (Object rowObj : jsonMap.entrySet()) { + Map.Entry rowEntry = (Map.Entry) rowObj; + // if its a list type then its an enum, and we need to parse it as a single line separated with comma + // to be backwards compatible + Object newValue = rowEntry.getValue(); + if (newValue instanceof List) { + List<?> list = (List) newValue; + newValue = list.stream().map(Object::toString) + .collect(Collectors.joining(",")); + } + // ensure value is escaped + String value = escapeJson(newValue.toString()); + answer.put(rowEntry.getKey().toString(), value); + } + + return answer; + } + + private static String escapeJson(String value) { + // need to safe encode \r as \\r so its escaped + // need to safe encode \n as \\n so its escaped + // need to safe encode \t as \\t so its escaped + return value + .replace("\\r", "\\\\r") + .replace("\\n", "\\\\n") + .replace("\\t", "\\\\t"); + } + + public static boolean isComponentLenientProperties(List<Map<String, String>> rows) { + for (Map<String, String> row : rows) { + if (row.containsKey("lenientProperties")) { + return "true".equals(row.get("lenientProperties")); + } + } + return false; + } + + public static boolean isComponentConsumerOnly(List<Map<String, String>> rows) { + for (Map<String, String> row : rows) { + if (row.containsKey("consumerOnly")) { + return "true".equals(row.get("consumerOnly")); + } + } + return false; + } + + public static boolean isComponentProducerOnly(List<Map<String, String>> rows) { + for (Map<String, String> row : rows) { + if (row.containsKey("producerOnly")) { + return "true".equals(row.get("producerOnly")); + } + } + return false; + } + + public static boolean isPropertyConsumerOnly(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String labels = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("label")) { + labels = row.get("label"); + } + if (found) { + return labels != null && labels.contains("consumer"); + } + } + return false; + } + + public static boolean isPropertyProducerOnly(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String labels = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("label")) { + labels = row.get("label"); + } + if (found) { + return labels != null && labels.contains("producer"); + } + } + return false; + } + + public static boolean isPropertyRequired(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + boolean required = false; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("required")) { + required = "true".equals(row.get("required")); + } + if (found) { + return required; + } + } + return false; + } + + public static boolean isPropertyDeprecated(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + boolean deprecated = false; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("deprecated")) { + deprecated = "true".equals(row.get("deprecated")); + } + if (found) { + return deprecated; + } + } + return false; + } + + public static String getPropertyKind(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String kind = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("kind")) { + kind = row.get("kind"); + } + if (found) { + return kind; + } + } + return null; + } + + public static String getPropertyJavaType(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String javaType = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("javaType")) { + javaType = row.get("javaType"); + } + if (found) { + return javaType; + } + } + return null; + } + + public static boolean isPropertyBoolean(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String type = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("type")) { + type = row.get("type"); + } + if (found) { + return "boolean".equals(type); + } + } + return false; + } + + public static boolean isPropertyInteger(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String type = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("type")) { + type = row.get("type"); + } + if (found) { + return "integer".equals(type); + } + } + return false; + } + + public static boolean isPropertyArray(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String type = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("type")) { + type = row.get("type"); + } + if (found) { + return "array".equals(type); + } + } + return false; + } + + public static boolean isPropertyNumber(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String type = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("type")) { + type = row.get("type"); + } + if (found) { + return "number".equals(type); + } + } + return false; + } + + public static boolean isPropertyObject(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String type = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("type")) { + type = row.get("type"); + } + if (found) { + return "object".equals(type); + } + } + return false; + } + + public static String getPropertyDefaultValue(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String defaultValue = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("defaultValue")) { + defaultValue = row.get("defaultValue"); + } + if (found) { + return defaultValue; + } + } + return null; + } + + public static String stripOptionalPrefixFromName(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + boolean found = false; + if (row.containsKey("name")) { + String optionalPrefix = row.get("optionalPrefix"); + if (optionalPrefix != null && !optionalPrefix.isEmpty() && name.startsWith(optionalPrefix)) { + name = name.substring(optionalPrefix.length()); + // try again + return stripOptionalPrefixFromName(rows, name); + } else { + found = name.equalsIgnoreCase(row.get("name")); + } + } + if (found) { + return name; + } + } + return name; + } + + public static String getPropertyEnum(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String enums = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("enum")) { + enums = row.get("enum"); + } + if (found) { + return enums; + } + } + return null; + } + + public static String getPropertyPrefix(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String prefix = null; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("prefix")) { + prefix = row.get("prefix"); + } + if (found) { + return prefix; + } + } + return null; + } + + public static boolean isPropertyMultiValue(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + boolean multiValue = false; + boolean found = false; + if (row.containsKey("name")) { + found = name.equalsIgnoreCase(row.get("name")); + } + if (row.containsKey("multiValue")) { + multiValue = "true".equals(row.get("multiValue")); + } + if (found) { + return multiValue; + } + } + return false; + } + + public static String getPropertyNameFromNameWithPrefix(List<Map<String, String>> rows, String name) { + for (Map<String, String> row : rows) { + String propertyName = null; + boolean found = false; + if (row.containsKey("name")) { + propertyName = row.get("name"); + } + if (row.containsKey("prefix")) { + String preifx = row.get("prefix"); + found = name.startsWith(preifx); + } + if (found) { + return propertyName; + } + } + return null; + } + + public static Map<String, String> getRow(List<Map<String, String>> rows, String key) { + for (Map<String, String> row : rows) { + if (key.equals(row.get("name"))) { + return row; + } + } + return null; + } + + public static Set<String> getNames(List<Map<String, String>> rows) { + Set<String> answer = new LinkedHashSet<>(); + for (Map<String, String> row : rows) { + if (row.containsKey("name")) { + answer.add(row.get("name")); + } + } + return answer; + } + + /** + * Converts the string from dash format into camel case (hello-great-world -> helloGreatWorld) + * + * @param text the string + * @return the string camel cased + */ + private static String dashToCamelCase(String text) { + if (text == null) { + return null; + } + int length = text.length(); + if (length == 0) { + return text; + } + if (text.indexOf('-') == -1) { + return text; + } + + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < text.length(); i++) { + char c = text.charAt(i); + if (c == '-') { + i++; + sb.append(Character.toUpperCase(text.charAt(i))); + } else { + sb.append(c); + } + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java index 0ca8459..0a07936 100644 --- a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java +++ b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java @@ -64,7 +64,7 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import static org.apache.camel.maven.packaging.PackageHelper.loadText; +import static org.apache.camel.tooling.util.PackageHelper.loadText; /** * Prepares the Quarkus provider camel catalog to include component it supports diff --git a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java index bb392f4..b5fac67 100644 --- a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java +++ b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java @@ -33,12 +33,11 @@ import java.util.TreeSet; import static java.util.stream.Collectors.toSet; -import org.apache.camel.maven.packaging.JSonSchemaHelper; -import org.apache.camel.maven.packaging.StringHelper; -import org.apache.camel.maven.packaging.model.ComponentModel; -import org.apache.camel.maven.packaging.model.DataFormatModel; -import org.apache.camel.maven.packaging.model.LanguageModel; -import org.apache.camel.maven.packaging.model.OtherModel; +import org.apache.camel.util.StringHelper; +import org.apache.camel.tooling.model.ComponentModel; +import org.apache.camel.tooling.model.DataFormatModel; +import org.apache.camel.tooling.model.LanguageModel; +import org.apache.camel.tooling.model.OtherModel; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -49,8 +48,8 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; import org.mvel2.templates.TemplateRuntime; -import static org.apache.camel.maven.packaging.PackageHelper.loadText; -import static org.apache.camel.maven.packaging.PackageHelper.writeText; +import static org.apache.camel.tooling.util.PackageHelper.loadText; +import static org.apache.camel.tooling.util.PackageHelper.writeText; /** * Updates the documentation in: @@ -183,7 +182,7 @@ public class UpdateDocExtensionsListMojo extends AbstractMojo { // how many deprecated long deprecated = components.stream() - .filter(c -> "true".equals(c.getDeprecated())) + .filter(ComponentModel::isDeprecated) .count(); // update the big readme file in the extensions dir @@ -251,7 +250,7 @@ public class UpdateDocExtensionsListMojo extends AbstractMojo { // how many deprecated long deprecated = models.stream() - .filter(m -> "true".equals(m.getDeprecated())) + .filter(DataFormatModel::isDeprecated) .count(); // filter out camel-core @@ -325,7 +324,7 @@ public class UpdateDocExtensionsListMojo extends AbstractMojo { // how many deprecated long deprecated = languages.stream() - .filter(l -> "true".equals(l.getDeprecated())) + .filter(LanguageModel::isDeprecated) .count(); // update the big readme file in the extensions dir @@ -387,7 +386,7 @@ public class UpdateDocExtensionsListMojo extends AbstractMojo { // how many deprecated long deprecated = others.stream() - .filter(o -> "true".equals(o.getDeprecated())) + .filter(OtherModel::isDeprecated) .count(); // update the big readme file in the extensions dir @@ -665,22 +664,22 @@ public class UpdateDocExtensionsListMojo extends AbstractMojo { List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("component", json, false); ComponentModel component = new ComponentModel(); - component.setScheme(JSonSchemaHelper.getSafeValue("scheme", rows)); - component.setSyntax(JSonSchemaHelper.getSafeValue("syntax", rows)); - component.setAlternativeSyntax(JSonSchemaHelper.getSafeValue("alternativeSyntax", rows)); - component.setAlternativeSchemes(JSonSchemaHelper.getSafeValue("alternativeSchemes", rows)); - component.setTitle(JSonSchemaHelper.getSafeValue("title", rows)); - component.setDescription(JSonSchemaHelper.getSafeValue("description", rows)); - component.setFirstVersion(JSonSchemaHelper.getSafeValue("firstVersion", rows)); - component.setLabel(JSonSchemaHelper.getSafeValue("label", rows)); - component.setDeprecated(JSonSchemaHelper.getSafeValue("deprecated", rows)); - component.setDeprecationNote(JSonSchemaHelper.getSafeValue("deprecationNote", rows)); - component.setConsumerOnly(JSonSchemaHelper.getSafeValue("consumerOnly", rows)); - component.setProducerOnly(JSonSchemaHelper.getSafeValue("producerOnly", rows)); - component.setJavaType(JSonSchemaHelper.getSafeValue("javaType", rows)); - component.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows)); - component.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows)); - component.setVersion(JSonSchemaHelper.getSafeValue("version", rows)); + component.setScheme(getJSonValue("scheme", rows)); + component.setSyntax(getJSonValue("syntax", rows)); + component.setAlternativeSyntax(getJSonValue("alternativeSyntax", rows)); + component.setAlternativeSchemes(getJSonValue("alternativeSchemes", rows)); + component.setTitle(getJSonValue("title", rows)); + component.setDescription(getJSonValue("description", rows)); + component.setFirstVersion(getJSonValue("firstVersion", rows)); + component.setLabel(getJSonValue("label", rows)); + component.setDeprecated(Boolean.valueOf(getJSonValue("deprecated", rows))); + component.setDeprecationNote(getJSonValue("deprecationNote", rows)); + component.setConsumerOnly(Boolean.valueOf(getJSonValue("consumerOnly", rows))); + component.setProducerOnly(Boolean.valueOf(getJSonValue("producerOnly", rows))); + component.setJavaType(getJSonValue("javaType", rows)); + component.setGroupId(getJSonValue("groupId", rows)); + component.setArtifactId(getJSonValue("artifactId", rows)); + component.setVersion(getJSonValue("version", rows)); return component; } @@ -689,18 +688,18 @@ public class UpdateDocExtensionsListMojo extends AbstractMojo { List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("dataformat", json, false); DataFormatModel dataFormat = new DataFormatModel(); - dataFormat.setName(JSonSchemaHelper.getSafeValue("name", rows)); - dataFormat.setTitle(JSonSchemaHelper.getSafeValue("title", rows)); - dataFormat.setModelName(JSonSchemaHelper.getSafeValue("modelName", rows)); - dataFormat.setDescription(JSonSchemaHelper.getSafeValue("description", rows)); - dataFormat.setFirstVersion(JSonSchemaHelper.getSafeValue("firstVersion", rows)); - dataFormat.setLabel(JSonSchemaHelper.getSafeValue("label", rows)); - dataFormat.setDeprecated(JSonSchemaHelper.getSafeValue("deprecated", rows)); - dataFormat.setDeprecationNote(JSonSchemaHelper.getSafeValue("deprecationNote", rows)); - dataFormat.setJavaType(JSonSchemaHelper.getSafeValue("javaType", rows)); - dataFormat.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows)); - dataFormat.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows)); - dataFormat.setVersion(JSonSchemaHelper.getSafeValue("version", rows)); + dataFormat.setName(getJSonValue("name", rows)); + dataFormat.setTitle(getJSonValue("title", rows)); + dataFormat.setModelName(getJSonValue("modelName", rows)); + dataFormat.setDescription(getJSonValue("description", rows)); + dataFormat.setFirstVersion(getJSonValue("firstVersion", rows)); + dataFormat.setLabel(getJSonValue("label", rows)); + dataFormat.setDeprecated(Boolean.valueOf(getJSonValue("deprecated", rows))); + dataFormat.setDeprecationNote(getJSonValue("deprecationNote", rows)); + dataFormat.setJavaType(getJSonValue("javaType", rows)); + dataFormat.setGroupId(getJSonValue("groupId", rows)); + dataFormat.setArtifactId(getJSonValue("artifactId", rows)); + dataFormat.setVersion(getJSonValue("version", rows)); return dataFormat; } @@ -709,18 +708,18 @@ public class UpdateDocExtensionsListMojo extends AbstractMojo { List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("language", json, false); LanguageModel language = new LanguageModel(); - language.setTitle(JSonSchemaHelper.getSafeValue("title", rows)); - language.setName(JSonSchemaHelper.getSafeValue("name", rows)); - language.setModelName(JSonSchemaHelper.getSafeValue("modelName", rows)); - language.setDescription(JSonSchemaHelper.getSafeValue("description", rows)); - language.setFirstVersion(JSonSchemaHelper.getSafeValue("firstVersion", rows)); - language.setLabel(JSonSchemaHelper.getSafeValue("label", rows)); - language.setDeprecated(JSonSchemaHelper.getSafeValue("deprecated", rows)); - language.setDeprecationNote(JSonSchemaHelper.getSafeValue("deprecationNote", rows)); - language.setJavaType(JSonSchemaHelper.getSafeValue("javaType", rows)); - language.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows)); - language.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows)); - language.setVersion(JSonSchemaHelper.getSafeValue("version", rows)); + language.setTitle(getJSonValue("title", rows)); + language.setName(getJSonValue("name", rows)); + language.setModelName(getJSonValue("modelName", rows)); + language.setDescription(getJSonValue("description", rows)); + language.setFirstVersion(getJSonValue("firstVersion", rows)); + language.setLabel(getJSonValue("label", rows)); + language.setDeprecated(Boolean.valueOf(getJSonValue("deprecated", rows))); + language.setDeprecationNote(getJSonValue("deprecationNote", rows)); + language.setJavaType(getJSonValue("javaType", rows)); + language.setGroupId(getJSonValue("groupId", rows)); + language.setArtifactId(getJSonValue("artifactId", rows)); + language.setVersion(getJSonValue("version", rows)); return language; } @@ -729,20 +728,29 @@ public class UpdateDocExtensionsListMojo extends AbstractMojo { List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("other", json, false); OtherModel other = new OtherModel(); - other.setName(JSonSchemaHelper.getSafeValue("name", rows)); - other.setTitle(JSonSchemaHelper.getSafeValue("title", rows)); - other.setDescription(JSonSchemaHelper.getSafeValue("description", rows)); - other.setFirstVersion(JSonSchemaHelper.getSafeValue("firstVersion", rows)); - other.setLabel(JSonSchemaHelper.getSafeValue("label", rows)); - other.setDeprecated(JSonSchemaHelper.getSafeValue("deprecated", rows)); - other.setDeprecationNote(JSonSchemaHelper.getSafeValue("deprecationNote", rows)); - other.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows)); - other.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows)); - other.setVersion(JSonSchemaHelper.getSafeValue("version", rows)); + other.setName(getJSonValue("name", rows)); + other.setTitle(getJSonValue("title", rows)); + other.setDescription(getJSonValue("description", rows)); + other.setFirstVersion(getJSonValue("firstVersion", rows)); + other.setLabel(getJSonValue("label", rows)); + other.setDeprecated(Boolean.valueOf(getJSonValue("deprecated", rows))); + other.setDeprecationNote(getJSonValue("deprecationNote", rows)); + other.setGroupId(getJSonValue("groupId", rows)); + other.setArtifactId(getJSonValue("artifactId", rows)); + other.setVersion(getJSonValue("version", rows)); return other; } + private String getJSonValue(String key, List<Map<String, String>> rows) { + for (Map<String, String> row : rows) { + if (row.containsKey(key)) { + return row.get(key); + } + } + return ""; + } + private Path getExtensionsDocPath() { return Paths.get(websiteDocBaseDir.toString(), "extensions"); }