This is an automated email from the ASF dual-hosted git repository. fmariani 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 796675ec265 CAMEL-21731: Adding reference to external Open API docs 796675ec265 is described below commit 796675ec2655150ae7ca5d33d3ed542aecd276a5 Author: Croway <federico.mariani.1...@gmail.com> AuthorDate: Fri Feb 14 11:07:01 2025 +0100 CAMEL-21731: Adding reference to external Open API docs --- .../main/java/org/apache/camel/openapi/BeanConfig.java | 14 ++++++++++++++ .../java/org/apache/camel/openapi/RestOpenApiSupport.java | 15 +++++++++++++++ .../apache/camel/openapi/RestOpenApiLicenseInfoTest.java | 6 +++++- docs/user-manual/modules/ROOT/pages/rest-dsl.adoc | 2 ++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/BeanConfig.java b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/BeanConfig.java index 6cf35b94057..163645de700 100644 --- a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/BeanConfig.java +++ b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/BeanConfig.java @@ -18,6 +18,7 @@ package org.apache.camel.openapi; import java.util.Map; +import io.swagger.v3.oas.models.ExternalDocumentation; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.media.ComposedSchema; @@ -41,6 +42,7 @@ public class BeanConfig { String basePath; String defaultConsumes = DEFAULT_MEDIA_TYPE; String defaultProduces = DEFAULT_MEDIA_TYPE; + ExternalDocumentation externalDocs; public String[] getSchemes() { return schemes; @@ -128,10 +130,22 @@ public class BeanConfig { this.defaultProduces = defaultProduces; } + public ExternalDocumentation getExternalDocs() { + return externalDocs; + } + + public void setExternalDocs(ExternalDocumentation externalDocs) { + this.externalDocs = externalDocs; + } + public OpenAPI configure(OpenAPI openApi) { if (info != null) { openApi.setInfo(info); } + if (externalDocs != null) { + openApi.setExternalDocs(externalDocs); + } + if (this.schemes != null) { for (String scheme : this.schemes) { String url = scheme + "://" + this.host; diff --git a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java index 0cee3261d0b..ddfa07241c0 100644 --- a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java +++ b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java @@ -33,6 +33,7 @@ import io.swagger.v3.core.util.Json; import io.swagger.v3.core.util.Json31; import io.swagger.v3.core.util.Yaml; import io.swagger.v3.core.util.Yaml31; +import io.swagger.v3.oas.models.ExternalDocumentation; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Contact; import io.swagger.v3.oas.models.info.Info; @@ -244,6 +245,20 @@ public class RestOpenApiSupport { setInfo(openApiConfig, version, title, description, termsOfService, licenseName, licenseUrl, contactName, contactUrl, contactEmail); + + String externalDocsDescription = (String) config.get("externalDocs.description"); + String externalDocsUrl = (String) config.get("externalDocs.url"); + + setExternalDocs(openApiConfig, externalDocsUrl, externalDocsDescription); + } + + private static void setExternalDocs(BeanConfig openApiConfig, String externalDocsUrl, String externalDocsDescription) { + if (externalDocsUrl != null) { + ExternalDocumentation externalDocumentation = new ExternalDocumentation(); + externalDocumentation.setDescription(externalDocsDescription); + externalDocumentation.setUrl(externalDocsUrl); + openApiConfig.setExternalDocs(externalDocumentation); + } } private void setInfo( diff --git a/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiLicenseInfoTest.java b/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiLicenseInfoTest.java index 061d979aa9e..0ec5e6266e9 100644 --- a/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiLicenseInfoTest.java +++ b/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiLicenseInfoTest.java @@ -43,7 +43,9 @@ public class RestOpenApiLicenseInfoTest { .apiProperty("api.contact.email", "ca...@apache.org") .apiProperty("api.contact.url", "https://camel.apache.org") .apiProperty("api.license.name", "Apache V2") - .apiProperty("api.license.url", "https://www.apache.org/licenses/LICENSE-2.0"); + .apiProperty("api.license.url", "https://www.apache.org/licenses/LICENSE-2.0") + .apiProperty("externalDocs.url", "https://openweathermap.org/api") + .apiProperty("externalDocs.description", "API Documentation"); rest("/api") .get("/api").to("direct:api"); @@ -68,5 +70,7 @@ public class RestOpenApiLicenseInfoTest { assertTrue(json.contains("\"name\" : \"Mr Camel\"")); assertTrue(json.contains("\"email\" : \"ca...@apache.org\"")); assertTrue(json.contains("\"url\" : \"https://camel.apache.org\"")); + assertTrue(json.contains("\"externalDocs\" :")); + assertTrue(json.contains("\"description\" : \"API Documentation\"")); } } diff --git a/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc b/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc index d255a1ff630..0fcff8b2fbf 100644 --- a/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc +++ b/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc @@ -865,4 +865,6 @@ Most of the properties affect the OpenAPI https://github.com/OAI/OpenAPI-Specifi | api.contact.email | The email address of the contact person/organization | api.specification.contentType.json | The Content-Type of the served OpenAPI JSON specification, `application/json` by default | api.specification.contentType.yaml | The Content-Type of the served OpenAPI YAML specification, `text/yaml` by default +| externalDocs.url | The URI for the target documentation. This must be in the form of a URI +| externalDocs.description | A description of the target documentation |===