Author: markt Date: Tue Mar 5 16:12:30 2013 New Revision: 1452873 URL: http://svn.apache.org/r1452873 Log: Refactoring towards v014 API (not yet complete)
Modified: tomcat/trunk/java/javax/websocket/ClientEndpointConfig.java tomcat/trunk/java/javax/websocket/DefaultClientEndpointConfig.java tomcat/trunk/java/javax/websocket/EndpointConfig.java tomcat/trunk/java/javax/websocket/server/DefaultServerEndpointConfiguration.java tomcat/trunk/java/javax/websocket/server/ServerEndpointConfigurationBuilder.java tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties tomcat/trunk/java/org/apache/tomcat/websocket/Util.java tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java Modified: tomcat/trunk/java/javax/websocket/ClientEndpointConfig.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/ClientEndpointConfig.java?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/java/javax/websocket/ClientEndpointConfig.java (original) +++ tomcat/trunk/java/javax/websocket/ClientEndpointConfig.java Tue Mar 5 16:12:30 2013 @@ -46,8 +46,10 @@ public interface ClientEndpointConfig ex private Configurator configurator = DEFAULT_CONFIGURATOR; private List<String> preferredSubprotocols = Collections.EMPTY_LIST; private List<Extension> extensions = Collections.EMPTY_LIST; - private List<Encoder> encoders = Collections.EMPTY_LIST; - private List<Decoder> decoders = Collections.EMPTY_LIST; + private List<Class<? extends Encoder>> encoders = + Collections.EMPTY_LIST; + private List<Class<? extends Decoder>> decoders = + Collections.EMPTY_LIST; public ClientEndpointConfig build() { @@ -90,7 +92,7 @@ public interface ClientEndpointConfig ex } - public Builder encoders(List<Encoder> encoders) { + public Builder encoders(List<Class<? extends Encoder>> encoders) { if (encoders == null || encoders.size() == 0) { this.encoders = Collections.EMPTY_LIST; } else { @@ -100,7 +102,7 @@ public interface ClientEndpointConfig ex } - public Builder decoders(List<Decoder> decoders) { + public Builder decoders(List<Class<? extends Decoder>> decoders) { if (decoders == null || decoders.size() == 0) { this.decoders = Collections.EMPTY_LIST; } else { Modified: tomcat/trunk/java/javax/websocket/DefaultClientEndpointConfig.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/DefaultClientEndpointConfig.java?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/java/javax/websocket/DefaultClientEndpointConfig.java (original) +++ tomcat/trunk/java/javax/websocket/DefaultClientEndpointConfig.java Tue Mar 5 16:12:30 2013 @@ -24,15 +24,17 @@ final class DefaultClientEndpointConfig private final List<String> preferredSubprotocols; private final List<Extension> extensions; - private final List<Encoder> encoders; - private final List<Decoder> decoders; + private final List<Class<? extends Encoder>> encoders; + private final List<Class<? extends Decoder>> decoders; private final Map<String,Object> userProperties = new HashMap<>(); private final Configurator configurator; DefaultClientEndpointConfig(List<String> preferredSubprotocols, - List<Extension> extensions, List<Encoder> encoders, - List<Decoder> decoders, Configurator configurator) { + List<Extension> extensions, + List<Class<? extends Encoder>> encoders, + List<Class<? extends Decoder>> decoders, + Configurator configurator) { this.preferredSubprotocols = preferredSubprotocols; this.extensions = extensions; this.decoders = decoders; @@ -54,13 +56,13 @@ final class DefaultClientEndpointConfig @Override - public List<Encoder> getEncoders() { + public List<Class<? extends Encoder>> getEncoders() { return encoders; } @Override - public List<Decoder> getDecoders() { + public List<Class<? extends Decoder>> getDecoders() { return decoders; } Modified: tomcat/trunk/java/javax/websocket/EndpointConfig.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/EndpointConfig.java?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/java/javax/websocket/EndpointConfig.java (original) +++ tomcat/trunk/java/javax/websocket/EndpointConfig.java Tue Mar 5 16:12:30 2013 @@ -21,9 +21,9 @@ import java.util.Map; public interface EndpointConfig { - List<Encoder> getEncoders(); + List<Class<? extends Encoder>> getEncoders(); - List<Decoder> getDecoders(); + List<Class<? extends Decoder>> getDecoders(); Map<String,Object> getUserProperties(); } Modified: tomcat/trunk/java/javax/websocket/server/DefaultServerEndpointConfiguration.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/server/DefaultServerEndpointConfiguration.java?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/java/javax/websocket/server/DefaultServerEndpointConfiguration.java (original) +++ tomcat/trunk/java/javax/websocket/server/DefaultServerEndpointConfiguration.java Tue Mar 5 16:12:30 2013 @@ -34,15 +34,16 @@ public class DefaultServerEndpointConfig private final String path; private final List<String> subprotocols; private final List<Extension> extensions; - private final List<Encoder> encoders; - private final List<Decoder> decoders; + private final List<Class<? extends Encoder>> encoders; + private final List<Class<? extends Decoder>> decoders; private final ServerEndpointConfigurator serverEndpointConfigurator; private final Map<String,Object> userProperties = new HashMap<>(); DefaultServerEndpointConfiguration( Class<?> endpointClass, String path, List<String> subprotocols, List<Extension> extensions, - List<Encoder> encoders, List<Decoder> decoders, + List<Class<? extends Encoder>> encoders, + List<Class<? extends Decoder>> decoders, ServerEndpointConfigurator serverEndpointConfigurator) { this.endpointClass = endpointClass; this.path = path; @@ -59,12 +60,12 @@ public class DefaultServerEndpointConfig } @Override - public List<Encoder> getEncoders() { + public List<Class<? extends Encoder>> getEncoders() { return this.encoders; } @Override - public List<Decoder> getDecoders() { + public List<Class<? extends Decoder>> getDecoders() { return this.decoders; } Modified: tomcat/trunk/java/javax/websocket/server/ServerEndpointConfigurationBuilder.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/server/ServerEndpointConfigurationBuilder.java?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/java/javax/websocket/server/ServerEndpointConfigurationBuilder.java (original) +++ tomcat/trunk/java/javax/websocket/server/ServerEndpointConfigurationBuilder.java Tue Mar 5 16:12:30 2013 @@ -33,8 +33,8 @@ public class ServerEndpointConfiguration private final Class<?> endpointClass; private final String path; - private List<Encoder> encoders = Collections.EMPTY_LIST; - private List<Decoder> decoders = Collections.EMPTY_LIST; + private List<Class<? extends Encoder>> encoders = Collections.EMPTY_LIST; + private List<Class<? extends Decoder>> decoders = Collections.EMPTY_LIST; private List<String> subprotocols = Collections.EMPTY_LIST; private List<Extension> extensions = Collections.EMPTY_LIST; private ServerEndpointConfigurator configurator = @@ -53,7 +53,8 @@ public class ServerEndpointConfiguration } - public ServerEndpointConfigurationBuilder encoders(List<Encoder> encoders) { + public ServerEndpointConfigurationBuilder encoders( + List<Class<? extends Encoder>> encoders) { if (encoders == null || encoders.size() == 0) { this.encoders = Collections.EMPTY_LIST; } else { @@ -63,7 +64,8 @@ public class ServerEndpointConfiguration } - public ServerEndpointConfigurationBuilder decoders(List<Decoder> decoders) { + public ServerEndpointConfigurationBuilder decoders( + List<Class<? extends Decoder>> decoders) { if (decoders == null || decoders.size() == 0) { this.decoders = Collections.EMPTY_LIST; } else { Modified: tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties Tue Mar 5 16:12:30 2013 @@ -36,6 +36,7 @@ wsRemoteEndpoint.changeType=When sending wsRemoteEndpoint.concurrentMessageSend=Messages may not be sent concurrently even when using the asynchronous send messages. The client must wait for the previous message to complete before sending the next. wsRemoteEndpoint.flushOnCloseFailed=Flushing batched messages before closing the session failed wsRemoteEndpoint.inProgress=Message will not be sent because the WebSocket session is currently sending another message +wsRemoteEndpoint.invalidEncoder=The specified encoder of type [{0}] could not be instantiated wsRemoteEndpoint.noEncoder=No encoder specified for object of class [{0}] # Note the following message is used as a close reason in a WebSocket control Modified: tomcat/trunk/java/org/apache/tomcat/websocket/Util.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/Util.java?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/Util.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/Util.java Tue Mar 5 16:12:30 2013 @@ -142,9 +142,8 @@ class Util { } - static Class<?> getEncoderType(Encoder encoder) { - return (Class<?>) Util.getGenericType(Encoder.class, - encoder.getClass()); + static Class<?> getEncoderType(Class<? extends Encoder> encoder) { + return (Class<?>) Util.getGenericType(Encoder.class, encoder); } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java Tue Mar 5 16:12:30 2013 @@ -35,6 +35,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; +import javax.websocket.DeploymentException; import javax.websocket.EncodeException; import javax.websocket.Encoder; import javax.websocket.RemoteEndpoint; @@ -453,11 +454,20 @@ public abstract class WsRemoteEndpointIm } - protected void setEncoders(List<Encoder> encoders) { + protected void setEncoders(List<Class<? extends Encoder>> encoders) + throws DeploymentException { encoderEntries.clear(); - for (Encoder encoder : encoders) { - EncoderEntry entry = - new EncoderEntry(Util.getEncoderType(encoder), encoder); + for (Class<? extends Encoder> encoderClazz : encoders) { + Encoder instance; + try { + instance = encoderClazz.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new DeploymentException( + sm.getString("wsRemoteEndpoint.invalidEncoder", + encoderClazz.getName()), e); + } + EncoderEntry entry = new EncoderEntry( + Util.getEncoderType(encoderClazz), instance); encoderEntries.add(entry); } } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Tue Mar 5 16:12:30 2013 @@ -31,6 +31,7 @@ import java.util.concurrent.ConcurrentHa import javax.websocket.CloseReason; import javax.websocket.CloseReason.CloseCodes; +import javax.websocket.DeploymentException; import javax.websocket.Encoder; import javax.websocket.Endpoint; import javax.websocket.Extension; @@ -85,13 +86,15 @@ public class WsSession implements Sessio * * @param localEndpoint * @param wsRemoteEndpoint + * @throws DeploymentException */ public WsSession(Endpoint localEndpoint, WsRemoteEndpointImplBase wsRemoteEndpoint, WsWebSocketContainer wsWebSocketContainer, WsRequest request, String subProtocol, Map<String,String> pathParameters, - boolean secure, List<Encoder> encoders) { + boolean secure, List<Class<? extends Encoder>> encoders) + throws DeploymentException { this.localEndpoint = localEndpoint; this.wsRemoteEndpoint = wsRemoteEndpoint; this.wsRemoteEndpoint.setSession(this); Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java Tue Mar 5 16:12:30 2013 @@ -28,6 +28,7 @@ import javax.servlet.http.HttpUpgradeHan import javax.servlet.http.WebConnection; import javax.websocket.CloseReason; import javax.websocket.CloseReason.CloseCodes; +import javax.websocket.DeploymentException; import javax.websocket.Endpoint; import javax.websocket.EndpointConfig; @@ -105,6 +106,8 @@ public class WsProtocolHandler implement new WsWriteListener(this, wsRemoteEndpointServer)); ep.onOpen(wsSession, endpointConfig); webSocketContainer.registerSession(ep.getClass(), wsSession); + } catch (DeploymentException e) { + throw new IllegalArgumentException(e); } finally { t.setContextClassLoader(cl); } Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java?rev=1452873&r1=1452872&r2=1452873&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java (original) +++ tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java Tue Mar 5 16:12:30 2013 @@ -63,35 +63,35 @@ public class TestUtil { @Test public void testGetEncoderTypeSimple() { Assert.assertEquals( - String.class, Util.getEncoderType(new SimpleEncoder())); + String.class, Util.getEncoderType(SimpleEncoder.class)); } @Test public void testGetEncoderTypeSubclass() { Assert.assertEquals(String.class, - Util.getEncoderType(new SubSimpleEncoder())); + Util.getEncoderType(SubSimpleEncoder.class)); } @Test public void testGetEncoderTypeGenericSubclass() { Assert.assertEquals(String.class, - Util.getEncoderType(new GenericSubEncoder())); + Util.getEncoderType(GenericSubEncoder.class)); } @Test public void testGetEncoderTypeGenericMultipleSubclass() { Assert.assertEquals(String.class, - Util.getEncoderType(new GenericMultipleSubSubEncoder())); + Util.getEncoderType(GenericMultipleSubSubEncoder.class)); } @Test public void testGetEncoderTypeGenericMultipleSubclassSwap() { Assert.assertEquals(String.class, - Util.getEncoderType(new GenericMultipleSubSubSwapEncoder())); + Util.getEncoderType(GenericMultipleSubSubSwapEncoder.class)); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org