From ba8ef0a5f51a6d2a28003a6a70ba67e258c746b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6rdes?= Date: Tue, 5 May 2026 10:40:47 +0200 Subject: [PATCH 1/2] Handle file URIs in OpenAPI directory resolution and add test for relative directory support. --- .../openapi/serviceproxy/OpenAPIRecordFactory.java | 5 ++++- .../serviceproxy/OpenAPIRecordFactoryTest.java | 14 +++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactory.java b/core/src/main/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactory.java index 079c2e6ab7..83eb0ab8a4 100644 --- a/core/src/main/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactory.java +++ b/core/src/main/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactory.java @@ -280,7 +280,10 @@ private boolean toYesNo(OpenAPISpec.YesNoOpenAPIOption option) { } private File[] getOpenAPIFiles(String directoryName) { - File dir = new File(directoryName); + String resolvedDirectoryName = resolve(directoryName); + File dir = resolvedDirectoryName.startsWith("file:") + ? new File(pathFromFileURI(resolvedDirectoryName)) + : new File(resolvedDirectoryName); if (!dir.exists() || !dir.isDirectory()) { throw new ConfigurationException(format("Cannot open directory %s. Please check the OpenAPI configuration of your API.", dir.getAbsolutePath())); } diff --git a/core/src/test/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactoryTest.java b/core/src/test/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactoryTest.java index c1de2b4abc..28b27d6807 100644 --- a/core/src/test/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactoryTest.java +++ b/core/src/test/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactoryTest.java @@ -123,6 +123,18 @@ void referencesDepth() { assertNotNull(getMail(rec)); } + @Test + void readsDirectoryRelativeToBaseLocation() { + OpenAPISpec spec = new OpenAPISpec(); + spec.setDir("paths"); + + Map recs = factory.create(singletonList(spec)); + + assertEquals(3, recs.size()); + assertTrue(recs.containsKey("api-b-path-foo-v1-0")); + assertTrue(recs.keySet().stream().anyMatch(id -> id.startsWith("api-a-path-foo-v1-0"))); + } + @Test void getUniqueIdNoCollision() { assertEquals("customers-api-v1-0", factory.getUniqueId(new HashMap<>(), new OpenAPIRecord(getApi(this, "/openapi/specs/customers.yml"), null))); @@ -134,4 +146,4 @@ void getUniqueIdCollision() { recs.put("customers-api-v1-0", new OpenAPIRecord()); assertEquals("customers-api-v1-0-0", factory.getUniqueId(recs, new OpenAPIRecord(getApi(this, "/openapi/specs/customers.yml"), null))); } -} \ No newline at end of file +} From cad27de4189e9df4ef8cf52706029d3ae9aa2532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6rdes?= Date: Tue, 12 May 2026 08:19:24 +0200 Subject: [PATCH 2/2] Simplify OpenAPI directory resolution by reducing redundant code in `getOpenAPIFiles`. --- .../core/openapi/serviceproxy/OpenAPIRecordFactory.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/core/src/main/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactory.java b/core/src/main/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactory.java index 83eb0ab8a4..c2a4567e79 100644 --- a/core/src/main/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactory.java +++ b/core/src/main/java/com/predic8/membrane/core/openapi/serviceproxy/OpenAPIRecordFactory.java @@ -280,10 +280,7 @@ private boolean toYesNo(OpenAPISpec.YesNoOpenAPIOption option) { } private File[] getOpenAPIFiles(String directoryName) { - String resolvedDirectoryName = resolve(directoryName); - File dir = resolvedDirectoryName.startsWith("file:") - ? new File(pathFromFileURI(resolvedDirectoryName)) - : new File(resolvedDirectoryName); + File dir = new File(pathFromFileURI(resolve(directoryName))); if (!dir.exists() || !dir.isDirectory()) { throw new ConfigurationException(format("Cannot open directory %s. Please check the OpenAPI configuration of your API.", dir.getAbsolutePath())); }