Repository: wicket
Updated Branches:
  refs/heads/wicket-6.x 1d9c6b955 -> 1c6484869


WICKET-6054 Provide a factory method for the WebSocketResponse & 
WebSocketRequest
WICKET-5737 Log a warning when WebSocketResponse#sendError() is used

Backport r8a5508e


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/1c648486
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/1c648486
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/1c648486

Branch: refs/heads/wicket-6.x
Commit: 1c64848693f46b3c8d18cfe9b11a9c71482bd93d
Parents: 1d9c6b9
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Tue Oct 28 11:36:03 2014 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Thu Dec 24 14:51:38 2015 +0100

----------------------------------------------------------------------
 .../wicket/protocol/ws/WebSocketSettings.java   | 16 +++++++++++++
 .../ws/api/AbstractWebSocketProcessor.java      | 24 +++++++++++++++++---
 .../protocol/ws/api/WebSocketResponse.java      |  6 ++++-
 3 files changed, 42 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/1c648486/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/WebSocketSettings.java
----------------------------------------------------------------------
diff --git 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/WebSocketSettings.java
 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/WebSocketSettings.java
index 4df75a6..4198d44 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/WebSocketSettings.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/WebSocketSettings.java
@@ -18,9 +18,12 @@ package org.apache.wicket.protocol.ws;
 
 import java.util.concurrent.Callable;
 
+import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
+import org.apache.wicket.protocol.ws.api.WebSocketResponse;
 import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
 import 
org.apache.wicket.protocol.ws.api.registry.SimpleWebSocketConnectionRegistry;
 import org.apache.wicket.protocol.ws.concurrent.Executor;
+import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -104,6 +107,19 @@ public class WebSocketSettings implements 
IWebSocketSettings
        }
 
        /**
+        * A factory method for the {@link 
org.apache.wicket.request.http.WebResponse}
+        * that should be used to write the response back to the client/browser
+        *
+        * @param connection
+        *              The active web socket connection
+        * @return the response object that should be used to write the 
response back to the client
+        */
+       public WebResponse newWebSocketResponse(IWebSocketConnection connection)
+       {
+               return new WebSocketResponse(connection);
+       }
+
+       /**
         * Simple executor that runs the tasks in the caller thread.
         */
        public static class SameThreadExecutor implements Executor

http://git-wip-us.apache.org/repos/asf/wicket/blob/1c648486/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
----------------------------------------------------------------------
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 fea34a9..d79809b 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
@@ -31,6 +31,7 @@ import org.apache.wicket.page.IPageManager;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.http.WicketFilter;
 import org.apache.wicket.protocol.ws.IWebSocketSettings;
+import org.apache.wicket.protocol.ws.WebSocketSettings;
 import org.apache.wicket.protocol.ws.api.event.WebSocketBinaryPayload;
 import org.apache.wicket.protocol.ws.api.event.WebSocketClosedPayload;
 import org.apache.wicket.protocol.ws.api.event.WebSocketConnectedPayload;
@@ -53,6 +54,7 @@ import 
org.apache.wicket.request.cycle.AbstractRequestCycleListener;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.cycle.RequestCycleContext;
 import org.apache.wicket.request.http.WebRequest;
+import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.session.ISessionStore;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Checks;
@@ -98,6 +100,7 @@ public abstract class AbstractWebSocketProcessor implements 
IWebSocketProcessor
        private final Url baseUrl;
        private final WebApplication application;
        private final String sessionId;
+       private final IWebSocketSettings webSocketSettings;
        private final IWebSocketConnectionRegistry connectionRegistry;
 
        /**
@@ -135,7 +138,7 @@ public abstract class AbstractWebSocketProcessor implements 
IWebSocketProcessor
                this.webRequest = new WebSocketRequest(new 
ServletRequestCopy(request), getFilterPath(wicketFilter));
 
                this.application = Args.notNull(application, "application");
-               IWebSocketSettings webSocketSettings = 
IWebSocketSettings.Holder.get(application);
+               this.webSocketSettings = 
IWebSocketSettings.Holder.get(application);
                this.connectionRegistry = 
webSocketSettings.getConnectionRegistry();
        }
 
@@ -213,7 +216,8 @@ public abstract class AbstractWebSocketProcessor implements 
IWebSocketProcessor
                        Session oldSession = ThreadContext.getSession();
                        RequestCycle oldRequestCycle = 
ThreadContext.getRequestCycle();
 
-                       WebSocketResponse webResponse = new 
WebSocketResponse(connection);
+                       WebResponse webResponse = 
createWebSocketResponse(connection);
+
                        try
                        {
                                WebSocketRequestMapper requestMapper = new 
WebSocketRequestMapper(application.getRootRequestMapper());
@@ -274,7 +278,21 @@ public abstract class AbstractWebSocketProcessor 
implements IWebSocketProcessor
                }
        }
 
-       private RequestCycle createRequestCycle(WebSocketRequestMapper 
requestMapper, WebSocketResponse webResponse)
+       private WebResponse createWebSocketResponse(IWebSocketConnection 
connection)
+       {
+               WebResponse webResponse;
+               if (webSocketSettings instanceof WebSocketSettings)
+               {
+                       webResponse = 
((WebSocketSettings)webSocketSettings).newWebSocketResponse(connection);
+               }
+               else
+               {
+                       webResponse = new WebSocketResponse(connection);
+               }
+               return webResponse;
+       }
+
+       private RequestCycle createRequestCycle(WebSocketRequestMapper 
requestMapper, WebResponse webResponse)
        {
                RequestCycleContext context = new 
RequestCycleContext(webRequest, webResponse,
                                requestMapper, 
application.getExceptionMapperProvider().get());

http://git-wip-us.apache.org/repos/asf/wicket/blob/1c648486/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketResponse.java
----------------------------------------------------------------------
diff --git 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketResponse.java
 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketResponse.java
index d5f36bf..fee187f 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketResponse.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketResponse.java
@@ -190,7 +190,11 @@ public class WebSocketResponse extends WebResponse
        @Override
        public void sendError(int sc, String msg)
        {
-               throw new UnsupportedOperationException();
+               LOG.warn("An HTTP error response in WebSocket communication 
would not be processed by the browser! " +
+                               "If you need to send the error code and message 
to the client then configure custom WebSocketResponse " +
+                               "via WebSocketSettings#newWebSocketResponse() 
factory method and override #sendError() method to write " +
+                               "them in an appropriate format for your 
application. " +
+                               "The ignored error code is '{}' and the 
message: '{}'.", sc, msg);
        }
 
        @Override

Reply via email to