Author: mgrigorov
Date: Sun Aug 15 18:14:09 2010
New Revision: 985727

URL: http://svn.apache.org/viewvc?rev=985727&view=rev
Log:
WICKET-2993 ClassCastException when requesting for non-page class

Create a request handler only if the resolved class is assignable to Page.class


Modified:
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java?rev=985727&r1=985726&r2=985727&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/mapper/BookmarkableMapper.java
 Sun Aug 15 18:14:09 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.request.mapper;
 
+import org.apache.wicket.Page;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.component.IRequestablePage;
@@ -102,10 +103,15 @@ public class BookmarkableMapper extends 
                        String className = url.getSegments().get(2);
                        Class<? extends IRequestablePage> pageClass = 
getPageClass(className);
 
-                       // extract the PageParameters from URL if there are any
-                       PageParameters pageParameters = 
extractPageParameters(request, 3, pageParametersEncoder);
+                       if (Page.class.isAssignableFrom(pageClass))
+                       {
 
-                       return new UrlInfo(info, pageClass, pageParameters);
+                               // extract the PageParameters from URL if there 
are any
+                               PageParameters pageParameters = 
extractPageParameters(request, 3,
+                                       pageParametersEncoder);
+
+                               return new UrlInfo(info, pageClass, 
pageParameters);
+                       }
                }
                return null;
        }

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java?rev=985727&r1=985726&r2=985727&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/BookmarkableMapperTest.java
 Sun Aug 15 18:14:09 2010
@@ -30,9 +30,6 @@ import org.apache.wicket.request.handler
 import org.apache.wicket.request.handler.PageAndComponentProvider;
 import org.apache.wicket.request.handler.PageProvider;
 import org.apache.wicket.request.handler.RenderPageRequestHandler;
-import org.apache.wicket.request.mapper.BookmarkableMapper;
-import org.apache.wicket.request.mapper.IMapperContext;
-import org.apache.wicket.request.mapper.StalePageException;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 /**
@@ -244,6 +241,18 @@ public class BookmarkableMapperTest exte
        }
 
        /**
+        * WICKET-2993
+        */
+       public void testDecode10()
+       {
+               // use String.class but any other non-Page will do the job as 
well
+               Url url = Url.parse("wicket/bookmarkable/" + 
String.class.getName());
+
+               IRequestHandler handler = encoder.mapRequest(getRequest(url));
+               assertNull("A non-page class should not create a request 
handler!", handler);
+       }
+
+       /**
         * 
         */
        public void testEncode1()


Reply via email to