Author: markt
Date: Tue Jun 25 11:36:59 2013
New Revision: 1496426

URL: http://svn.apache.org/r1496426
Log:
WebSocket 1.0. Section 4.1.2
Ensure encoders are valid at deployment time

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
    tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties?rev=1496426&r1=1496425&r2=1496426&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties 
Tue Jun 25 11:36:59 2013
@@ -16,6 +16,7 @@ sci.newInstance.fail=Failed to create an
 
 serverContainer.configuratorFail=Failed to create configurator of type [{0}] 
for POJO of type [{1}]
 serverContainer.duplicatePaths=Multiple Endpoints may not be deployed to using 
the same path [{0}]
+serverContainer.encoderFail=Unable to create encoder of type [{0}]
 serverContainer.endpointDeploy=Endpoint class [{0}] deploying to path [{1}] in 
ServletContext [{2}]
 serverContainer.missingAnnotation=Cannot deploy POJO class [{0}] as it is not 
annotated with @ServerEndpoint
 serverContainer.missingEndpoint=An Endpoint instance has been request for path 
[{0}] but no matching Endpoint class was found

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=1496426&r1=1496425&r2=1496426&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java 
Tue Jun 25 11:36:59 2013
@@ -30,6 +30,7 @@ import javax.servlet.DispatcherType;
 import javax.servlet.FilterRegistration;
 import javax.servlet.ServletContext;
 import javax.websocket.DeploymentException;
+import javax.websocket.Encoder;
 import javax.websocket.server.ServerContainer;
 import javax.websocket.server.ServerEndpoint;
 import javax.websocket.server.ServerEndpointConfig;
@@ -186,6 +187,9 @@ public class WsServerContainer extends W
         // Uri Template
         UriTemplate uriTemplate = new UriTemplate(path);
 
+        // Validate encoders
+        validateEncoders(annotation.encoders());
+
         // Method mapping
         PojoMethodMapping methodMapping = new PojoMethodMapping(pojo,
                 annotation.decoders(), path);
@@ -314,6 +318,23 @@ public class WsServerContainer extends W
     }
 
 
+    private static void validateEncoders(Class<? extends Encoder>[] encoders)
+            throws DeploymentException {
+
+        for (Class<? extends Encoder> encoder : encoders) {
+            // Need to instantiate decoder to ensure it is valid and that
+            // deployment can be failed if it is not
+            @SuppressWarnings("unused")
+            Encoder instance;
+            try {
+                encoder.newInstance();
+            } catch(InstantiationException | IllegalAccessException e) {
+                throw new DeploymentException(sm.getString(
+                        "serverContainer.encoderFail", encoder.getName()), e);
+            }
+        }
+    }
+
     private static class TemplatePathMatch {
         private final ServerEndpointConfig config;
         private final UriTemplate uriTemplate;



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to