You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2019/04/05 06:49:09 UTC

[wicket] 01/01: WICKET-6649 Store the applicationName, sessionId and key in WebSocket Text/BinaryMessage and in IWebSocketConnection

This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch WICKET-6649-downport-for-wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit b23ed1160ec1c3660b8e21cbe1d3dde6217a6be3
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Fri Apr 5 09:47:30 2019 +0300

    WICKET-6649 Store the applicationName, sessionId and key in WebSocket Text/BinaryMessage and in IWebSocketConnection
    
    Downport of 12b1fb227564c22f4887dea23610be7cb8c5d977 for Wicket 8.x.
    It manages to trick maven-clirr-plugin (binary compatibility checker) by using dummy values for Application, session id and IKey
---
 .../ws/api/AbstractWebSocketConnection.java        | 25 +++++++++++++++
 .../ws/api/AbstractWebSocketProcessor.java         |  6 ++--
 .../protocol/ws/api/IWebSocketConnection.java      |  1 +
 .../protocol/ws/api/message/BinaryMessage.java     | 36 +++++++++++++++++++---
 .../protocol/ws/api/message/TextMessage.java       | 31 +++++++++++++++++--
 .../ws/util/tester/TestWebSocketConnection.java    | 26 ++++++++++++++++
 .../ws/util/tester/TestWebSocketProcessor.java     |  2 +-
 .../ws/util/tester/SendPayloadWithContextTest.java |  7 ++++-
 8 files changed, 123 insertions(+), 11 deletions(-)

diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java
index 02ae01c..2ccd884 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java
@@ -16,7 +16,9 @@
  */
 package org.apache.wicket.protocol.ws.api;
 
+import org.apache.wicket.Application;
 import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -24,6 +26,11 @@ import org.apache.wicket.util.lang.Args;
  */
 public abstract class AbstractWebSocketConnection implements IWebSocketConnection
 {
+
+	private final String applicationName;
+	private final String sessionId;
+	private final IKey key;
+
 	private final AbstractWebSocketProcessor webSocketProcessor;
 
 	/**
@@ -34,6 +41,9 @@ public abstract class AbstractWebSocketConnection implements IWebSocketConnectio
 	 */
 	public AbstractWebSocketConnection(AbstractWebSocketProcessor webSocketProcessor)
 	{
+		this.applicationName = webSocketProcessor.getApplication().getName();
+		this.sessionId = webSocketProcessor.getSessionId();
+		this.key = webSocketProcessor.getRegistryKey();
 		this.webSocketProcessor = Args.notNull(webSocketProcessor, "webSocketProcessor");
 	}
 
@@ -42,4 +52,19 @@ public abstract class AbstractWebSocketConnection implements IWebSocketConnectio
 	{
 		webSocketProcessor.broadcastMessage(message);
 	}
+
+	public Application getApplication()
+	{
+		return Application.get(applicationName);
+	}
+
+	public String getSessionId()
+	{
+		return sessionId;
+	}
+
+	public IKey getKey()
+	{
+		return key;
+	}
 }
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
index e502d16..d1f24de 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
@@ -145,13 +145,13 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor
 	@Override
 	public void onMessage(final String message)
 	{
-		broadcastMessage(new TextMessage(message));
+		broadcastMessage(new TextMessage(getApplication(), getSessionId(), getRegistryKey(), message));
 	}
 
 	@Override
 	public void onMessage(byte[] data, int offset, int length)
 	{
-		BinaryMessage binaryMessage = new BinaryMessage(data, offset, length);
+		BinaryMessage binaryMessage = new BinaryMessage(getApplication(), getSessionId(), getRegistryKey(), data, offset, length);
 		broadcastMessage(binaryMessage);
 	}
 
@@ -375,7 +375,7 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor
 		return payload;
 	}
 
