Skip to content

Commit 0bb4f18

Browse files
code1x1Denis Behrends
andauthored
#10056 Fix relative url as basePath (#10057)
* #10056 Fix relative url as basePath * Add tests handle relative urls in servers * PR Task: * replace tabs with spaces * can `servers` be null or empty? * PR Task: fix empty line tab * Update DefaultGenerator.java Fix lines change tabs to spaces * Fix tabs spaces Co-authored-by: Denis Behrends <[email protected]>
1 parent 3284fc2 commit 0bb4f18

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,11 @@ void configureGeneratorProperties() {
268268
URL url = URLPathUtils.getServerURL(openAPI, config.serverVariableOverrides());
269269
contextPath = removeTrailingSlash(config.escapeText(url.getPath())); // for backward compatibility
270270
basePathWithoutHost = contextPath;
271-
basePath = removeTrailingSlash(config.escapeText(URLPathUtils.getHost(openAPI, config.serverVariableOverrides())));
271+
if (URLPathUtils.isRelativeUrl(openAPI.getServers())) {
272+
basePath = removeTrailingSlash(basePathWithoutHost);
273+
} else {
274+
basePath = removeTrailingSlash(config.escapeText(URLPathUtils.getHost(openAPI, config.serverVariableOverrides())));
275+
}
272276
}
273277

274278
private void configureOpenAPIInfo() {

modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/URLPathUtils.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,4 +231,12 @@ private static URL getDefaultUrl() {
231231
return null;
232232
}
233233
}
234+
235+
public static boolean isRelativeUrl(List<Server> servers) {
236+
if (servers != null && servers.size() > 0) {
237+
final Server firstServer = servers.get(0);
238+
return Pattern.matches("^(\\/[\\w\\d]+)+", firstServer.getUrl());
239+
}
240+
return false;
241+
}
234242
}

modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,30 @@ public void testHandlesTrailingSlashInServers() {
662662
Assert.assertEquals(servers.get(1).url, "http://trailingshlash.io:80/v1");
663663
Assert.assertEquals(servers.get(2).url, "http://notrailingslash.io:80/v2");
664664
}
665+
666+
@Test
667+
public void testHandlesRelativeUrlsInServers() {
668+
OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_10056.yaml");
669+
ClientOptInput opts = new ClientOptInput();
670+
opts.openAPI(openAPI);
671+
DefaultCodegen config = new DefaultCodegen();
672+
config.setStrictSpecBehavior(true);
673+
opts.config(config);
674+
final DefaultGenerator generator = new DefaultGenerator();
675+
generator.opts(opts);
676+
generator.configureGeneratorProperties();
677+
678+
List<File> files = new ArrayList<>();
679+
List<String> filteredSchemas = ModelUtils.getSchemasUsedOnlyInFormParam(openAPI);
680+
List<Object> allModels = new ArrayList<>();
681+
generator.generateModels(files, allModels, filteredSchemas);
682+
List<Object> allOperations = new ArrayList<>();
683+
generator.generateApis(files, allOperations, allModels);
684+
685+
Map<String, Object> bundle = generator.buildSupportFileBundle(allOperations, allModels);
686+
LinkedList<CodegenServer> servers = (LinkedList<CodegenServer>) bundle.get("servers");
687+
Assert.assertEquals(servers.get(0).url, "/relative/url");
688+
}
665689

666690
@Test
667691
public void testProcessUserDefinedTemplatesWithConfig() throws IOException {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
openapi: 3.0.1
2+
info:
3+
title: OpenAPI Petstore
4+
description: "sample spec"
5+
license:
6+
name: Apache-2.0
7+
url: https://www.apache.org/licenses/LICENSE-2.0.html
8+
version: 1.0.0
9+
servers:
10+
- url: /relative/url
11+
tags: []
12+
paths: {}
13+
components:
14+
schemas: {}
15+
securitySchemes: {}

0 commit comments

Comments
 (0)