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