Issue #4407 - merge annotated ServerEndpointConfig with provided config

Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
This commit is contained in:
Lachlan Roberts 2019-12-12 13:31:17 +11:00
parent b400d00f03
commit af2a9cfd5b
3 changed files with 18 additions and 33 deletions

View File

@ -280,7 +280,7 @@ public class JavaxWebSocketClientContainer extends JavaxWebSocketContainer imple
return new EmptyClientEndpointConfig();
}
protected EndpointConfig readAnnotatedConfig(Object endpoint, EndpointConfig config) throws DeploymentException
private EndpointConfig readAnnotatedConfig(Object endpoint, EndpointConfig config) throws DeploymentException
{
ClientEndpoint anno = endpoint.getClass().getAnnotation(ClientEndpoint.class);
if (anno != null)

View File

@ -166,18 +166,6 @@ public class JavaxWebSocketServerContainer extends JavaxWebSocketClientContainer
return new UndefinedServerEndpointConfig(endpoint.getClass());
}
protected EndpointConfig readAnnotatedConfig(Object endpoint, EndpointConfig config) throws DeploymentException
{
ServerEndpoint anno = endpoint.getClass().getAnnotation(ServerEndpoint.class);
if (anno != null)
{
// Overwrite Config from Annotation
// TODO: should we merge with provided config?
return new AnnotatedServerEndpointConfig(this, endpoint.getClass(), anno, config);
}
return config;
}
@Override
public void addEndpoint(Class<?> endpointClass) throws DeploymentException
{
@ -192,10 +180,7 @@ public class JavaxWebSocketServerContainer extends JavaxWebSocketClientContainer
{
ServerEndpoint anno = endpointClass.getAnnotation(ServerEndpoint.class);
if (anno == null)
{
throw new DeploymentException(String.format("Class must be @%s annotated: %s",
ServerEndpoint.class.getName(), endpointClass.getName()));
}
throw new DeploymentException(String.format("Class must be @%s annotated: %s", ServerEndpoint.class.getName(), endpointClass.getName()));
ServerEndpointConfig config = new AnnotatedServerEndpointConfig(this, endpointClass, anno);
addEndpointMapping(config);
@ -214,36 +199,36 @@ public class JavaxWebSocketServerContainer extends JavaxWebSocketClientContainer
}
@Override
public void addEndpoint(ServerEndpointConfig config) throws DeploymentException
public void addEndpoint(ServerEndpointConfig providedConfig) throws DeploymentException
{
if (config == null)
{
if (providedConfig == null)
throw new DeploymentException("ServerEndpointConfig is null");
}
if (isStarted() || isStarting())
{
if (LOG.isDebugEnabled())
{
LOG.debug("addEndpoint({}) path={} endpoint={}", config, config.getPath(), config.getEndpointClass());
}
Class<?> endpointClass = providedConfig.getEndpointClass();
try
{
// If we have annotations merge the annotated ServerEndpointConfig with the provided one.
ServerEndpoint anno = endpointClass.getAnnotation(ServerEndpoint.class);
ServerEndpointConfig config = (anno == null) ? providedConfig
: new AnnotatedServerEndpointConfig(this, endpointClass, anno, providedConfig);
if (LOG.isDebugEnabled())
LOG.debug("addEndpoint({}) path={} endpoint={}", config, config.getPath(), endpointClass);
addEndpointMapping(config);
}
catch (WebSocketException e)
{
throw new DeploymentException("Unable to deploy: " + config.getEndpointClass().getName(), e);
throw new DeploymentException("Unable to deploy: " + endpointClass.getName(), e);
}
}
else
{
if (deferredEndpointConfigs == null)
{
deferredEndpointConfigs = new ArrayList<>();
}
deferredEndpointConfigs.add(config);
deferredEndpointConfigs.add(providedConfig);
}
}

View File

@ -127,11 +127,11 @@ public class AnnotatedServerEndpointTest
this.path = "/override";
this.subprotocol = "override";
//assertResponse("configurator", EchoSocketConfigurator.class.getName());
assertResponse("configurator", EchoSocketConfigurator.class.getName());
assertResponse("text-max", "111,222");
assertResponse("binary-max", "333,444");
//assertResponse("decoders", DateDecoder.class.getName());
//assertResponse("encoders", TimeEncoder.class.getName());
assertResponse("decoders", DateDecoder.class.getName());
assertResponse("encoders", TimeEncoder.class.getName());
assertResponse("subprotocols", "override");
}
}