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 2013/02/20 16:35:19 UTC

[2/2] git commit: WICKET-5044: WebSocketRequest should extend from ServletWebRequest to be able to use WebClientInfo when needed

Updated Branches:
  refs/heads/master cf9d262f5 -> e8fca2405


WICKET-5044: WebSocketRequest should extend from ServletWebRequest to be able to use WebClientInfo when needed


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

Branch: refs/heads/master
Commit: e8fca2405be6c2691e0f24dee7ab8fc23b6189cf
Parents: d8ce394
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Feb 20 17:33:20 2013 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Feb 20 17:33:20 2013 +0200

----------------------------------------------------------------------
 .../ws/api/AbstractWebSocketProcessor.java         |   39 +++++++++++++--
 .../wicket/protocol/ws/api/WebSocketRequest.java   |   27 ++++------
 .../ws/util/tester/TestWebSocketProcessor.java     |    3 +-
 .../protocol/ws/util/tester/WebSocketTester.java   |    4 ++
 .../protocol/ws/jetty/JettyWebSocketProcessor.java |    4 +-
 .../ws/jetty9/Jetty9WebSocketProcessor.java        |    4 +-
 .../ws/tomcat7/Tomcat7WebSocketFilter.java         |    4 +-
 .../ws/tomcat7/TomcatWebSocketProcessor.java       |    4 +-
 8 files changed, 59 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/e8fca240/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
index 13818f3..16eeb5b 100644
--- a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
+++ b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.protocol.ws.api;
 
+import java.lang.reflect.Method;
+
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.wicket.Application;
@@ -24,6 +26,8 @@ import org.apache.wicket.Session;
 import org.apache.wicket.ThreadContext;
 import org.apache.wicket.event.Broadcast;
 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.api.event.WebSocketBinaryPayload;
 import org.apache.wicket.protocol.ws.api.event.WebSocketClosedPayload;
@@ -57,10 +61,23 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor
 {
 	private static final Logger LOG = LoggerFactory.getLogger(AbstractWebSocketProcessor.class);
 
+	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 Url baseUrl;
-	private final Application application;
+	private final WebApplication application;
 	private final String sessionId;
 	private final IWebSocketConnectionRegistry connectionRegistry;
 
@@ -72,7 +89,7 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor
 	 * @param application
 	 *      the current Wicket Application
 	 */
-	public AbstractWebSocketProcessor(final HttpServletRequest request, final Application application)
+	public AbstractWebSocketProcessor(final HttpServletRequest request, final WebApplication application)
 	{
 		this.sessionId = request.getSession(true).getId();
 		Session.get().bind();
@@ -85,13 +102,27 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor
 		Checks.notNull(baseUrl, String.format("Request parameter '%s' is required!", WebRequest.PARAM_AJAX_BASE_URL));
 		this.baseUrl = Url.parse(baseUrl);
 
-		this.webRequest = new WebSocketRequest(new ServletRequestCopy(request));
+		WicketFilter wicketFilter = application.getWicketFilter();
+		this.webRequest = new WebSocketRequest(new ServletRequestCopy(request), getFilterPath(wicketFilter));
 
 		this.application = Args.notNull(application, "application");
 		IWebSocketSettings webSocketSettings = IWebSocketSettings.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)
 	{
@@ -224,7 +255,7 @@ public abstract class AbstractWebSocketProcessor implements IWebSocketProcessor
 		}
 	}
 
-	protected final Application getApplication()
+	protected final WebApplication getApplication()
 	{
 		return application;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/e8fca240/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequest.java b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequest.java
index c9ac95b..f7eaf5b 100644
--- a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequest.java
+++ b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequest.java
@@ -26,6 +26,7 @@ import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.wicket.protocol.http.RequestUtils;
+import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.util.lang.Generics;
@@ -38,32 +39,30 @@ import org.apache.wicket.util.time.Time;
  *
  * @since 6.0
  */
-public class WebSocketRequest extends WebRequest
+public class WebSocketRequest extends ServletWebRequest
 {
-	private final HttpServletRequest request;
-
 	/**
 	 * Constructor.
 	 *
 	 * @param req
 	 *      the copy of the HttpServletRequest used for the upgrade of the HTTP protocol
 	 */
-	public WebSocketRequest(HttpServletRequest req)
+	public WebSocketRequest(HttpServletRequest req, String filterPrefix)
 	{
-		this.request = req;
+		super(req, filterPrefix);
 	}
 
 	@Override
 	public List<Cookie> getCookies()
 	{
-		List<Cookie> cookies = Arrays.asList(request.getCookies());
+		List<Cookie> cookies = Arrays.asList(getContainerRequest().getCookies());
 		return cookies;
 	}
 
 	@Override
 	public List<String> getHeaders(String name)
 	{
-		Enumeration<String> headers = request.getHeaders(name);
+		Enumeration<String> headers = getContainerRequest().getHeaders(name);
 		List<String> h = Generics.newArrayList();
 		while (headers.hasMoreElements())
 		{
@@ -76,13 +75,13 @@ public class WebSocketRequest extends WebRequest
 	@Override
 	public String getHeader(String name)
 	{
-		return request.getHeader(name);
+		return getContainerRequest().getHeader(name);
 	}
 
 	@Override
 	public Time getDateHeader(String name)
 	{
-		long dateHeader = request.getDateHeader(name);
+		long dateHeader = getContainerRequest().getDateHeader(name);
 		return Time.millis(dateHeader);
 	}
 
@@ -101,19 +100,13 @@ public class WebSocketRequest extends WebRequest
 	@Override
 	public Locale getLocale()
 	{
-		return request.getLocale();
+		return getContainerRequest().getLocale();
 	}
 
 	@Override
 	public Charset getCharset()
 	{
-		return RequestUtils.getCharset(request);
-	}
-
-	@Override
-	public Object getContainerRequest()
-	{
-		return request;
+		return RequestUtils.getCharset(getContainerRequest());
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/e8fca240/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
index 69ab800..0d79e9e 100644
--- a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
+++ b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
@@ -21,6 +21,7 @@ import javax.servlet.http.HttpSession;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Page;
+import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
 import org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor;
 import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
@@ -43,7 +44,7 @@ abstract class TestWebSocketProcessor extends AbstractWebSocketProcessor
 	 */
 	public TestWebSocketProcessor(final WicketTester wicketTester, final Page page)
 	{
-		super(createRequest(wicketTester, page), page.getApplication());
+		super(createRequest(wicketTester, page), (WebApplication) page.getApplication());
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/e8fca240/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
index 2cd6eeb..761690b 100644
--- a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
+++ b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.protocol.ws.util.tester;
 
 import org.apache.wicket.Page;
+import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.ws.api.IWebSocketProcessor;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.tester.WicketTester;
@@ -43,6 +44,9 @@ public class WebSocketTester
 		Args.notNull(wicketTester, "wicketTester");
 		Args.notNull(page, "page");
 
+		WebApplication webApplication = wicketTester.getApplication();
+		webApplication.getWicketFilter().setFilterPath("");
+
 		socketProcessor = new TestWebSocketProcessor(wicketTester, page) {
 
 			@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/e8fca240/wicket-experimental/wicket-native-websocket/wicket-native-websocket-jetty/src/main/java/org/apache/wicket/protocol/ws/jetty/JettyWebSocketProcessor.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-jetty/src/main/java/org/apache/wicket/protocol/ws/jetty/JettyWebSocketProcessor.java b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-jetty/src/main/java/org/apache/wicket/protocol/ws/jetty/JettyWebSocketProcessor.java
index 3665611..bab53e4 100644
--- a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-jetty/src/main/java/org/apache/wicket/protocol/ws/jetty/JettyWebSocketProcessor.java
+++ b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-jetty/src/main/java/org/apache/wicket/protocol/ws/jetty/JettyWebSocketProcessor.java
@@ -18,7 +18,7 @@ package org.apache.wicket.protocol.ws.jetty;
 
 import javax.servlet.http.HttpServletRequest;
 
-import org.apache.wicket.Application;
+import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor;
 import org.eclipse.jetty.websocket.WebSocket;
 
@@ -65,7 +65,7 @@ public class JettyWebSocketProcessor extends AbstractWebSocketProcessor
 	 * @param application
 	 *      the current Wicket Application
 	 */
-	public JettyWebSocketProcessor(final HttpServletRequest request, final Application application)
+	public JettyWebSocketProcessor(final HttpServletRequest request, final WebApplication application)
 	{
 		super(request, application);
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/e8fca240/wicket-experimental/wicket-native-websocket/wicket-native-websocket-jetty9/src/main/java/org/apache/wicket/protocol/ws/jetty9/Jetty9WebSocketProcessor.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-jetty9/src/main/java/org/apache/wicket/protocol/ws/jetty9/Jetty9WebSocketProcessor.java b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-jetty9/src/main/java/org/apache/wicket/protocol/ws/jetty9/Jetty9WebSocketProcessor.java
index fbb7625..9f0f53f 100644
--- a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-jetty9/src/main/java/org/apache/wicket/protocol/ws/jetty9/Jetty9WebSocketProcessor.java
+++ b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-jetty9/src/main/java/org/apache/wicket/protocol/ws/jetty9/Jetty9WebSocketProcessor.java
@@ -19,7 +19,7 @@ package org.apache.wicket.protocol.ws.jetty9;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
 
-import org.apache.wicket.Application;
+import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor;
 import org.eclipse.jetty.websocket.core.annotations.WebSocket;
 import org.eclipse.jetty.websocket.core.api.UpgradeRequest;
@@ -53,7 +53,7 @@ public class Jetty9WebSocketProcessor extends AbstractWebSocketProcessor
 	 *            the current Wicket Application
 	 */
 	public Jetty9WebSocketProcessor(final UpgradeRequest upgradeRequest,
-		final UpgradeResponse upgradeResponse, final Application application)
+		final UpgradeResponse upgradeResponse, final WebApplication application)
 	{
 		super((HttpServletRequest)((HttpServletRequestWrapper)upgradeRequest).getRequest(),
 			application);

http://git-wip-us.apache.org/repos/asf/wicket/blob/e8fca240/wicket-experimental/wicket-native-websocket/wicket-native-websocket-tomcat/src/main/java/org/apache/wicket/protocol/ws/tomcat7/Tomcat7WebSocketFilter.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-tomcat/src/main/java/org/apache/wicket/protocol/ws/tomcat7/Tomcat7WebSocketFilter.java b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-tomcat/src/main/java/org/apache/wicket/protocol/ws/tomcat7/Tomcat7WebSocketFilter.java
index fbb4d0b..6d88d91 100644
--- a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-tomcat/src/main/java/org/apache/wicket/protocol/ws/tomcat7/Tomcat7WebSocketFilter.java
+++ b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-tomcat/src/main/java/org/apache/wicket/protocol/ws/tomcat7/Tomcat7WebSocketFilter.java
@@ -28,7 +28,7 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.catalina.connector.RequestFacade;
 import org.apache.catalina.util.Base64;
 import org.apache.tomcat.util.buf.B2CConverter;
-import org.apache.wicket.Application;
+import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.ws.AbstractUpgradeFilter;
 
 /**
@@ -71,7 +71,7 @@ public class Tomcat7WebSocketFilter extends AbstractUpgradeFilter
 		String key = req.getHeader("Sec-WebSocket-Key");
 		resp.setHeader("Sec-WebSocket-Accept", getWebSocketAccept(key));
 
-		Application application = getApplication();
+		WebApplication application = getApplication();
 		// Small hack until the Servlet API provides a way to do this.
 		TomcatWebSocketProcessor webSocketHandler = new TomcatWebSocketProcessor(req, application);
 		TomcatWebSocketProcessor.TomcatWebSocket tomcatWebSocket = webSocketHandler.new TomcatWebSocket();

http://git-wip-us.apache.org/repos/asf/wicket/blob/e8fca240/wicket-experimental/wicket-native-websocket/wicket-native-websocket-tomcat/src/main/java/org/apache/wicket/protocol/ws/tomcat7/TomcatWebSocketProcessor.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-tomcat/src/main/java/org/apache/wicket/protocol/ws/tomcat7/TomcatWebSocketProcessor.java b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-tomcat/src/main/java/org/apache/wicket/protocol/ws/tomcat7/TomcatWebSocketProcessor.java
index 694b46d..b89a608 100644
--- a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-tomcat/src/main/java/org/apache/wicket/protocol/ws/tomcat7/TomcatWebSocketProcessor.java
+++ b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-tomcat/src/main/java/org/apache/wicket/protocol/ws/tomcat7/TomcatWebSocketProcessor.java
@@ -24,7 +24,7 @@ import javax.servlet.http.HttpServletRequest;
 
 import org.apache.catalina.websocket.MessageInbound;
 import org.apache.catalina.websocket.WsOutbound;
-import org.apache.wicket.Application;
+import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor;
 
 /**
@@ -64,7 +64,7 @@ public class TomcatWebSocketProcessor extends AbstractWebSocketProcessor
 			TomcatWebSocketProcessor.this.onClose(status, "Connection closed by client");
 		}
 	}
-	public TomcatWebSocketProcessor(final HttpServletRequest request, final Application application)
+	public TomcatWebSocketProcessor(final HttpServletRequest request, final WebApplication application)
 	{
 		super(request, application);
 	}