This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch openapi in repository https://gitbox.apache.org/repos/asf/camel.git
commit e65694ff05bb53120de4c6818d74162b2c629c32 Author: Claus Ibsen <[email protected]> AuthorDate: Fri Oct 11 15:51:05 2024 +0200 CAMEL-21342: camel-kamelet-main - openapi generator should be optional and downloaded dynamically --- .../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 ++-- 7 files changed, 49 insertions(+), 23 deletions(-) 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);
