diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java index 4305ca0cdb14..be1d8bd3ea3d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java @@ -175,7 +175,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { } URL url = URLPathUtils.getServerURL(openAPI); - contextPath = config.escapeText(url == null ? "" : url.getPath()); + contextPath = config.escapeText(url.getPath()); basePath = config.escapeText(URLPathUtils.getHost(openAPI)); basePathWithoutHost = contextPath; // for backward compatibility } @@ -703,15 +703,13 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { apis.put("apis", allOperations); URL url = URLPathUtils.getServerURL(openAPI); - if (url != null) { - bundle.put("host", url.getHost()); - } bundle.put("openAPI", openAPI); bundle.put("swagger", openAPI); // for backward compatibility bundle.put("basePath", basePath); bundle.put("basePathWithoutHost", basePathWithoutHost); - bundle.put("scheme", URLPathUtils.getScheme(openAPI, config)); + bundle.put("scheme", URLPathUtils.getScheme(url, config)); + bundle.put("host", url.getHost()); bundle.put("contextPath", contextPath); bundle.put("apiInfo", apis); bundle.put("models", allModels); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaJAXRSServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaJAXRSServerCodegen.java index cbc6edd3cb1f..6b6a6bf2c903 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaJAXRSServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaJAXRSServerCodegen.java @@ -96,13 +96,8 @@ public abstract class AbstractJavaJAXRSServerCodegen extends AbstractJavaCodegen if (!this.additionalProperties.containsKey("serverPort")) { URL url = URLPathUtils.getServerURL(openAPI); - - Integer port = 8080; // Default value for a JEE Server - if (url.getPort() != 0) { - port = url.getPort(); - } - - this.additionalProperties.put("serverPort", port); + // 8080 is the default value for a JEE Server: + this.additionalProperties.put("serverPort", URLPathUtils.getPort(url, 8080)); } if (openAPI.getPaths() != null) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNancyFXServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNancyFXServerCodegen.java index e6c9c51c1a3c..fb41a424cc88 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNancyFXServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNancyFXServerCodegen.java @@ -352,10 +352,7 @@ public class CSharpNancyFXServerCodegen extends AbstractCSharpCodegen { @Override public void preprocessOpenAPI(final OpenAPI openAPI) { URL url = URLPathUtils.getServerURL(openAPI); - String path = "/"; - if (url != null) { - path = url.getPath(); - } + String path = URLPathUtils.getPath(url, "/"); final String packageContextOption = (String) additionalProperties.get(PACKAGE_CONTEXT); additionalProperties.put("packageContext", packageContextOption == null ? sanitizeName(path) : packageContextOption); final Object basePathOption = additionalProperties.get(USE_BASE_PATH); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaPKMSTServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaPKMSTServerCodegen.java index a0e8026d201f..525658100954 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaPKMSTServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaPKMSTServerCodegen.java @@ -542,10 +542,8 @@ public class JavaPKMSTServerCodegen extends AbstractJavaCodegen { } URL url = URLPathUtils.getServerURL(openAPI); - String host = url.getHost(); - Integer port = url.getPort(); - this.additionalProperties.put("serverPort", port); + this.additionalProperties.put("serverPort", URLPathUtils.getPort(url, 8080)); if (openAPI.getPaths() != null) { for (String pathname : openAPI.getPaths().keySet()) { PathItem path = openAPI.getPaths().get(pathname); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaVertXServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaVertXServerCodegen.java index cde1f82f2931..dad4c88e8e30 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaVertXServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaVertXServerCodegen.java @@ -200,8 +200,7 @@ public class JavaVertXServerCodegen extends AbstractJavaCodegen { // add server port from the swagger file, 8080 by default URL url = URLPathUtils.getServerURL(openAPI); - Integer port = url.getPort(); - this.additionalProperties.put("serverPort", port); + this.additionalProperties.put("serverPort", URLPathUtils.getPort(url, 8080)); // retrieve api version from swagger file, 1.0.0-SNAPSHOT by default if (openAPI.getInfo() != null && openAPI.getInfo().getVersion() != null) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NodeJSServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NodeJSServerCodegen.java index ffa63c2b6ace..256b5ad59c49 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NodeJSServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NodeJSServerCodegen.java @@ -320,25 +320,9 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig @Override public void preprocessOpenAPI(OpenAPI openAPI) { URL url = URLPathUtils.getServerURL(openAPI); - String host = URLPathUtils.LOCAL_HOST; - String port = defaultServerPort; - String basePath = null; - if (url != null) { - port = String.valueOf(url.getPort()); - host = url.getHost(); - basePath = url.getPath(); - } - - if (!StringUtils.isEmpty(host)) { - String[] parts = host.split(":"); - if (parts.length > 1) { - port = parts[1]; - } - } else { - // host is empty, default to https://localhost - host = "http://localhost"; - LOGGER.warn("'host' in the specification is empty or undefined. Default to http://localhost."); - } + String host = URLPathUtils.getProtocolAndHost(url); + String port = URLPathUtils.getPort(url, defaultServerPort) ; + String basePath = url.getPath(); if (additionalProperties.containsKey(SERVER_PORT)) { port = additionalProperties.get(SERVER_PORT).toString(); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java index ecd2922e3a40..0c2d5865a92c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java @@ -242,7 +242,7 @@ public class RustServerCodegen extends DefaultCodegen implements CodegenConfig { @Override public void preprocessOpenAPI(OpenAPI openAPI) { Info info = openAPI.getInfo(); - List versionComponents = new ArrayList(Arrays.asList(info.getVersion().split("[.]"))); + List versionComponents = new ArrayList<>(Arrays.asList(info.getVersion().split("[.]"))); if (versionComponents.size() < 1) { versionComponents.add("1"); } @@ -253,7 +253,7 @@ public class RustServerCodegen extends DefaultCodegen implements CodegenConfig { URL url = URLPathUtils.getServerURL(openAPI); additionalProperties.put("serverHost", url.getHost()); - additionalProperties.put("serverPort", url.getPort()); + additionalProperties.put("serverPort", URLPathUtils.getPort(url, 80)); } @Override diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java index 27d7036af14d..3333a41e2e7a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java @@ -413,11 +413,7 @@ public class SpringCodegen extends AbstractJavaCodegen } URL url = URLPathUtils.getServerURL(openAPI); - Integer port = 8080; - if (url.getPort() != 0) { - port = url.getPort(); - } - this.additionalProperties.put("serverPort", port); + this.additionalProperties.put("serverPort", URLPathUtils.getPort(url, 8080)); if (openAPI.getPaths() != null) { for (String pathname : openAPI.getPaths().keySet()) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/URLPathUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/URLPathUtils.java index 0bb316618da9..90d6473bcdf6 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/URLPathUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/URLPathUtils.java @@ -1,8 +1,9 @@ package org.openapitools.codegen.utils; -import org.openapitools.codegen.CodegenConfig; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.servers.Server; + +import org.openapitools.codegen.CodegenConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,8 +35,12 @@ public class URLPathUtils { } public static String getScheme(OpenAPI openAPI, CodegenConfig config) { - String scheme; URL url = getServerURL(openAPI); + return getScheme(url, config); + } + + public static String getScheme(URL url, CodegenConfig config) { + String scheme; if (url != null) { scheme = url.getProtocol(); } else { @@ -47,6 +52,64 @@ public class URLPathUtils { return scheme; } + + /** + * Return the port, example value 8080 + * @param url + * @param defaultPort if the port is not set + * @return + */ + public static String getPort(URL url, int defaultPort) { + return getPort(url, String.valueOf(defaultPort)); + } + + /** + * Return the port, example value 8080 + * @param url + * @param defaultPort if the port is not set + * @return + */ + public static String getPort(URL url, String defaultPort) { + if (url == null || url.getPort() == -1) { + return defaultPort; + } else { + return String.valueOf(url.getPort()); + } + } + + /** + * Return the path, example value /abcdef/xyz + * @param url + * @param defaultPath if the path is not empty + * @return path + */ + public static String getPath(URL url, String defaultPath) { + if (url == null || url.getPath() == null || url.getPath().isEmpty()) { + return defaultPath; + } else { + return url.getPath(); + } + } + + /** + * Get the protocol and the host, example value https://www.abcdef.xyz + * @param url + * @return protocolAndHost + */ + public static String getProtocolAndHost(URL url) { + if (url == null) { + return LOCAL_HOST; + } else { + String protocol = (url.getProtocol() == null) ? "http" : url.getProtocol(); + return protocol + "://"+ url.getHost(); + } + } + + /** + * Return the first complete URL from the OpenAPI specification + * @param openAPI + * @return host + */ public static String getHost(OpenAPI openAPI) { if (openAPI.getServers() != null && openAPI.getServers().size() > 0) { return sanitizeUrl(openAPI.getServers().get(0).getUrl()); @@ -70,5 +133,4 @@ public class URLPathUtils { return null; } } - } \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/URLPathUtilsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/URLPathUtilsTest.java new file mode 100644 index 000000000000..99f22bb55df4 --- /dev/null +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/URLPathUtilsTest.java @@ -0,0 +1,41 @@ +package org.openapitools.codegen.utils; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.servers.Server; + +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.net.URL; + +public class URLPathUtilsTest { + + @Test + public void testDefaultValues() throws Exception { + OpenAPI openAPI = new OpenAPI(); + URL serverURL = URLPathUtils.getServerURL(openAPI); + + Assert.assertEquals(serverURL.getHost(), "localhost"); + Assert.assertEquals(serverURL.getPort(), -1); + Assert.assertEquals(serverURL.getPath(), ""); + Assert.assertEquals(URLPathUtils.getScheme(serverURL, null), "http"); + Assert.assertEquals(URLPathUtils.getPort(serverURL, 8080), "8080"); + Assert.assertEquals(URLPathUtils.getPort(serverURL, "8081"), "8081"); + Assert.assertEquals(URLPathUtils.getPath(serverURL, "/abc"), "/abc"); + } + + @Test + public void testUrl() throws Exception { + OpenAPI openAPI = new OpenAPI(); + openAPI.addServersItem(new Server().url("https://abcdef.xyz:9999/some/path")); + URL serverURL = URLPathUtils.getServerURL(openAPI); + + Assert.assertEquals(serverURL.getHost(), "abcdef.xyz"); + Assert.assertEquals(serverURL.getPort(), 9999); + Assert.assertEquals(serverURL.getPath(), "/some/path"); + Assert.assertEquals(URLPathUtils.getScheme(serverURL, null), "https"); + Assert.assertEquals(URLPathUtils.getPort(serverURL, 8080), "9999"); + Assert.assertEquals(URLPathUtils.getPort(serverURL, "8081"), "9999"); + Assert.assertEquals(URLPathUtils.getPath(serverURL, "/abc"), "/some/path"); + } +}