You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2020/02/18 08:14:35 UTC
[camel-quarkus] 03/03: Upgrade to Camel 3.1.0 - WIP
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 8784bcd4a58d88a07fed60f9e6ee654905e33e09
Author: James Netherton <ja...@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 | 2 +-
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, 955 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..dfc14f6 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-SNAPSHOT</camel.version>
<guava.version>26.0-jre</guava.version>
<hapi.version>4.1.0</hapi.version>
<quarkus.version>1.3.0.Alpha2</quarkus.version>
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");
}