This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch sdir in repository https://gitbox.apache.org/repos/asf/camel.git
commit cf9eadae4d84e7561507da009691d3829ff1b958 Author: Claus Ibsen <[email protected]> AuthorDate: Wed Aug 28 10:36:20 2024 +0200 CAMEL-21126: camel-jbang - Using --source-dir and reload should not fail if non Camel routes are added in the source-dir such as csv files. --- .../java/org/apache/camel/main/KameletMain.java | 7 ++++ .../download/DependencyDownloaderRoutesLoader.java | 12 +++++++ .../main/download/NoopRoutesBuilderLoader.java | 39 ++++++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java index 0053fd4ba03..f15786c1c65 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java @@ -786,6 +786,13 @@ public class KameletMain extends MainCommandLineSupport { } routesLoader.setIgnoreLoadingError(this.mainConfigurationProperties.isRoutesCollectorIgnoreLoadingError()); + // routes loader should ignore unknown extensions when using --source-dir as users may drop files + // in this folder that are not Camel routes but resource files. + String sourceDir = getInitialProperties().getProperty("camel.jbang.sourceDir"); + if (sourceDir != null) { + routesLoader.setIgnoreUnknownExtensions(true); + } + // use resolvers that can auto downloaded ecc.addContextPlugin(RoutesLoader.class, routesLoader); } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java index 6a81aaa6ecc..950340d01ff 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java @@ -34,6 +34,7 @@ public class DependencyDownloaderRoutesLoader extends DefaultRoutesLoader { private final DependencyDownloader downloader; private final String camelVersion; private final String kameletsVersion; + private boolean ignoreUnknownExtensions; public DependencyDownloaderRoutesLoader(CamelContext camelContext) { this(camelContext, null, null); @@ -46,6 +47,14 @@ public class DependencyDownloaderRoutesLoader extends DefaultRoutesLoader { this.kameletsVersion = kameletsVersion; } + public boolean isIgnoreUnknownExtensions() { + return ignoreUnknownExtensions; + } + + public void setIgnoreUnknownExtensions(boolean ignoreUnknownExtensions) { + this.ignoreUnknownExtensions = ignoreUnknownExtensions; + } + @Override protected RoutesBuilderLoader resolveService(String extension) { // we need to eager capture that we use this route loader extension so lets @@ -96,6 +105,9 @@ public class DependencyDownloaderRoutesLoader extends DefaultRoutesLoader { // allows for custom initialization initRoutesBuilderLoader(loader); ServiceHelper.startService(loader); + } else if (ignoreUnknownExtensions) { + // use a dummy loader to avoid camel to fail + loader = new NoopRoutesBuilderLoader(extension); } } return loader; diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/NoopRoutesBuilderLoader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/NoopRoutesBuilderLoader.java new file mode 100644 index 00000000000..3f7b18ad01e --- /dev/null +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/NoopRoutesBuilderLoader.java @@ -0,0 +1,39 @@ +/* + * 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.main.download; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.dsl.support.RouteBuilderLoaderSupport; +import org.apache.camel.spi.Resource; + +public class NoopRoutesBuilderLoader extends RouteBuilderLoaderSupport { + + protected NoopRoutesBuilderLoader(String extension) { + super(extension); + } + + @Override + protected RouteBuilder doLoadRouteBuilder(Resource resource) throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + // noop + } + }; + } + +}
