Issue #1603 - fixing NPE in WebSocketServerFactory init
This commit is contained in:
parent
6a3c40e935
commit
ab98caafbb
|
@ -141,23 +141,18 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc
|
||||||
private WebSocketServerFactory(ServletContext context, WebSocketPolicy policy, DecoratedObjectFactory objectFactory, Executor executor, ByteBufferPool bufferPool)
|
private WebSocketServerFactory(ServletContext context, WebSocketPolicy policy, DecoratedObjectFactory objectFactory, Executor executor, ByteBufferPool bufferPool)
|
||||||
{
|
{
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
this.defaultPolicy = policy;
|
||||||
this.objectFactory = objectFactory;
|
this.objectFactory = objectFactory;
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
|
|
||||||
handshakes.put(HandshakeRFC6455.VERSION, new HandshakeRFC6455());
|
|
||||||
|
|
||||||
addBean(scheduler);
|
|
||||||
addBean(bufferPool);
|
|
||||||
|
|
||||||
this.contextClassloader = Thread.currentThread().getContextClassLoader();
|
|
||||||
|
|
||||||
this.defaultPolicy = policy;
|
|
||||||
this.eventDriverFactory = new EventDriverFactory(this);
|
|
||||||
this.bufferPool = bufferPool;
|
this.bufferPool = bufferPool;
|
||||||
|
|
||||||
|
this.creator = this;
|
||||||
|
this.contextClassloader = Thread.currentThread().getContextClassLoader();
|
||||||
|
this.eventDriverFactory = new EventDriverFactory(this);
|
||||||
this.extensionFactory = new WebSocketExtensionFactory(this);
|
this.extensionFactory = new WebSocketExtensionFactory(this);
|
||||||
|
|
||||||
|
this.handshakes.put(HandshakeRFC6455.VERSION, new HandshakeRFC6455());
|
||||||
this.sessionFactories.add(new WebSocketSessionFactory(this));
|
this.sessionFactories.add(new WebSocketSessionFactory(this));
|
||||||
this.creator = this;
|
|
||||||
|
|
||||||
// Create supportedVersions
|
// Create supportedVersions
|
||||||
List<Integer> versions = new ArrayList<>();
|
List<Integer> versions = new ArrayList<>();
|
||||||
|
@ -176,6 +171,9 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc
|
||||||
rv.append(v);
|
rv.append(v);
|
||||||
}
|
}
|
||||||
supportedVersions = rv.toString();
|
supportedVersions = rv.toString();
|
||||||
|
|
||||||
|
addBean(scheduler);
|
||||||
|
addBean(bufferPool);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSessionListener(WebSocketSession.Listener listener)
|
public void addSessionListener(WebSocketSession.Listener listener)
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
//
|
||||||
|
// ========================================================================
|
||||||
|
// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// All rights reserved. This program and the accompanying materials
|
||||||
|
// are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
// and Apache License v2.0 which accompanies this distribution.
|
||||||
|
//
|
||||||
|
// The Eclipse Public License is available at
|
||||||
|
// http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
//
|
||||||
|
// The Apache License v2.0 is available at
|
||||||
|
// http://www.opensource.org/licenses/apache2.0.php
|
||||||
|
//
|
||||||
|
// You may elect to redistribute this code under either of these licenses.
|
||||||
|
// ========================================================================
|
||||||
|
//
|
||||||
|
|
||||||
|
package org.eclipse.jetty.websocket.server;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.notNullValue;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.io.ByteBufferPool;
|
||||||
|
import org.eclipse.jetty.io.MappedByteBufferPool;
|
||||||
|
import org.eclipse.jetty.util.component.AbstractLifeCycle;
|
||||||
|
import org.eclipse.jetty.util.component.ContainerLifeCycle;
|
||||||
|
import org.eclipse.jetty.util.log.Log;
|
||||||
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
|
import org.eclipse.jetty.util.log.StdErrLog;
|
||||||
|
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||||
|
import org.eclipse.jetty.websocket.api.WebSocketBehavior;
|
||||||
|
import org.eclipse.jetty.websocket.api.WebSocketPolicy;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class WebSocketServerFactoryTest
|
||||||
|
{
|
||||||
|
private int setLogLevel(Class<?> clazz, int newLevel)
|
||||||
|
{
|
||||||
|
int oldLevel = StdErrLog.LEVEL_DEFAULT;
|
||||||
|
Logger logger = Log.getLogger(clazz);
|
||||||
|
if (logger instanceof StdErrLog)
|
||||||
|
{
|
||||||
|
StdErrLog stdErrLog = (StdErrLog) logger;
|
||||||
|
oldLevel = stdErrLog.getLevel();
|
||||||
|
stdErrLog.setLevel(newLevel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return oldLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInit()
|
||||||
|
{
|
||||||
|
WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER);
|
||||||
|
Executor executor = new QueuedThreadPool();
|
||||||
|
ByteBufferPool bufferPool = new MappedByteBufferPool();
|
||||||
|
|
||||||
|
int wsFactoryLevel = setLogLevel(WebSocketServerFactory.class, StdErrLog.LEVEL_DEBUG);
|
||||||
|
int abstractLifecycleLevel = setLogLevel(AbstractLifeCycle.class, StdErrLog.LEVEL_DEBUG);
|
||||||
|
int containerLifecycleLevel = setLogLevel(ContainerLifeCycle.class, StdErrLog.LEVEL_DEBUG);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
WebSocketServerFactory wsFactory = new WebSocketServerFactory(policy, executor, bufferPool);
|
||||||
|
// The above init caused NPE due to bad constructor initialization order with debug active
|
||||||
|
assertThat("wsFactory.toString()", wsFactory.toString(), notNullValue());
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
setLogLevel(WebSocketServerFactory.class, wsFactoryLevel);
|
||||||
|
setLogLevel(AbstractLifeCycle.class, abstractLifecycleLevel);
|
||||||
|
setLogLevel(ContainerLifeCycle.class, containerLifecycleLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue