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 2014/02/06 11:36:40 UTC

[2/2] git commit: WICKET-5500 Ignore the path parameters when reading the page class

WICKET-5500 Ignore the path parameters when reading the page class

(cherry picked from commit 28e1b0fe4c297633453c92a0fd36bbac77a93784)


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

Branch: refs/heads/master
Commit: 825da3055e9792ae5b4b0e86f47a6b08c9e7ce0e
Parents: 0c1cf1a
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Feb 6 11:24:20 2014 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu Feb 6 11:36:14 2014 +0100

----------------------------------------------------------------------
 .../request/mapper/AbstractComponentMapper.java | 23 ++++++++++++++++++--
 .../core/request/mapper/PackageMapper.java      |  3 ++-
 .../request/mapper/BookmarkableMapperTest.java  | 16 ++++++++++++++
 .../core/request/mapper/PackageMapperTest.java  | 15 +++++++++++++
 4 files changed, 54 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/825da305/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
index b1480ee..efd77c6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
@@ -130,9 +130,28 @@ public abstract class AbstractComponentMapper extends AbstractMapper implements
 	 */
 	protected Class<? extends IRequestablePage> getPageClass(String name)
 	{
-		Args.notEmpty(name, "name");
+		String cleanedClassName = cleanClassName(name);
+		return WicketObjects.resolveClass(cleanedClassName);
+	}
+
+	/**
+	 * Cleans the class name from any extra information that may be there.
+	 *
+	 * @param className
+	 *              The raw class name parsed from the url
+	 * @return The cleaned class name
+	 */
+	protected String cleanClassName(String className)
+	{
+		Args.notEmpty(className, "className");
+
+		if (Strings.indexOf(className, ';') > -1)
+		{
+			// remove any path parameters set manually by the user. WICKET-5500
+			className = Strings.beforeFirst(className, ';');
+		}
 
-		return WicketObjects.resolveClass(name);
+		return className;
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/825da305/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
index 41c6696..ad15d6d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
@@ -139,7 +139,8 @@ public class PackageMapper extends AbstractBookmarkableMapper
 			PageComponentInfo info = getPageComponentInfo(url);
 
 			// load the page class
-			String className = url.getSegments().get(mountSegments.length);
+			String name = url.getSegments().get(mountSegments.length);
+			String className = cleanClassName(name);
 
 			if (isValidClassName(className) == false)
 			{

http://git-wip-us.apache.org/repos/asf/wicket/blob/825da305/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
index c8c2a0f..910c821 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
@@ -77,6 +77,22 @@ public class BookmarkableMapperTest extends AbstractMapperTest
 	}
 
 	/**
+	 * https://issues.apache.org/jira/browse/WICKET-5500
+	 */
+	@Test
+	public void decodePageClassWithPathParameters()
+	{
+		Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME + ";something=else");
+		IRequestHandler handler = encoder.mapRequest(getRequest(url));
+
+		assertTrue(handler instanceof RenderPageRequestHandler);
+		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
+		assertEquals(PAGE_CLASS_NAME, page.getClass().getName());
+		assertEquals(0, page.getPageParameters().getIndexedCount());
+		assertTrue(page.getPageParameters().getNamedKeys().isEmpty());
+	}
+
+	/**
 	 *
 	 */
 	@Test

http://git-wip-us.apache.org/repos/asf/wicket/blob/825da305/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
index e469b10..0666061 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java
@@ -143,6 +143,21 @@ public class PackageMapperTest extends AbstractMapperTest
 		assertEquals(0, page.getPageParameters().getIndexedCount());
 		assertTrue(page.getPageParameters().getNamedKeys().isEmpty());
 	}
+	/**
+	 * https://issues.apache.org/jira/browse/WICKET-5500
+	 */
+	@Test
+	public void decodePageClassWithPathParameters()
+	{
+		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + ";something=else");
+		IRequestHandler handler = encoder.mapRequest(getRequest(url));
+
+		assertTrue(handler instanceof RenderPageRequestHandler);
+		IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
+		assertEquals(PAGE_CLASS_NAME, page.getClass().getSimpleName());
+		assertEquals(0, page.getPageParameters().getIndexedCount());
+		assertTrue(page.getPageParameters().getNamedKeys().isEmpty());
+	}
 
 	/**
 	 *