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