diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java index 806ce235d07..b82c0e3ae88 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java @@ -21,6 +21,7 @@ import org.apache.commons.logging.LogFactory; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.server.handler.HandlerWrapper; import org.springframework.boot.context.embedded.EmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerException; @@ -34,6 +35,7 @@ import org.springframework.util.ReflectionUtils; * * @author Phillip Webb * @author Dave Syer + * @author David Liu * @see JettyEmbeddedServletContainerFactory */ public class JettyEmbeddedServletContainer implements EmbeddedServletContainer { @@ -115,12 +117,17 @@ public class JettyEmbeddedServletContainer implements EmbeddedServletContainer { } } - private void handleDeferredInitialize(Handler handler) throws Exception { - if (handler instanceof JettyEmbeddedWebAppContext) { - ((JettyEmbeddedWebAppContext) handler).deferredInitialize(); - } - else if (handler instanceof HandlerWrapper) { - handleDeferredInitialize(((HandlerWrapper) handler).getHandler()); + private void handleDeferredInitialize(Handler... handlers) throws Exception { + for (Handler handler : handlers) { + if (handler instanceof JettyEmbeddedWebAppContext) { + ((JettyEmbeddedWebAppContext) handler).deferredInitialize(); + } + else if (handler instanceof HandlerWrapper) { + handleDeferredInitialize(((HandlerWrapper) handler).getHandler()); + } + else if (handler instanceof HandlerCollection) { + handleDeferredInitialize(((HandlerCollection) handler).getHandlers()); + } } } diff --git a/spring-boot/src/test/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java b/spring-boot/src/test/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java index 2850624d4dd..9f9458ee660 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java @@ -580,7 +580,7 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests { protected abstract AbstractEmbeddedServletContainerFactory getFactory(); - private ServletContextInitializer exampleServletRegistration() { + protected ServletContextInitializer exampleServletRegistration() { return new ServletRegistrationBean(new ExampleServlet(), "/hello"); } diff --git a/spring-boot/src/test/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java b/spring-boot/src/test/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java index 929908113a7..e3379af7e74 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java @@ -21,6 +21,8 @@ import java.util.concurrent.TimeUnit; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.HandlerCollection; +import org.eclipse.jetty.server.handler.HandlerWrapper; import org.eclipse.jetty.server.ssl.SslConnector; import org.eclipse.jetty.webapp.Configuration; import org.eclipse.jetty.webapp.WebAppContext; @@ -129,4 +131,24 @@ public class JettyEmbeddedServletContainerFactoryTests extends assertThat(actual, equalTo(expected)); } + @Test + public void wrappedHandlers() throws Exception { + JettyEmbeddedServletContainerFactory factory = getFactory(); + factory.setServerCustomizers(Arrays.asList(new JettyServerCustomizer() { + @Override + public void customize(Server server) { + Handler handler = server.getHandler(); + HandlerWrapper wrapper = new HandlerWrapper(); + wrapper.setHandler(handler); + HandlerCollection collection = new HandlerCollection(); + collection.addHandler(wrapper); + server.setHandler(collection); + } + })); + this.container = factory + .getEmbeddedServletContainer(exampleServletRegistration()); + this.container.start(); + assertThat(getResponse(getLocalUrl("/hello")), equalTo("Hello World")); + } + }