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 <[email protected]> Authored: Thu Feb 6 11:24:20 2014 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> 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()); + } /** *
