diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyWebServer.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyWebServer.java index 1d6ba620d5..c7a0d59ebe 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyWebServer.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyWebServer.java @@ -275,11 +275,13 @@ public class JettyWebServer implements WebServer { @Override public int getPort() { Connector[] connectors = this.server.getConnectors(); + Integer localPort = -1; for (Connector connector : connectors) { // Probably only one... - return getLocalPort(connector); + localPort = getLocalPort(connector); + break; } - return 0; + return (localPort > 0) ? localPort : -1; } @Override diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/netty/NettyWebServer.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/netty/NettyWebServer.java index 7f4bbf44ac..193153d9b6 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/netty/NettyWebServer.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/netty/NettyWebServer.java @@ -192,7 +192,7 @@ public class NettyWebServer implements WebServer { if (this.disposableServer != null) { return this.disposableServer.port(); } - return 0; + return -1; } } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatWebServer.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatWebServer.java index 98e281f209..5eae980b80 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatWebServer.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatWebServer.java @@ -364,7 +364,7 @@ public class TomcatWebServer implements WebServer { if (connector != null) { return connector.getLocalPort(); } - return 0; + return -1; } private String getContextPath() { diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/undertow/UndertowWebServer.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/undertow/UndertowWebServer.java index 5715f1ea3c..b09e462ebb 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/undertow/UndertowWebServer.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/undertow/UndertowWebServer.java @@ -295,7 +295,7 @@ public class UndertowWebServer implements WebServer { public int getPort() { List ports = getActualPorts(); if (ports.isEmpty()) { - return 0; + return -1; } return ports.get(0).getNumber(); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java index 42b3595ff9..a41b922bfe 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java @@ -115,6 +115,16 @@ public abstract class AbstractReactiveWebServerFactoryTests { assertThat(this.webServer.getPort()).isEqualTo(specificPort); } + @Test + void portIsMinusOneWhenConnectionIsClosed() { + AbstractReactiveWebServerFactory factory = getFactory(); + this.webServer = factory.getWebServer(new EchoHandler()); + this.webServer.start(); + assertThat(this.webServer.getPort()).isGreaterThan(0); + this.webServer.stop(); + assertThat(this.webServer.getPort()).isEqualTo(-1); + } + @Test void basicSslFromClassPath() { testBasicSslWithKeyStore("classpath:test.jks", "password"); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java index c51f1f0f19..94df46ce7a 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java @@ -250,7 +250,7 @@ public abstract class AbstractServletWebServerFactoryTests { factory.setPort(-1); this.webServer = factory.getWebServer(exampleServletRegistration()); this.webServer.start(); - assertThat(this.webServer.getPort()).isLessThan(0); // Jetty is -2 + assertThat(this.webServer.getPort()).isEqualTo(-1); } @Test @@ -300,6 +300,16 @@ public abstract class AbstractServletWebServerFactoryTests { assertThat(servlet.getInitCount()).isEqualTo(1); } + @Test + void portIsMinusOneWhenConnectionIsClosed() { + AbstractServletWebServerFactory factory = getFactory(); + this.webServer = factory.getWebServer(); + this.webServer.start(); + assertThat(this.webServer.getPort()).isGreaterThan(0); + this.webServer.stop(); + assertThat(this.webServer.getPort()).isEqualTo(-1); + } + @Test void specificPort() throws Exception { AbstractServletWebServerFactory factory = getFactory();