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