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 2023/08/23 13:49:52 UTC

[camel-quarkus] branch main updated: Populate FastComponentNameResolver component names from included component service paths

This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 89fcb6dc69 Populate FastComponentNameResolver component names from included component service paths
89fcb6dc69 is described below

commit 89fcb6dc694ead4df418148e018a677a0bd857d9
Author: James Netherton <ja...@gmail.com>
AuthorDate: Wed Aug 23 08:35:46 2023 +0100

    Populate FastComponentNameResolver component names from included component service paths
    
    Fixes #5214
---
 .../quarkus/core/deployment/CamelProcessor.java    | 22 +++++++++++-----------
 .../foundation/component-name-resolver/pom.xml     | 17 +++++++++++++++++
 .../src/main/resources/application.properties      | 18 ++++++++++++++++++
 .../name/resolver/ComponentNameResolverTest.java   |  8 ++++++--
 integration-tests/foundation-grouped/pom.xml       | 17 +++++++++++++++++
 5 files changed, 69 insertions(+), 13 deletions(-)

diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
index d119331488..38de8686c4 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
@@ -54,10 +54,6 @@ import org.apache.camel.quarkus.core.CamelConfigFlags;
 import org.apache.camel.quarkus.core.CamelProducers;
 import org.apache.camel.quarkus.core.CamelRecorder;
 import org.apache.camel.quarkus.core.FastFactoryFinderResolver.Builder;
-import org.apache.camel.quarkus.core.deployment.catalog.BuildTimeCamelCatalog;
-import org.apache.camel.quarkus.core.deployment.catalog.BuildTimeJsonSchemaResolver;
-import org.apache.camel.quarkus.core.deployment.catalog.SchemaResource;
-import org.apache.camel.quarkus.core.deployment.spi.BuildTimeCamelCatalogBuildItem;
 import org.apache.camel.quarkus.core.deployment.spi.CamelComponentNameResolverBuildItem;
 import org.apache.camel.quarkus.core.deployment.spi.CamelFactoryFinderResolverBuildItem;
 import org.apache.camel.quarkus.core.deployment.spi.CamelModelJAXBContextFactoryBuildItem;
@@ -399,15 +395,19 @@ class CamelProcessor {
     @Record(ExecutionTime.STATIC_INIT)
     @BuildStep
     CamelComponentNameResolverBuildItem componentNameResolver(
-            BuildTimeCamelCatalogBuildItem camelCatalog,
+            ApplicationArchivesBuildItem applicationArchives,
+            CamelConfig camelConfig,
             CamelRecorder recorder) {
-        BuildTimeCamelCatalog catalog = camelCatalog.getCatalog();
-        BuildTimeJsonSchemaResolver jSonSchemaResolver = catalog.getJSonSchemaResolver();
-        Set<String> componentNames = jSonSchemaResolver.getSchemaResources()
-                .stream()
-                .filter(resource -> resource.getType().equals("component"))
-                .map(SchemaResource::getName)
+
+        PathFilter pathFilter = new PathFilter.Builder()
+                .include("META-INF/services/org/apache/camel/component/*")
+                .exclude(camelConfig.service.registry.excludePatterns)
+                .build();
+
+        Set<String> componentNames = CamelSupport.services(applicationArchives, pathFilter)
+                .map(CamelServiceBuildItem::getName)
                 .collect(Collectors.collectingAndThen(Collectors.toUnmodifiableSet(), TreeSet::new));
+
         return new CamelComponentNameResolverBuildItem(recorder.createComponentNameResolver(componentNames));
     }
 
diff --git a/integration-test-groups/foundation/component-name-resolver/pom.xml b/integration-test-groups/foundation/component-name-resolver/pom.xml
index 2e1cbf7b03..77f43db781 100644
--- a/integration-test-groups/foundation/component-name-resolver/pom.xml
+++ b/integration-test-groups/foundation/component-name-resolver/pom.xml
@@ -42,6 +42,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-mock</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-cron</artifactId>
+        </dependency>
         <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy</artifactId>
@@ -97,6 +101,19 @@
             </activation>
             <dependencies>
                 <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-cron-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
                 <dependency>
                     <groupId>org.apache.camel.quarkus</groupId>
                     <artifactId>camel-quarkus-direct-deployment</artifactId>
diff --git a/integration-test-groups/foundation/component-name-resolver/src/main/resources/application.properties b/integration-test-groups/foundation/component-name-resolver/src/main/resources/application.properties
new file mode 100644
index 0000000000..05db67f567
--- /dev/null
+++ b/integration-test-groups/foundation/component-name-resolver/src/main/resources/application.properties
@@ -0,0 +1,18 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+quarkus.camel.service.registry.exclude-patterns=META-INF/services/org/apache/camel/component/cron
diff --git a/integration-test-groups/foundation/component-name-resolver/src/test/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverTest.java b/integration-test-groups/foundation/component-name-resolver/src/test/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverTest.java
index 6402d1473d..c6f40ef392 100644
--- a/integration-test-groups/foundation/component-name-resolver/src/test/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverTest.java
+++ b/integration-test-groups/foundation/component-name-resolver/src/test/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverTest.java
@@ -16,13 +16,15 @@
  */
 package org.apache.camel.quarkus.core.component.name.resolver;
 
+import java.util.List;
+
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import org.apache.camel.quarkus.core.FastComponentNameResolver;
 import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @QuarkusTest
@@ -38,15 +40,17 @@ public class ComponentNameResolverTest {
 
     @Test
     public void resolveComponentNames() {
-        String componentNames = RestAssured.get("/component-name-resolver/resolve")
+        String rawComponentNames = RestAssured.get("/component-name-resolver/resolve")
                 .then()
                 .statusCode(200)
                 .extract()
                 .body()
                 .asString();
 
+        List<String> componentNames = List.of(rawComponentNames.split(","));
         assertTrue(componentNames.contains("direct"));
         assertTrue(componentNames.contains("log"));
         assertTrue(componentNames.contains("mock"));
+        assertFalse(componentNames.contains("cron"));
     }
 }
diff --git a/integration-tests/foundation-grouped/pom.xml b/integration-tests/foundation-grouped/pom.xml
index 01c2d3633a..104bf7a858 100644
--- a/integration-tests/foundation-grouped/pom.xml
+++ b/integration-tests/foundation-grouped/pom.xml
@@ -68,6 +68,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-cron</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-dataset</artifactId>
@@ -305,6 +309,19 @@
                         </exclusion>
                     </exclusions>
                 </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-cron-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
                 <dependency>
                     <groupId>org.apache.camel.quarkus</groupId>
                     <artifactId>camel-quarkus-dataset-deployment</artifactId>