Issue #2559 - Use Configurator declared in ServerEndpointConfig over @ServerEndpoint annotation

Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
This commit is contained in:
Joakim Erdfelt 2018-05-25 06:29:02 -05:00
parent e6e49bdc85
commit a6547eaf83
2 changed files with 12 additions and 10 deletions

View File

@ -53,12 +53,13 @@ public class AnnotatedServerEndpointConfig implements ServerEndpointConfig
public AnnotatedServerEndpointConfig(WebSocketContainerScope containerScope, Class<?> endpointClass, ServerEndpoint anno, ServerEndpointConfig baseConfig) throws DeploymentException
{
ServerEndpointConfig.Configurator configr = null;
// A manually declared Configurator (not the one from the annotation)
ServerEndpointConfig.Configurator manualConfigurator = null;
// Copy from base config
if (baseConfig != null)
{
configr = baseConfig.getConfigurator();
manualConfigurator = baseConfig.getConfigurator();
}
// Decoders (favor provided config over annotation)
@ -112,24 +113,24 @@ public class AnnotatedServerEndpointConfig implements ServerEndpointConfig
userProperties.putAll(baseConfig.getUserProperties());
}
ServerEndpointConfig.Configurator cfgr;
ServerEndpointConfig.Configurator resolvedConfigurator;
// Use ServerEndpointConfig provided configurator if declared
if (configr != null)
if ( (manualConfigurator != null) && !(manualConfigurator instanceof ContainerDefaultConfigurator) )
{
cfgr = configr;
resolvedConfigurator = manualConfigurator;
}
// Use Container Default if annotation based configurator is undeclared
else if (anno.configurator() == ServerEndpointConfig.Configurator.class)
{
cfgr = new ContainerDefaultConfigurator();
resolvedConfigurator = new ContainerDefaultConfigurator();
}
// Use annotation declared configurator
else
{
try
{
cfgr = anno.configurator().getDeclaredConstructor( ).newInstance();
resolvedConfigurator = anno.configurator().getDeclaredConstructor( ).newInstance();
}
catch (Exception e)
{
@ -143,7 +144,7 @@ public class AnnotatedServerEndpointConfig implements ServerEndpointConfig
}
// Make sure all Configurators obtained are decorated
this.configurator = containerScope.getObjectFactory().decorate(cfgr);
this.configurator = containerScope.getObjectFactory().decorate(resolvedConfigurator);
}
@Override

View File

@ -52,11 +52,12 @@ public class PongContextListener implements ServletContextListener
try
{
Configurator config = new Config();
// Use manually declared Configurator
container.addEndpoint(ServerEndpointConfig.Builder.create(PongMessageEndpoint.class,"/ping").configurator(config).build());
container.addEndpoint(ServerEndpointConfig.Builder.create(PongMessageEndpoint.class,"/pong").configurator(config).build());
// Use annotation declared Configurator
container.addEndpoint(ServerEndpointConfig.Builder.create(PongSocket.class,"/ping-socket").build());
container.addEndpoint(ServerEndpointConfig.Builder.create(PongSocket.class,"/pong-socket").build());
}
catch (DeploymentException e)
{