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
