Updated Branches: refs/heads/wicket-6.x b1b450f97 -> cf99053f8
Minor improvements (cherry picked from commit efce377cfdbbe0bc1ca58cde66f29c2b2c0d531f) Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/cf99053f Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/cf99053f Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/cf99053f Branch: refs/heads/wicket-6.x Commit: cf99053f87e8350bf5991ddc98cef272a8896014 Parents: b1b450f Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Jan 30 09:22:33 2014 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Thu Jan 30 09:36:12 2014 +0100 ---------------------------------------------------------------------- .../protocol/ws/AbstractUpgradeFilter.java | 8 +-- .../ws/api/AbstractWebSocketProcessor.java | 8 ++- .../protocol/ws/api/BaseWebSocketBehavior.java | 3 + .../wicket/protocol/ws/api/HttpSessionCopy.java | 67 ++++++++++++-------- .../protocol/ws/api/ServletRequestCopy.java | 15 ++--- .../ws/api/res/js/wicket-websocket-jquery.js | 7 +- .../api/res/js/wicket-websocket-setup.js.tmpl | 2 +- 7 files changed, 63 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/cf99053f/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/AbstractUpgradeFilter.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/AbstractUpgradeFilter.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/AbstractUpgradeFilter.java index 005e0e0..489b10d 100644 --- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/AbstractUpgradeFilter.java +++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/AbstractUpgradeFilter.java @@ -79,20 +79,20 @@ public class AbstractUpgradeFilter extends WicketFilter String key; String subProtocol = null; - if (!headerContainsToken(req, "upgrade", "websocket")) + if (!headerContainsToken(req, "Upgrade", "websocket")) { return false; } - if (!headerContainsToken(req, "connection", "upgrade")) + if (!headerContainsToken(req, "Connection", "upgrade")) { resp.sendError(HttpServletResponse.SC_BAD_REQUEST); return false; } - if (!headerContainsToken(req, "sec-websocket-version", "13")) + if (!headerContainsToken(req, "Sec-websocket-version", "13")) { - resp.setStatus(426); + resp.setStatus(HttpServletResponse.SC_BAD_REQUEST); // http://tools.ietf.org/html/rfc6455#section-4.4 resp.setHeader("Sec-WebSocket-Version", "13"); return false; } http://git-wip-us.apache.org/repos/asf/wicket/blob/cf99053f/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 07b8c83..6a98ccd 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 @@ -86,13 +86,15 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor try { GET_FILTER_PATH_METHOD = WicketFilter.class.getDeclaredMethod("getFilterPath", new Class[]{}); - } catch (Exception e) + } + catch (Exception e) { throw new RuntimeException(e); } GET_FILTER_PATH_METHOD.setAccessible(true); } + private final WebRequest webRequest; private final int pageId; private final String resourceName; @@ -146,13 +148,15 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor try { filterPath = (String) GET_FILTER_PATH_METHOD.invoke(wicketFilter); - } catch (Exception e) + } + catch (Exception e) { throw new RuntimeException(e); } return filterPath; } + @Override public void onMessage(final String message) { http://git-wip-us.apache.org/repos/asf/wicket/blob/cf99053f/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/BaseWebSocketBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/BaseWebSocketBehavior.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/BaseWebSocketBehavior.java index e9e2406..1810953 100644 --- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/BaseWebSocketBehavior.java +++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/BaseWebSocketBehavior.java @@ -101,6 +101,9 @@ public class BaseWebSocketBehavior extends Behavior String contextPath = component.getRequest().getContextPath(); variables.put("contextPath", contextPath); + // preserve the application name for JSR356 based impl + variables.put("applicationName", component.getApplication().getName()); + String webSocketSetupScript = webSocketSetupTemplate.asString(variables); response.render(OnDomReadyHeaderItem.forScript(webSocketSetupScript)); http://git-wip-us.apache.org/repos/asf/wicket/blob/cf99053f/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/HttpSessionCopy.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/HttpSessionCopy.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/HttpSessionCopy.java index 2d5fed1..e7a770b 100644 --- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/HttpSessionCopy.java +++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/HttpSessionCopy.java @@ -37,12 +37,14 @@ public class HttpSessionCopy implements HttpSession private final ServletContext servletContext; private int maxInactiveInterval; - public HttpSessionCopy(final HttpSession originalSession) { + public HttpSessionCopy(final HttpSession originalSession) + { this.sessionId = originalSession.getId(); this.servletContext = originalSession.getServletContext(); this.creationTime = originalSession.getCreationTime(); - this.attributes = new ConcurrentHashMap<String, Object>(); + + @SuppressWarnings("unchecked") Enumeration<String> attributeNames = originalSession.getAttributeNames(); while (attributeNames.hasMoreElements()) { @@ -53,93 +55,106 @@ public class HttpSessionCopy implements HttpSession } - public void destroy(){ - attributes.clear(); - } - @Override - public long getCreationTime() { + public long getCreationTime() + { return creationTime; } @Override - public String getId() { + public String getId() + { return sessionId; } - // TODO: Not supported for now. Must update on every WebSocket Message @Override - public long getLastAccessedTime() { + public long getLastAccessedTime() + { return 0; } @Override - public ServletContext getServletContext() { + public ServletContext getServletContext() + { return servletContext; } @Override - public void setMaxInactiveInterval(int interval) { + public void setMaxInactiveInterval(int interval) + { this.maxInactiveInterval = interval; } @Override - public int getMaxInactiveInterval() { + public int getMaxInactiveInterval() + { return maxInactiveInterval; } @Override - public HttpSessionContext getSessionContext() { + public HttpSessionContext getSessionContext() + { return null; } @Override - public Object getAttribute(String name) { + public Object getAttribute(String name) + { return attributes.get(name); } @Override - public Object getValue(String name) { + public Object getValue(String name) + { return attributes.get(name); } @Override - public Enumeration<String> getAttributeNames() { + public Enumeration<String> getAttributeNames() + { return attributes.keys(); } @Override - public String[] getValueNames() { - return (String[]) Collections.list(attributes.keys()).toArray(); + public String[] getValueNames() + { + return (String[])Collections.list(attributes.keys()).toArray(); } @Override - public void setAttribute(String name, Object value) { + public void setAttribute(String name, Object value) + { attributes.put(name, value); } @Override - public void putValue(String name, Object value) { + public void putValue(String name, Object value) + { attributes.put(name, value); } @Override - public void removeAttribute(String name) { + public void removeAttribute(String name) + { attributes.remove(name); } @Override - public void removeValue(String name) { + public void removeValue(String name) + { attributes.remove(name); } - // TODO: Not supported for now. @Override - public void invalidate() { + public void invalidate() + { + attributes.clear(); } @Override - public boolean isNew() { + public boolean isNew() + { return false; } + } http://git-wip-us.apache.org/repos/asf/wicket/blob/cf99053f/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/ServletRequestCopy.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/ServletRequestCopy.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/ServletRequestCopy.java index 02bad1a..e51bcfe 100644 --- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/ServletRequestCopy.java +++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/ServletRequestCopy.java @@ -68,33 +68,26 @@ public class ServletRequestCopy implements HttpServletRequest HttpSession session = request.getSession(true); httpSession = new HttpSessionCopy(session); - Enumeration<String> e = request.getHeaderNames(); String s; - while (e.hasMoreElements()) { + Enumeration<String> e = request.getHeaderNames(); + while (e != null && e.hasMoreElements()) { s = e.nextElement(); headers.put(s, request.getHeader(s)); } e = request.getAttributeNames(); - while (e.hasMoreElements()) { + while (e != null && e.hasMoreElements()) { s = e.nextElement(); attributes.put(s, request.getAttribute(s)); } e = request.getParameterNames(); - while (e.hasMoreElements()) { + while (e != null && e.hasMoreElements()) { s = e.nextElement(); parameters.put(s, request.getParameterValues(s)); } } - public void destroy() { - attributes.clear(); - headers.clear(); - parameters.clear(); - httpSession.destroy(); - } - @Override public String getServerName() { return serverName; http://git-wip-us.apache.org/repos/asf/wicket/blob/cf99053f/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js index 5c07a44..22df796 100644 --- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js +++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js @@ -47,12 +47,13 @@ url = protocol + '//' + document.location.host + Wicket.WebSocket.contextPath + '/wicket/websocket'; if (Wicket.WebSocket.pageId !== false) { - url += '?pageId=' + Wicket.WebSocket.pageId; + url += '?pageId=' + encodeURIComponent(Wicket.WebSocket.pageId); } else if (Wicket.WebSocket.resourceName) { - url += '?resourceName=' + Wicket.WebSocket.resourceName; + url += '?resourceName=' + encodeURIComponent(Wicket.WebSocket.resourceName); } - url += '&wicket-ajax-baseurl=' + Wicket.WebSocket.baseUrl; + url += '&wicket-ajax-baseurl=' + encodeURIComponent(Wicket.WebSocket.baseUrl); + url += '&wicket-app-name=' + encodeURIComponent(Wicket.WebSocket.appName); self.ws = new WebSocket(url); self.ws.onopen = function (evt) { http://git-wip-us.apache.org/repos/asf/wicket/blob/cf99053f/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-setup.js.tmpl ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-setup.js.tmpl b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-setup.js.tmpl index fe81fdc..b5b3ae7 100644 --- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-setup.js.tmpl +++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-setup.js.tmpl @@ -3,7 +3,7 @@ if (!Wicket.WebSocket.key) { jQuery.extend(Wicket.WebSocket, { pageId: ${pageId}, resourceName: '${resourceName}', - baseUrl: '${baseUrl}', contextPath: '${contextPath}' }); + baseUrl: '${baseUrl}', contextPath: '${contextPath}', appName: '${applicationName}' }); Wicket.WebSocket.createDefaultConnection(); } })();
