You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/09/22 15:09:58 UTC

svn commit: r1626765 - in /tomcat/trunk: java/javax/websocket/Session.java java/org/apache/tomcat/websocket/Util.java java/org/apache/tomcat/websocket/WsSession.java res/META-INF/websocket-api.jar.manifest webapps/docs/changelog.xml

Author: markt
Date: Mon Sep 22 13:09:57 2014
New Revision: 1626765

URL: http://svn.apache.org/r1626765
Log:
Update WebSocket implementation to version 1.1 of the spec

Modified:
    tomcat/trunk/java/javax/websocket/Session.java
    tomcat/trunk/java/org/apache/tomcat/websocket/Util.java
    tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
    tomcat/trunk/res/META-INF/websocket-api.jar.manifest
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/javax/websocket/Session.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/Session.java?rev=1626765&r1=1626764&r2=1626765&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/Session.java (original)
+++ tomcat/trunk/java/javax/websocket/Session.java Mon Sep 22 13:09:57 2014
@@ -31,8 +31,22 @@ public interface Session extends Closeab
      */
     WebSocketContainer getContainer();
 
-    void addMessageHandler(MessageHandler listener)
-            throws IllegalStateException;
+    /**
+     * Registers a {@link MessageHandler} for incoming messages. Only one
+     * {@link MessageHandler} may be registered for each message type (text,
+     * binary, pong). The message type will be derived at runtime from the
+     * provided {@link MessageHandler} instance. It is not always possible to do
+     * this so it is better to use
+     * {@link #addMessageHandler(Class, javax.websocket.MessageHandler.Partial)}
+     * or
+     * {@link #addMessageHandler(Class, javax.websocket.MessageHandler.Whole)}.
+     *
+     * @param listener  The message handler for a incoming message
+     *
+     * @throws IllegalStateException  If a message handler has already been
+     *                                registered for the associated message type
+     */
+    void addMessageHandler(MessageHandler listener) throws IllegalStateException;
 
     Set<MessageHandler> getMessageHandlers();
 
@@ -126,4 +140,34 @@ public interface Session extends Closeab
      * this session is associated with.
      */
     Set<Session> getOpenSessions();
+
+    /**
+     * Registers a {@link MessageHandler} for partial incoming messages. Only
+     * one {@link MessageHandler} may be registered for each message type (text
+     * or binary, pong messages are never presented as partial messages).
+     *
+     * @param clazz     The type of message that the given handler is intended
+     *                  for
+     * @param listener  The message handler for a incoming message
+     *
+     * @throws IllegalStateException  If a message handler has already been
+     *                                registered for the associated message type
+     */
+    <T> void addMessageHandler(Class<T> clazz, MessageHandler.Partial<T> handler)
+            throws IllegalStateException;
+
+    /**
+     * Registers a {@link MessageHandler} for whole incoming messages. Only
+     * one {@link MessageHandler} may be registered for each message type (text,
+     * binary, pong).
+     *
+     * @param clazz     The type of message that the given handler is intended
+     *                  for
+     * @param listener  The message handler for a incoming message
+     *
+     * @throws IllegalStateException  If a message handler has already been
+     *                                registered for the associated message type
+     */
+    <T> void addMessageHandler(Class<T> clazz, MessageHandler.Whole<T> handler)
+            throws IllegalStateException;
 }

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=1626765&r1=1626764&r2=1626765&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/Util.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/Util.java Mon Sep 22 13:09:57 2014
@@ -353,12 +353,10 @@ public class Util {
     }
 
 
-    static Set<MessageHandlerResult> getMessageHandlers(
+    static Set<MessageHandlerResult> getMessageHandlers(Class<?> target,
             MessageHandler listener, EndpointConfig endpointConfig,
             Session session) {
 
-        Class<?> target = Util.getMessageType(listener);
-
         // Will never be more than 2 types
         Set<MessageHandlerResult> results = new HashSet<>(2);
 

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=1626765&r1=1626764&r2=1626765&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Mon Sep 22 13:09:57 2014
@@ -37,6 +37,8 @@ import javax.websocket.Endpoint;
 import javax.websocket.EndpointConfig;
 import javax.websocket.Extension;
 import javax.websocket.MessageHandler;
+import javax.websocket.MessageHandler.Partial;
+import javax.websocket.MessageHandler.Whole;
 import javax.websocket.PongMessage;
 import javax.websocket.RemoteEndpoint;
 import javax.websocket.SendResult;
@@ -163,10 +165,29 @@ public class WsSession implements Sessio
     }
 
 
-    @SuppressWarnings("unchecked")
     @Override
     public void addMessageHandler(MessageHandler listener) {
+        Class<?> target = Util.getMessageType(listener);
+        doAddMessageHandler(target, listener);
+    }
+
+
+    @Override
+    public <T> void addMessageHandler(Class<T> clazz, Partial<T> handler)
+            throws IllegalStateException {
+        doAddMessageHandler(clazz, handler);
+    }
 
+
+    @Override
+    public <T> void addMessageHandler(Class<T> clazz, Whole<T> handler)
+            throws IllegalStateException {
+        doAddMessageHandler(clazz, handler);
+    }
+
+
+    @SuppressWarnings("unchecked")
+    private void doAddMessageHandler(Class<?> target, MessageHandler listener) {
         checkState();
 
         // Message handlers that require decoders may map to text messages,
@@ -180,7 +201,7 @@ public class WsSession implements Sessio
         // just as easily.
 
         Set<MessageHandlerResult> mhResults =
-                Util.getMessageHandlers(listener, endpointConfig, this);
+                Util.getMessageHandlers(target, listener, endpointConfig, this);
 
         for (MessageHandlerResult mhResult : mhResults) {
             switch (mhResult.getType()) {

Modified: tomcat/trunk/res/META-INF/websocket-api.jar.manifest
URL: http://svn.apache.org/viewvc/tomcat/trunk/res/META-INF/websocket-api.jar.manifest?rev=1626765&r1=1626764&r2=1626765&view=diff
==============================================================================
--- tomcat/trunk/res/META-INF/websocket-api.jar.manifest (original)
+++ tomcat/trunk/res/META-INF/websocket-api.jar.manifest Mon Sep 22 13:09:57 2014
@@ -4,8 +4,8 @@ X-Compile-Target-JDK: @target.jdk@
 
 Name: javax/websocket/
 Specification-Title: WebSocket
-Specification-Version: 1.0
+Specification-Version: 1.1
 Specification-Vendor: Oracle, Inc.
 Implementation-Title: javax.websocket
-Implementation-Version: 1.0.@websocket.revision@
+Implementation-Version: 1.1.@websocket.revision@
 Implementation-Vendor: Apache Software Foundation

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1626765&r1=1626764&r2=1626765&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Sep 22 13:09:57 2014
@@ -210,6 +210,10 @@
         <bug>56982</bug>: Return the actual negotiated extensions rather than an
         empty list for <code>Session.getNegotiatedExtensions()</code>. (markt)
       </fix>
+      <update>
+        Update the WebSocket implementation to support the Java WebSocket
+        specification version 1.1. (markt)
+      </update>
     </changelog>
   </subsection>
   <subsection name="Web applications">



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