Minor improvements
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/efce377c Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/efce377c Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/efce377c Branch: refs/heads/master Commit: efce377cfdbbe0bc1ca58cde66f29c2b2c0d531f Parents: 3d59893 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:22:33 2014 +0100 ---------------------------------------------------------------------- .../protocol/ws/AbstractUpgradeFilter.java | 10 +-- .../ws/api/AbstractWebSocketProcessor.java | 30 +-------- .../protocol/ws/api/BaseWebSocketBehavior.java | 3 + .../wicket/protocol/ws/api/HttpSessionCopy.java | 66 ++++++++++++-------- .../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, 58 insertions(+), 75 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/efce377c/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 cf06720..59a7867 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; } @@ -155,7 +155,7 @@ public class AbstractUpgradeFilter extends WicketFilter Enumeration<String> headers = req.getHeaders(headerName); while (headers.hasMoreElements()) { String header = headers.nextElement(); - String[] tokens = header.split(","); + String[] tokens = Strings.split(header, ','); for (String token : tokens) { result.add(token.trim()); } http://git-wip-us.apache.org/repos/asf/wicket/blob/efce377c/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 a72e36d..1747698 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 @@ -16,8 +16,6 @@ */ package org.apache.wicket.protocol.ws.api; -import java.lang.reflect.Method; - import javax.servlet.http.HttpServletRequest; import org.apache.wicket.Application; @@ -80,19 +78,6 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor */ private static final int NO_PAGE_ID = -1; - private static final Method GET_FILTER_PATH_METHOD; - static - { - try - { - GET_FILTER_PATH_METHOD = WicketFilter.class.getDeclaredMethod("getFilterPath", new Class[]{}); - } 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; @@ -133,26 +118,13 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor this.baseUrl = Url.parse(baseUrl); WicketFilter wicketFilter = application.getWicketFilter(); - this.webRequest = new WebSocketRequest(new ServletRequestCopy(request), getFilterPath(wicketFilter)); + this.webRequest = new WebSocketRequest(new ServletRequestCopy(request), wicketFilter.getFilterPath()); this.application = Args.notNull(application, "application"); WebSocketSettings webSocketSettings = WebSocketSettings.Holder.get(application); this.connectionRegistry = webSocketSettings.getConnectionRegistry(); } - private String getFilterPath(WicketFilter wicketFilter) - { - String filterPath; - try - { - filterPath = (String) GET_FILTER_PATH_METHOD.invoke(wicketFilter); - } 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/efce377c/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/efce377c/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 fc878c2..f591c8d 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,13 @@ 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<>(); + Enumeration<String> attributeNames = originalSession.getAttributeNames(); while (attributeNames.hasMoreElements()) { @@ -53,93 +54,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/efce377c/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 e1515e6..bffc301 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 @@ -77,33 +77,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/efce377c/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/efce377c/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(); } })();
