This is an automated email from the ASF dual-hosted git repository. jiriondrusek pushed a commit to branch camel-main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 1696672cbd50363ffdea089f1b9403a4d6ce4cfb Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Thu Apr 25 09:19:42 2024 +0100 Fix Swagger classpath resource loading in native mode --- .../runtime/graal/SwaggerSubstitutions.java | 44 ++++++++++++++++++++++ .../component/rest/openapi/it/RestOpenapiTest.java | 3 -- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/extensions-support/swagger/runtime/src/main/java/org/apache/camel/quarkus/support/swagger/runtime/graal/SwaggerSubstitutions.java b/extensions-support/swagger/runtime/src/main/java/org/apache/camel/quarkus/support/swagger/runtime/graal/SwaggerSubstitutions.java index c48cd6c7af..5bfd13dc8e 100644 --- a/extensions-support/swagger/runtime/src/main/java/org/apache/camel/quarkus/support/swagger/runtime/graal/SwaggerSubstitutions.java +++ b/extensions-support/swagger/runtime/src/main/java/org/apache/camel/quarkus/support/swagger/runtime/graal/SwaggerSubstitutions.java @@ -19,6 +19,9 @@ package org.apache.camel.quarkus.support.swagger.runtime.graal; import java.util.Calendar; import java.util.List; +import com.oracle.svm.core.annotate.Alias; +import com.oracle.svm.core.annotate.RecomputeFieldValue; +import com.oracle.svm.core.annotate.RecomputeFieldValue.Kind; import com.oracle.svm.core.annotate.Substitute; import com.oracle.svm.core.annotate.TargetClass; import io.swagger.parser.OpenAPIParser; @@ -27,6 +30,9 @@ import io.swagger.v3.parser.core.extensions.SwaggerParserExtension; import io.swagger.v3.parser.core.models.AuthorizationValue; import io.swagger.v3.parser.core.models.ParseOptions; import io.swagger.v3.parser.core.models.SwaggerParseResult; +import io.swagger.v3.parser.exception.ReadContentException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; final class SwaggerSubstitutions { } @@ -53,6 +59,44 @@ final class OpenAPIParserSubstitutions { } } +@TargetClass(OpenAPIV3Parser.class) +final class OpenAPIPV3ParserSubstitutions { + @Alias + @RecomputeFieldValue(kind = Kind.FromAlias) + private static Logger LOGGER = LoggerFactory.getLogger(OpenAPIV3Parser.class); + + @Substitute + public SwaggerParseResult readLocation(String url, List<AuthorizationValue> auth, ParseOptions options) { + try { + if (url.startsWith("resource:")) { + url = url.replaceFirst("resource:", ""); + } + final String content = readContentFromLocation(url, emptyListIfNull(auth)); + LOGGER.debug("Loaded raw data: {}", content); + return readContents(content, auth, options, url); + } catch (ReadContentException e) { + LOGGER.warn("Exception while reading:", e); + return SwaggerParseResult.ofError(e.getMessage()); + } + } + + @Alias + private String readContentFromLocation(String location, List<AuthorizationValue> auth) { + return null; + } + + @Alias + private <T> List<T> emptyListIfNull(List<T> list) { + return null; + } + + @Alias + public SwaggerParseResult readContents(String swaggerAsString, List<AuthorizationValue> auth, ParseOptions options, + String location) { + return null; + } +} + @TargetClass(Calendar.Builder.class) final class CalendarBuilderSubstitution { @Substitute diff --git a/integration-tests/rest-openapi/src/test/java/org/apache/camel/quarkus/component/rest/openapi/it/RestOpenapiTest.java b/integration-tests/rest-openapi/src/test/java/org/apache/camel/quarkus/component/rest/openapi/it/RestOpenapiTest.java index 5bca131e44..0f016c08b9 100644 --- a/integration-tests/rest-openapi/src/test/java/org/apache/camel/quarkus/component/rest/openapi/it/RestOpenapiTest.java +++ b/integration-tests/rest-openapi/src/test/java/org/apache/camel/quarkus/component/rest/openapi/it/RestOpenapiTest.java @@ -21,7 +21,6 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; -import io.quarkus.test.junit.DisabledOnIntegrationTest; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; @@ -72,13 +71,11 @@ class RestOpenapiTest { invokeApiEndpoint("/rest-openapi/fruits/list/bean"); } - @DisabledOnIntegrationTest("https://github.com/apache/camel-quarkus/issues/5945") @Test public void testInvokeClasspathApiEndpoint() { invokeApiEndpoint("/rest-openapi/fruits/list/classpath"); } - @DisabledOnIntegrationTest("https://github.com/apache/camel-quarkus/issues/5945") @Test public void testInvokeApiEndpointWithRequestValidationEnabled() { // Empty request body