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: [email protected]
For additional commands, e-mail: [email protected]