-	private IKey getRegistryKey()
+	protected IKey getRegistryKey()
 	{
 		IKey key;
 		if (Strings.isEmpty(resourceName))
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java
index 7a492df..3e96ed9 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.protocol.ws.api;
 
 import java.io.IOException;
+
 import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
 
 /**
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java
index 9728e2b..17073eb 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java
@@ -16,29 +16,57 @@
  */
 package org.apache.wicket.protocol.ws.api.message;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.Session;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
+
 /**
  * A {@link IWebSocketMessage message} with binary data
  *
  * @since 6.0
  */
-public class BinaryMessage implements IWebSocketMessage
+public class BinaryMessage extends AbstractClientMessage
 {
 	private final byte[] data;
 	private final int offset;
 	private final int length;
 
 	/**
-	 * Constructor.
+	 * Not used by Wicket since 8.5.0!
 	 *
 	 * @param data
 	 *      the binary message from the client
 	 * @param offset
 	 *      the offset to read from
 	 * @param length
-	 *      how much data to read
+	 * 		the length of the data to read
 	 */
+	@Deprecated
 	public BinaryMessage(byte[] data, int offset, int length)
 	{
+		this(new MockApplication(), "", new IKey() {}, data, offset, length);
+	}
+
+	/**
+	 * Constructor.
+	 *
+	 * @param application
+	 *      the Wicket application
+	 * @param sessionId
+	 *      the id of the http session
+	 * @param key
+	 *      the page id or resource name
+	 * @param data
+	 *      the binary message from the client
+	 * @param offset
+	 *      the offset to read from
+	 * @param length
+	 * 		the length of the data to read
+	 */
+	public BinaryMessage(Application application, String sessionId, IKey key, byte[] data, int offset, int length)
+	{
+		super(application, sessionId, key);
 		this.data = data;
 		this.offset = offset;
 		this.length = length;
@@ -58,4 +86,4 @@ public class BinaryMessage implements IWebSocketMessage
 	{
 		return length;
 	}
-}
\ No newline at end of file
+}
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java
index 5893b05..216b74e 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java
@@ -16,6 +16,9 @@
  */
 package org.apache.wicket.protocol.ws.api.message;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -23,12 +26,36 @@ import org.apache.wicket.util.lang.Args;
  *
  * @since 6.0
  */
-public class TextMessage implements IWebSocketMessage
+public class TextMessage extends AbstractClientMessage
 {
 	private final CharSequence text;
 
-	public TextMessage(final CharSequence text)
+	/**
+	 * Not used by Wicket since 8.5.0!
+	 *
+	 * @param text
+	 * 		the message sent from the client
+	 */
+	@Deprecated
+	public TextMessage(CharSequence text)
 	{
+		this(new MockApplication(), "", new IKey() {}, text);
+	}
+
+	/**
+	 *
+	 * @param application
+	 *      the Wicket application
+	 * @param sessionId
+	 *      the id of the http session
+	 * @param key
+	 *      the page id or resource name
+	 * @param text
+	 *      the message sent from the client
+	 */
+	public TextMessage(Application application, String sessionId, IKey key, CharSequence text)
+	{
+		super(application, sessionId, key);
 		this.text = Args.notEmpty(text, "text");
 	}
 
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java
index a5c1544..5be35ba 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java
@@ -18,7 +18,10 @@ package org.apache.wicket.protocol.ws.util.tester;
 
 import java.io.IOException;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
 
 /**
  * A WebSocketConnection used for the testing.
@@ -27,8 +30,18 @@ import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
  */
 abstract class TestWebSocketConnection implements IWebSocketConnection
 {
+	private final WebApplication application;
+	private final String sessionId;
+	private final IKey registryKey;
 	private boolean isOpen = true;
 
+	public TestWebSocketConnection(WebApplication application, String sessionId, IKey registryKey)
+	{
+		this.application = application;
+		this.sessionId = sessionId;
+		this.registryKey = registryKey;
+	}
+
 	@Override
 	public boolean isOpen()
 	{
@@ -85,5 +98,18 @@ abstract class TestWebSocketConnection implements IWebSocketConnection
 		}
 	}
 
+	public Application getApplication()
+	{
+		return application;
+	}
+
+	public String getSessionId()
+	{
+		return sessionId;
+	}
 
+	public IKey getKey()
+	{
+		return registryKey;
+	}
 }
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
index f7b55e1..e48b908 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
@@ -126,7 +126,7 @@ abstract class TestWebSocketProcessor extends AbstractWebSocketProcessor
 	@Override
 	public void onOpen(Object connection)
 	{
-		onConnect(new TestWebSocketConnection() {
+		onConnect(new TestWebSocketConnection(getApplication(), getSessionId(), getRegistryKey()) {
 
 			@Override
 			protected void onOutMessage(String message)
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java b/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java
index db4f6c3..6b7a6a5 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java
@@ -96,8 +96,13 @@ public class SendPayloadWithContextTest extends Assert
 			add(new WebSocketBehavior()
 			{
 				@Override
-				protected void onMessage(WebSocketRequestHandler handler, TextMessage ignored)
+				protected void onMessage(WebSocketRequestHandler handler, TextMessage message)
 				{
+					assertNotNull("The application must be available", message.getApplication());
+					assertNotNull("The session id must be available", message.getSessionId());
+					assertNotNull("The key must be available", message.getKey());
+					assertNotNull("The text must be set", message.getText());
+
 					// send an outbound message with the current context encoded as String
 					handler.push(String.valueOf(context.get()));
 				}