Fixes #292 - NPE in SslConnectionFactory newConnection.
ConnectionFactories may be added after the connector is started. As such there is always the possibility that creating a new connection fails because there is no available ConnectionFactory for that protocol. Rather than failing with an IllegalStateException instead of a NullPointerException, we now check at connector start whether the SslConnectionFactory is properly configured. This should catch 99% of the cases, where the connector is misconfigured, reporting the error earlier and explicitly (connector does not start) rather later and hidden (connection cannot be created).
This commit is contained in:
parent
ad8bdde4f3
commit
be93a1ff31
|
@ -256,6 +256,14 @@ public abstract class AbstractConnector extends ContainerLifeCycle implements Co
|
||||||
_defaultConnectionFactory = getConnectionFactory(_defaultProtocol);
|
_defaultConnectionFactory = getConnectionFactory(_defaultProtocol);
|
||||||
if(_defaultConnectionFactory==null)
|
if(_defaultConnectionFactory==null)
|
||||||
throw new IllegalStateException("No protocol factory for default protocol: "+_defaultProtocol);
|
throw new IllegalStateException("No protocol factory for default protocol: "+_defaultProtocol);
|
||||||
|
SslConnectionFactory ssl = getConnectionFactory(SslConnectionFactory.class);
|
||||||
|
if (ssl != null)
|
||||||
|
{
|
||||||
|
String next = ssl.getNextProtocol();
|
||||||
|
ConnectionFactory cf = getConnectionFactory(next);
|
||||||
|
if (cf == null)
|
||||||
|
throw new IllegalStateException("No protocol factory for SSL next protocol: " + next);
|
||||||
|
}
|
||||||
|
|
||||||
super.doStart();
|
super.doStart();
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,11 @@ public class SslConnectionFactory extends AbstractConnectionFactory
|
||||||
return _sslContextFactory;
|
return _sslContextFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getNextProtocol()
|
||||||
|
{
|
||||||
|
return _nextProtocol;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doStart() throws Exception
|
protected void doStart() throws Exception
|
||||||
{
|
{
|
||||||
|
|
|
@ -185,6 +185,14 @@ public class SslConnectionFactoryTest
|
||||||
Assert.assertEquals(0, history.size());
|
Assert.assertEquals(0, history.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalStateException.class)
|
||||||
|
public void testServerWithoutHttpConnectionFactory() throws Exception
|
||||||
|
{
|
||||||
|
_server.stop();
|
||||||
|
Assert.assertNotNull(_connector.removeConnectionFactory(HttpVersion.HTTP_1_1.asString()));
|
||||||
|
_server.start();
|
||||||
|
}
|
||||||
|
|
||||||
private String getResponse(String host, String cn) throws Exception
|
private String getResponse(String host, String cn) throws Exception
|
||||||
{
|
{
|
||||||
String response = getResponse(host, host, cn);
|
String response = getResponse(host, host, cn);
|
||||||
|
|
Loading…
Reference in New Issue