Skip to content

Commit 64447d3

Browse files
liujiong1982philwebb
authored andcommitted
Support Jetty HandlerCollection types
Update JettyEmbeddedServletContainer to support HandlerCollection types in addition to HandlerWrappers. Fixes spring-projectsgh-545 Closes spring-projectsgh-1597
1 parent a401454 commit 64447d3

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.eclipse.jetty.server.Connector;
2222
import org.eclipse.jetty.server.Handler;
2323
import org.eclipse.jetty.server.Server;
24+
import org.eclipse.jetty.server.handler.HandlerCollection;
2425
import org.eclipse.jetty.server.handler.HandlerWrapper;
2526
import org.springframework.boot.context.embedded.EmbeddedServletContainer;
2627
import org.springframework.boot.context.embedded.EmbeddedServletContainerException;
@@ -34,6 +35,7 @@
3435
*
3536
* @author Phillip Webb
3637
* @author Dave Syer
38+
* @author David Liu
3739
* @see JettyEmbeddedServletContainerFactory
3840
*/
3941
public class JettyEmbeddedServletContainer implements EmbeddedServletContainer {
@@ -115,12 +117,17 @@ public void start() throws EmbeddedServletContainerException {
115117
}
116118
}
117119

118-
private void handleDeferredInitialize(Handler handler) throws Exception {
119-
if (handler instanceof JettyEmbeddedWebAppContext) {
120-
((JettyEmbeddedWebAppContext) handler).deferredInitialize();
121-
}
122-
else if (handler instanceof HandlerWrapper) {
123-
handleDeferredInitialize(((HandlerWrapper) handler).getHandler());
120+
private void handleDeferredInitialize(Handler... handlers) throws Exception {
121+
for (Handler handler : handlers) {
122+
if (handler instanceof JettyEmbeddedWebAppContext) {
123+
((JettyEmbeddedWebAppContext) handler).deferredInitialize();
124+
}
125+
else if (handler instanceof HandlerWrapper) {
126+
handleDeferredInitialize(((HandlerWrapper) handler).getHandler());
127+
}
128+
else if (handler instanceof HandlerCollection) {
129+
handleDeferredInitialize(((HandlerCollection) handler).getHandlers());
130+
}
124131
}
125132
}
126133

spring-boot/src/test/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ protected ClientHttpResponse getClientResponse(String url,
580580

581581
protected abstract AbstractEmbeddedServletContainerFactory getFactory();
582582

583-
private ServletContextInitializer exampleServletRegistration() {
583+
protected ServletContextInitializer exampleServletRegistration() {
584584
return new ServletRegistrationBean(new ExampleServlet(), "/hello");
585585
}
586586

spring-boot/src/test/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
import org.eclipse.jetty.server.Handler;
2323
import org.eclipse.jetty.server.Server;
24+
import org.eclipse.jetty.server.handler.HandlerCollection;
25+
import org.eclipse.jetty.server.handler.HandlerWrapper;
2426
import org.eclipse.jetty.server.ssl.SslConnector;
2527
import org.eclipse.jetty.webapp.Configuration;
2628
import org.eclipse.jetty.webapp.WebAppContext;
@@ -129,4 +131,24 @@ private void assertTimeout(JettyEmbeddedServletContainerFactory factory, int exp
129131
assertThat(actual, equalTo(expected));
130132
}
131133

134+
@Test
135+
public void wrappedHandlers() throws Exception {
136+
JettyEmbeddedServletContainerFactory factory = getFactory();
137+
factory.setServerCustomizers(Arrays.asList(new JettyServerCustomizer() {
138+
@Override
139+
public void customize(Server server) {
140+
Handler handler = server.getHandler();
141+
HandlerWrapper wrapper = new HandlerWrapper();
142+
wrapper.setHandler(handler);
143+
HandlerCollection collection = new HandlerCollection();
144+
collection.addHandler(wrapper);
145+
server.setHandler(collection);
146+
}
147+
}));
148+
this.container = factory
149+
.getEmbeddedServletContainer(exampleServletRegistration());
150+
this.container.start();
151+
assertThat(getResponse(getLocalUrl("/hello")), equalTo("Hello World"));
152+
}
153+
132154
}

0 commit comments

Comments
 (0)