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();
}
}
}