Author: markt
Date: Thu Mar 7 13:04:18 2013
New Revision: 1453843
URL: http://svn.apache.org/r1453843
Log:
Align implementation with spec
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java?rev=1453843&r1=1453842&r2=1453843&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java Thu Mar 7
13:04:18 2013
@@ -16,6 +16,7 @@
*/
package org.apache.tomcat.websocket.server;
+import java.util.HashSet;
import java.util.Set;
import javax.servlet.ServletContainerInitializer;
@@ -23,14 +24,18 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.HandlesTypes;
import javax.websocket.DeploymentException;
+import javax.websocket.Endpoint;
+import javax.websocket.server.ServerApplicationConfig;
import javax.websocket.server.ServerEndpoint;
+import javax.websocket.server.ServerEndpointConfig;
/**
* Registers an interest in any class that is annotated with
* {@link ServerEndpoint} so that Endpoint can be published via the WebSocket
* server.
*/
-@HandlesTypes({ServerEndpoint.class})
+@HandlesTypes({ServerEndpoint.class, ServerEndpointConfig.class,
+ ServerApplicationConfig.class})
public class WsSci implements ServletContainerInitializer {
@Override
@@ -43,14 +48,62 @@ public class WsSci implements ServletCon
return;
}
+ // Group the discovered classes by type
+ Set<ServerApplicationConfig> serverApplicationConfigs = new
HashSet<>();
+ Set<ServerEndpointConfig> scannedEndpointConfigs = new HashSet<>();
+ Set<Class<? extends Endpoint>> scannedEndpointClazzes = new
HashSet<>();
+ Set<Class<?>> scannedPojoEndpoints = new HashSet<>();
+
+ try {
+ for (Class<?> clazz : clazzes) {
+ if (ServerApplicationConfig.class.isAssignableFrom(clazz)) {
+ serverApplicationConfigs.add(
+ (ServerApplicationConfig) clazz.newInstance());
+ }
+ if (ServerEndpointConfig.class.isAssignableFrom(clazz)) {
+ @SuppressWarnings("unchecked")
+ Class<? extends ServerEndpointConfig> configClazz =
+ (Class<? extends ServerEndpointConfig>) clazz;
+ ServerEndpointConfig config = configClazz.newInstance();
+ scannedEndpointConfigs.add(config);
+ scannedEndpointClazzes.add(
+ (Class<? extends Endpoint>)
config.getEndpointClass());
+ }
+ if (clazz.isAnnotationPresent(ServerEndpoint.class)) {
+ scannedPojoEndpoints.add(clazz);
+ }
+ }
+ } catch (InstantiationException | IllegalAccessException e) {
+ throw new ServletException(e);
+ }
+
+ // Filter the results
+ Set<ServerEndpointConfig> filteredEndpointConfigs = new HashSet<>();
+ Set<Class<?>> filteredPojoEndpoints = new HashSet<>();
+
+ if (serverApplicationConfigs.isEmpty()) {
+ filteredEndpointConfigs.addAll(scannedEndpointConfigs);
+ filteredPojoEndpoints.addAll(scannedPojoEndpoints);
+ } else {
+ for (ServerApplicationConfig config : serverApplicationConfigs) {
+ filteredEndpointConfigs.addAll(
+ config.getEndpointConfigs(scannedEndpointClazzes));
+ }
+ }
+
WsServerContainer sc = WsServerContainer.getServerContainer();
sc.setServletContext(ctx);
- for (Class<?> clazz : clazzes) {
- try {
+ try {
+ // Deploy endpoints
+ for (ServerEndpointConfig config : filteredEndpointConfigs) {
+ sc.addEndpoint(config);
+ }
+ // Deploy POJOs
+ for (Class<?> clazz : filteredPojoEndpoints) {
sc.addEndpoint(clazz);
- } catch (DeploymentException e) {
- throw new ServletException(e);
}
+ } catch (DeploymentException e) {
+ throw new ServletException(e);
}
}
}
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java?rev=1453843&r1=1453842&r2=1453843&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
Thu Mar 7 13:04:18 2013
@@ -84,6 +84,11 @@ public class WsServerContainer extends W
new ConcurrentHashMap<>();
+ private WsServerContainer() {
+ // Hide default constructor
+ }
+
+
public void setServletContext(ServletContext servletContext) {
if (this.servletContext == servletContext) {
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java?rev=1453843&r1=1453842&r2=1453843&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java
Thu Mar 7 13:04:18 2013
@@ -24,6 +24,6 @@ public class WsServerContainerProvider e
@Override
protected ServerContainer getContainer() {
- return new WsServerContainer();
+ return WsServerContainer.getServerContainer();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]