Updated Branches:
  refs/heads/wicket-6.x 7cc191318 -> 28e1b0fe4

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


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

Branch: refs/heads/wicket-6.x
Commit: 28e1b0fe4c297633453c92a0fd36bbac77a93784
Parents: 8299990
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:25:03 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/28e1b0fe/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/28e1b0fe/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 63e5914..b8a29ff 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
@@ -136,7 +136,8 @@ public class PackageMapper extends 
AbstractBookmarkableMapper
                        PageComponentInfo info = getPageComponentInfo(url);
 
                        // load the page class
-                       String className = url.getSegments().get(0);
+                       String name = url.getSegments().get(0);
+                       String className = cleanClassName(name);
 
                        if (isValidClassName(className) == false)
                        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/28e1b0fe/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 07850a3..9138bfa 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/28e1b0fe/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 b08b112..15f339d 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
@@ -115,6 +115,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(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());
+       }
 
        /**
         *

Reply via email to