This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 0688cf22cfb CAMEL-21342: camel-kamelet-main - openapi generator should
be optional and downloaded dynamically (#15928)
0688cf22cfb is described below
commit 0688cf22cfb24eb89d3a7381788f2b4efbf45865
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Oct 11 16:11:04 2024 +0200
CAMEL-21342: camel-kamelet-main - openapi generator should be optional and
downloaded dynamically (#15928)
* CAMEL-21342: camel-kamelet-main - openapi generator should be optional
and downloaded dynamically
* camel-core: Fix potential NPE when stopping routes
---
.../camel/impl/engine/AbstractCamelContext.java | 6 +++--
.../apache/camel/model/rest/ParamDefinition.java | 6 ++---
dsl/camel-kamelet-main/pom.xml | 17 +++++++-------
.../reload/OpenApiGeneratorReloadStrategy.java | 26 +++++++++++++++++-----
tooling/openapi-rest-dsl-generator/pom.xml | 2 +-
.../camel/generator/openapi/RestDslGenerator.java | 13 +++++++++++
.../generator/openapi/RestDslXmlGenerator.java | 4 ++--
.../generator/openapi/RestDslYamlGenerator.java | 4 ++--
8 files changed, 53 insertions(+), 25 deletions(-)
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 93940f7e738..c8195968755 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -1062,14 +1062,16 @@ public abstract class AbstractCamelContext extends
BaseService
routesOrdered.sort(comparator);
for (RouteStartupOrder order : routesOrdered) {
Route route = order.getRoute();
- boolean stopped =
controller.getRouteStatus(route.getRouteId()).isStopped();
+ var status = controller.getRouteStatus(route.getRouteId());
+ boolean stopped = status == null || status.isStopped();
if (!stopped) {
stopRoute(route.getRouteId(), LoggingLevel.DEBUG);
}
}
// stop any remainder routes
for (Route route : getRoutes()) {
- boolean stopped =
controller.getRouteStatus(route.getRouteId()).isStopped();
+ var status = controller.getRouteStatus(route.getRouteId());
+ boolean stopped = status == null || status.isStopped();
if (!stopped) {
stopRoute(route.getRouteId(), LoggingLevel.DEBUG);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/rest/ParamDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/rest/ParamDefinition.java
index cf755f98e55..fa86aeacda3 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/rest/ParamDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/rest/ParamDefinition.java
@@ -104,7 +104,7 @@ public class ParamDefinition {
}
public String getDescription() {
- return description != null ? description : "";
+ return description;
}
/**
@@ -118,7 +118,7 @@ public class ParamDefinition {
* Sets the parameter default value.
*/
public String getDefaultValue() {
- return defaultValue != null ? defaultValue : "";
+ return defaultValue;
}
public void setDefaultValue(String defaultValue) {
@@ -159,7 +159,7 @@ public class ParamDefinition {
}
public String getDataType() {
- return dataType != null ? dataType : "string";
+ return dataType;
}
/**
diff --git a/dsl/camel-kamelet-main/pom.xml b/dsl/camel-kamelet-main/pom.xml
index 531ed1dcd0d..22b0b68f97d 100644
--- a/dsl/camel-kamelet-main/pom.xml
+++ b/dsl/camel-kamelet-main/pom.xml
@@ -64,6 +64,14 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-kamelet</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-xml-jaxp</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-xml-io</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-bean</artifactId>
@@ -126,21 +134,12 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-catalog-console</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-openapi-rest-dsl-generator</artifactId>
- </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-resourceresolver-github</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-xml-io</artifactId>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-xml-io-dsl</artifactId>
diff --git
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
index 846cf37e81e..544b778491a 100644
---
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
+++
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
@@ -17,14 +17,15 @@
package org.apache.camel.main.reload;
import java.io.File;
+import java.lang.reflect.Method;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.parser.OpenAPIV3Parser;
-import org.apache.camel.generator.openapi.RestDslGenerator;
+import org.apache.camel.CamelContext;
+import org.apache.camel.main.download.DependencyDownloader;
import org.apache.camel.support.FileWatcherResourceReloadStrategy;
+import org.apache.camel.support.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,6 +41,7 @@ public class OpenApiGeneratorReloadStrategy extends
FileWatcherResourceReloadStr
private static final String OPENAPI_GENERATED_FILE =
".camel-jbang/generated-openapi.yaml";
private final File openapi;
+ private Method method;
public OpenApiGeneratorReloadStrategy(File openapi) {
String parent = openapi.getParent();
@@ -58,9 +60,7 @@ public class OpenApiGeneratorReloadStrategy extends
FileWatcherResourceReloadStr
LOG.info("Generating open-api rest-dsl from: {}", openapi);
try {
- OpenAPIV3Parser parser = new OpenAPIV3Parser();
- OpenAPI document = parser.read(openapi.getAbsolutePath());
- String out =
RestDslGenerator.toYaml(document).generate(getCamelContext(), false);
+ String out = (String) ObjectHelper.invokeMethodSafe(method,
null, getCamelContext(), openapi);
Files.write(Paths.get(OPENAPI_GENERATED_FILE), out.getBytes());
} catch (Exception e) {
LOG.warn("Error generating open-api rest-dsl due: {}",
e.getMessage(), e);
@@ -68,4 +68,18 @@ public class OpenApiGeneratorReloadStrategy extends
FileWatcherResourceReloadStr
});
}
+ @Override
+ protected void doInit() throws Exception {
+ super.doInit();
+
+ DependencyDownloader downloader =
getCamelContext().hasService(DependencyDownloader.class);
+ // these are extra dependencies used in special use-case so download
as hidden
+ downloader.downloadHiddenDependency("org.apache.camel",
"camel-openapi-rest-dsl-generator",
+ getCamelContext().getVersion());
+
+ // the generator is invoked via reflection
+ Class<?> clazz = getCamelContext().getClassResolver()
+
.resolveMandatoryClass("org.apache.camel.generator.openapi.RestDslGenerator");
+ method = clazz.getDeclaredMethod("generateToYaml", CamelContext.class,
File.class);
+ }
}
diff --git a/tooling/openapi-rest-dsl-generator/pom.xml
b/tooling/openapi-rest-dsl-generator/pom.xml
index b878c429a3e..1a5563b3275 100644
--- a/tooling/openapi-rest-dsl-generator/pom.xml
+++ b/tooling/openapi-rest-dsl-generator/pom.xml
@@ -41,7 +41,7 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
- <artifactId>camel-xml-jaxb</artifactId>
+ <artifactId>camel-xml-io</artifactId>
</dependency>
<dependency>
<groupId>com.squareup</groupId>
diff --git
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
index f4e839c13b3..ab2d0e7b1da 100644
---
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
+++
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.generator.openapi;
+import java.io.File;
import java.net.URI;
import java.nio.file.Path;
import java.util.List;
@@ -27,6 +28,8 @@ import javax.annotation.processing.Filer;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.servers.Server;
import io.swagger.v3.oas.models.servers.ServerVariable;
+import io.swagger.v3.parser.OpenAPIV3Parser;
+import org.apache.camel.CamelContext;
import org.apache.camel.model.rest.RestsDefinition;
import static org.apache.camel.util.ObjectHelper.notNull;
@@ -239,4 +242,14 @@ public abstract class RestDslGenerator<G> {
public static RestDslYamlGenerator toYaml(final OpenAPI document) {
return new RestDslYamlGenerator(document);
}
+
+ public static RestDslYamlGenerator toYaml(File path) {
+ OpenAPIV3Parser parser = new OpenAPIV3Parser();
+ OpenAPI document = parser.read(path.getAbsolutePath());
+ return new RestDslYamlGenerator(document);
+ }
+
+ public static String generateToYaml(CamelContext camelContext, File path)
throws Exception {
+ return toYaml(path).generate(camelContext);
+ }
}
diff --git
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
index 0082d9909b1..fc8fc0d8882 100644
---
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
+++
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
@@ -37,8 +37,8 @@ import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.PathItem;
import org.apache.camel.CamelContext;
import org.apache.camel.model.rest.RestsDefinition;
-import org.apache.camel.support.PluginHelper;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.xml.LwModelToXMLDumper;
public class RestDslXmlGenerator extends RestDslGenerator<RestDslXmlGenerator>
{
@@ -60,7 +60,7 @@ public class RestDslXmlGenerator extends
RestDslGenerator<RestDslXmlGenerator> {
}
final RestsDefinition rests = emitter.result();
- final String xml =
PluginHelper.getModelToXMLDumper(context).dumpModelAsXml(context, rests);
+ final String xml = new LwModelToXMLDumper().dumpModelAsXml(context,
rests);
final DocumentBuilderFactory builderFactory =
DocumentBuilderFactory.newInstance();
builderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,
true);
diff --git
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
index 6882f482e90..5c042ee13f2 100644
---
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
+++
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
@@ -52,8 +52,8 @@ import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.PathItem;
import org.apache.camel.CamelContext;
import org.apache.camel.model.rest.RestsDefinition;
-import org.apache.camel.support.PluginHelper;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.xml.LwModelToXMLDumper;
public class RestDslYamlGenerator extends
RestDslGenerator<RestDslYamlGenerator> {
@@ -85,7 +85,7 @@ public class RestDslYamlGenerator extends
RestDslGenerator<RestDslYamlGenerator>
}
final RestsDefinition rests = emitter.result();
- final String xml =
PluginHelper.getModelToXMLDumper(context).dumpModelAsXml(context, rests);
+ final String xml = new LwModelToXMLDumper().dumpModelAsXml(context,
rests);
final DocumentBuilderFactory builderFactory =
DocumentBuilderFactory.newInstance();
builderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,
true);