Author: ivaynberg
Date: Sat Feb  9 12:48:51 2008
New Revision: 620196

URL: http://svn.apache.org/viewvc?rev=620196&view=rev
Log:
WICKET-1278 Uncaught checked exceptions in page constructor

Modified:
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/session/DefaultPageFactoryTest.java

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/session/DefaultPageFactory.java?rev=620196&r1=620195&r2=620196&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/session/DefaultPageFactory.java
 Sat Feb  9 12:48:51 2008
@@ -53,9 +53,9 @@
                {
                        // throw an exception in case default constructor is 
missing
                        // => improved error message
-                       pageClass.getConstructor((Class[])null);
+                       final Constructor constructor = 
pageClass.getConstructor((Class[]) null);
 
-                       return (Page)pageClass.newInstance();
+                       return newPage(constructor, null);
                }
                catch (NoSuchMethodException e)
                {
@@ -71,14 +71,6 @@
                                                ". Class does not have a 
default contructor", e);
                        }
                }
-               catch (InstantiationException e)
-               {
-                       throw new WicketRuntimeException("Unable to create page 
from " + pageClass, e);
-               }
-               catch (IllegalAccessException e)
-               {
-                       throw new WicketRuntimeException("Unable to create page 
from " + pageClass, e);
-               }
        }
 
        /**
@@ -141,7 +133,7 @@
         * @param constructor
         *            The constructor to invoke
         * @param argument
-        *            The argument to pass to the constructor
+        *            The argument to pass to the constructor or null to pass 
no arguments
         * @return The new page
         * @throws WicketRuntimeException
         *             Thrown if the Page cannot be instantiated using the 
given constructor and
@@ -151,17 +143,18 @@
        {
                try
                {
-                       return (Page)constructor.newInstance(new Object[] { 
argument });
+                       if (argument != null)
+                               return (Page)constructor.newInstance(new 
Object[] { argument });
+                       else
+                               return (Page)constructor.newInstance(new 
Object[] {});
                }
                catch (InstantiationException e)
                {
-                       throw new WicketRuntimeException("Can't instantiate 
page using constructor " +
-                                       constructor + " and argument " + 
argument, e);
+                       throw new 
WicketRuntimeException(createDescription(constructor, argument), e);
                }
                catch (IllegalAccessException e)
                {
-                       throw new WicketRuntimeException("Can't instantiate 
page using constructor " +
-                                       constructor + " and argument " + 
argument, e);
+                       throw new 
WicketRuntimeException(createDescription(constructor, argument), e);
                }
                catch (InvocationTargetException e)
                {
@@ -172,8 +165,16 @@
                        {
                                throw (RuntimeException)e.getTargetException();
                        }
-                       throw new WicketRuntimeException("Can't instantiate 
page using constructor " +
-                                       constructor + " and argument " + 
argument, e);
+                       throw new 
WicketRuntimeException(createDescription(constructor, argument), e);
                }
+       }
+
+       private String createDescription(Constructor constructor, Object 
argument)
+       {
+               if (argument != null)
+                       return "Can't instantiate page using constructor " + 
constructor + " and argument " +
+                                       argument;
+               else
+                       return "Can't instantiate page using constructor " + 
constructor;
        }
 }

Modified: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/session/DefaultPageFactoryTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/session/DefaultPageFactoryTest.java?rev=620196&r1=620195&r2=620196&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/session/DefaultPageFactoryTest.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/session/DefaultPageFactoryTest.java
 Sat Feb  9 12:48:51 2008
@@ -20,6 +20,7 @@
 import org.apache.wicket.IPageFactory;
 import org.apache.wicket.Page;
 import org.apache.wicket.PageParameters;
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.WicketTestCase;
 
 
@@ -124,6 +125,19 @@
 
        }
 
+       public static class PageThrowingCheckedException extends Page
+       {
+               private static final long serialVersionUID = 1L;
+
+               public static final Exception EXCEPTION = new Exception("a 
checked exception");
+
+               public PageThrowingCheckedException() throws Exception
+               {
+                       throw EXCEPTION;
+               }
+       }
+
+
        final private IPageFactory pageFactory = new DefaultPageFactory();
 
        /**
@@ -191,6 +205,22 @@
                catch (AbstractRestartResponseException e)
                {
                        // noop
+               }
+
+               try
+               {
+                       pageFactory.newPage(PageThrowingCheckedException.class);
+                       fail();
+               }
+               catch (WicketRuntimeException e)
+               {
+                       assertNotNull(e.getCause());
+                       assertNotNull(e.getCause().getCause());
+                       assertEquals(PageThrowingCheckedException.EXCEPTION, 
e.getCause().getCause());
+               }
+               catch (Exception e)
+               {
+                       fail();
                }
        }
 }


Reply via email to