Author: jdonnerstag Date: Thu Jun 23 11:55:41 2011 New Revision: 1138840 URL: http://svn.apache.org/viewvc?rev=1138840&view=rev Log: fixed: DefaultPageFactory Exception Message Improvement Issue: WICKET-3830
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java?rev=1138840&r1=1138839&r2=1138840&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java (original) +++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/session/DefaultPageFactory.java Thu Jun 23 11:55:41 2011 @@ -29,6 +29,8 @@ import org.apache.wicket.request.Request import org.apache.wicket.request.component.IRequestablePage; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.lang.Generics; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -42,19 +44,19 @@ import org.apache.wicket.util.lang.Gener */ public final class DefaultPageFactory implements IPageFactory { + /** Log for reporting. */ + private static final Logger log = LoggerFactory.getLogger(DefaultPageFactory.class); + /** Map of Constructors for Page subclasses */ private final Map<Class<?>, Constructor<?>> constructorForClass = Generics.newConcurrentHashMap(); - /** - * @see IPageFactory#newPage(Class) - */ public final <C extends IRequestablePage> Page newPage(final Class<C> pageClass) { try { // throw an exception in case default constructor is missing // => improved error message - final Constructor<? extends IRequestablePage> constructor = pageClass.getConstructor((Class[])null); + Constructor<? extends IRequestablePage> constructor = pageClass.getConstructor((Class[])null); return processPage(newPage(constructor, null), null); } @@ -70,14 +72,11 @@ public final class DefaultPageFactory im else { throw new WicketRuntimeException("Unable to create page from " + pageClass + - ". Class does not have a default contructor", e); + ". Class does not have a visible default contructor.", e); } } } - /** - * @see IPageFactory#newPage(Class, PageParameters) - */ public final <C extends IRequestablePage> Page newPage(final Class<C> pageClass, final PageParameters parameters) { @@ -123,9 +122,22 @@ public final class DefaultPageFactory im // Store it in the cache constructorForClass.put(pageClass, constructor); + + if (log.isDebugEnabled()) + { + log.debug("Found constructor for Page of type '{}' and argument of type '{}'.", + pageClass, argumentType); + } } catch (NoSuchMethodException e) { + if (log.isDebugEnabled()) + { + log.debug( + "Page of type '{}' has not visible constructor with an argument of type '{}'.", + pageClass, argumentType); + } + return null; } } @@ -150,9 +162,13 @@ public final class DefaultPageFactory im try { if (argument != null) + { return (Page)constructor.newInstance(argument); + } else + { return (Page)constructor.newInstance(); + } } catch (InstantiationException e) { @@ -174,11 +190,11 @@ public final class DefaultPageFactory im } } - private Page processPage(Page page, PageParameters pageParameters) + private Page processPage(final Page page, final PageParameters pageParameters) { // the page might have not propagate page parameters from constructor. if that's the case // we force the parameters - if (pageParameters != null && page.getPageParameters() != pageParameters) + if ((pageParameters != null) && (page.getPageParameters() != pageParameters)) { page.getPageParameters().overwriteWith(pageParameters); } @@ -188,12 +204,19 @@ public final class DefaultPageFactory im return page; } - private String createDescription(Constructor<?> constructor, Object argument) + private String createDescription(final Constructor<?> constructor, final Object argument) { + String msg; if (argument != null) - return "Can't instantiate page using constructor " + constructor + " and argument " + + { + msg = "Can't instantiate page using constructor '" + constructor + "' and argument '" + argument; + } else - return "Can't instantiate page using constructor " + constructor; + { + msg = "Can't instantiate page using constructor '" + constructor; + } + + return msg + "'. Might be it doesn't exist, may be it is not visible (public)."; } } \ No newline at end of file