Merge pull request #3155 from eclipse/jetty-9.4.x-issue-3139-npe-websocket-sci

Fixes #3139 - NPE in WebSocketContainerInitializer
This commit is contained in:
Joakim Erdfelt 2019-01-08 15:57:35 -06:00 committed by GitHub
commit 020a980394
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 3 deletions

View File

@ -23,6 +23,8 @@ import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint; import javax.websocket.server.ServerEndpoint;
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.websocket.jsr356.server.ServerContainer; import org.eclipse.jetty.websocket.jsr356.server.ServerContainer;
import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer; import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer;
@ -49,10 +51,12 @@ public class WebSocketJsrServer
{ {
Server server = new Server(8080); Server server = new Server(8080);
HandlerList handlers = new HandlerList();
ServletContextHandler context = new ServletContextHandler( ServletContextHandler context = new ServletContextHandler(
ServletContextHandler.SESSIONS); ServletContextHandler.SESSIONS);
context.setContextPath("/"); context.setContextPath("/");
server.setHandler(context); handlers.addHandler(context);
// Enable javax.websocket configuration for the context // Enable javax.websocket configuration for the context
ServerContainer wsContainer = WebSocketServerContainerInitializer ServerContainer wsContainer = WebSocketServerContainerInitializer
@ -61,6 +65,9 @@ public class WebSocketJsrServer
// Add your websockets to the container // Add your websockets to the container
wsContainer.addEndpoint(EchoJsrSocket.class); wsContainer.addEndpoint(EchoJsrSocket.class);
handlers.addHandler(new DefaultHandler());
server.setHandler(handlers);
server.start(); server.start();
context.dumpStdErr(); context.dumpStdErr();
server.join(); server.join();

View File

@ -143,7 +143,7 @@ public class WebSocketServerContainerInitializer implements ServletContainerInit
// Build HttpClient // Build HttpClient
HttpClient httpClient = (HttpClient) context.getServletContext().getAttribute(HTTPCLIENT_ATTRIBUTE); HttpClient httpClient = (HttpClient) context.getServletContext().getAttribute(HTTPCLIENT_ATTRIBUTE);
if(httpClient == null) if ((httpClient == null) && (context.getServer() != null))
{ {
httpClient = (HttpClient) context.getServer().getAttribute(HTTPCLIENT_ATTRIBUTE); httpClient = (HttpClient) context.getServer().getAttribute(HTTPCLIENT_ATTRIBUTE);
} }

View File

@ -58,6 +58,8 @@ import org.eclipse.jetty.http.HttpFields;
import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpHeader;
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger; import org.eclipse.jetty.util.log.Logger;
@ -403,9 +405,11 @@ public class ConfiguratorTest
connector.setPort(0); connector.setPort(0);
server.addConnector(connector); server.addConnector(connector);
HandlerList handlers = new HandlerList();
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/"); context.setContextPath("/");
server.setHandler(context); handlers.addHandler(context);
ServerContainer container = WebSocketServerContainerInitializer.configureContext(context); ServerContainer container = WebSocketServerContainerInitializer.configureContext(context);
container.addEndpoint(CaptureHeadersSocket.class); container.addEndpoint(CaptureHeadersSocket.class);
@ -423,6 +427,9 @@ public class ConfiguratorTest
.build(); .build();
container.addEndpoint(overrideEndpointConfig); container.addEndpoint(overrideEndpointConfig);
handlers.addHandler(new DefaultHandler());
server.setHandler(handlers);
server.start(); server.start();
String host = connector.getHost(); String host = connector.getHost();
if (host == null) if (host == null)