This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch camel-main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/camel-main by this push:
     new ba383623e2 Fix Swagger classpath resource loading in native mode
ba383623e2 is described below

commit ba383623e239fe890f9a9da41689b09a81b1bd13
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

Reply via email to