You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by da...@apache.org on 2011/04/27 15:03:02 UTC
svn commit: r1097103 - in /wicket/trunk/wicket-core/src:
main/java/org/apache/wicket/request/cycle/
test/java/org/apache/wicket/request/cycle/
Author: dashorst
Date: Wed Apr 27 13:03:01 2011
New Revision: 1097103
URL: http://svn.apache.org/viewvc?rev=1097103&view=rev
Log:
Improved exception handling strategy to not fail when multiple handlers are returned: just use the first one that is available.
Issue: WICKET-3644
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycleListenerCollection.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/BaseRequestHandlerStackTest.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestHandlerStackTest.java
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycleListenerCollection.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycleListenerCollection.java?rev=1097103&r1=1097102&r2=1097103&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycleListenerCollection.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycleListenerCollection.java Wed Apr 27 13:03:01 2011
@@ -19,14 +19,13 @@ package org.apache.wicket.request.cycle;
import java.util.ArrayList;
import java.util.List;
-import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.util.listener.ListenerCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- *
+ * Special, Wicket internal composite {@link IRequestCycleListener} that
*/
public class RequestCycleListenerCollection extends ListenerCollection<IRequestCycleListener>
implements
@@ -57,6 +56,13 @@ public class RequestCycleListenerCollect
});
}
+ /**
+ * Notifies all registered listeners of the exception and calls the first handler that was
+ * returned by the listeners.
+ *
+ * @see org.apache.wicket.request.cycle.IRequestCycleListener#onException(org.apache.wicket.request.cycle.RequestCycle,
+ * java.lang.Exception)
+ */
public IRequestHandler onException(final RequestCycle cycle, final Exception ex)
{
final List<IRequestHandler> handlers = new ArrayList<IRequestHandler>();
@@ -77,14 +83,12 @@ public class RequestCycleListenerCollect
{
return null;
}
-
if (handlers.size() > 1)
{
- throw new WicketRuntimeException(
- "More than one request cycle listener returned a request handler while handling the exception.",
- ex);
+ logger.debug(
+ "{} exception handlers available for exception {}, using the first handler",
+ handlers.size(), ex);
}
-
return handlers.get(0);
}
Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/BaseRequestHandlerStackTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/BaseRequestHandlerStackTest.java?rev=1097103&r1=1097102&r2=1097103&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/BaseRequestHandlerStackTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/BaseRequestHandlerStackTest.java Wed Apr 27 13:03:01 2011
@@ -16,8 +16,6 @@
*/
package org.apache.wicket.request.cycle;
-import junit.framework.TestCase;
-
import org.apache.wicket.request.IRequestCycle;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.Request;
@@ -28,7 +26,7 @@ import org.apache.wicket.request.UrlRend
/**
* @author Jeremy Thomerson
*/
-public abstract class BaseRequestHandlerStackTest extends TestCase
+public abstract class BaseRequestHandlerStackTest
{
protected Response newResponse()
{
@@ -126,5 +124,4 @@ public abstract class BaseRequestHandler
};
}
-
}
Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java?rev=1097103&r1=1097102&r2=1097103&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java Wed Apr 27 13:03:01 2011
@@ -16,9 +16,11 @@
*/
package org.apache.wicket.request.cycle;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
import org.apache.wicket.Application;
import org.apache.wicket.ThreadContext;
-import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.mock.MockWebRequest;
import org.apache.wicket.protocol.http.mock.MockServletContext;
import org.apache.wicket.request.IExceptionMapper;
@@ -29,13 +31,15 @@ import org.apache.wicket.request.Request
import org.apache.wicket.request.Response;
import org.apache.wicket.request.Url;
import org.apache.wicket.resource.DummyApplication;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
/**
* @author Jeremy Thomerson
*/
public class RequestCycleListenerTest extends BaseRequestHandlerStackTest
{
-
private IRequestHandler handler;
private int errorCode;
@@ -46,11 +50,10 @@ public class RequestCycleListenerTest ex
private int exceptionsMapped;
- @Override
- protected void setUp() throws Exception
+ /** */
+ @Before
+ public void setUp()
{
- super.setUp();
-
DummyApplication application = new DummyApplication();
application.setName("dummyTestApplication");
ThreadContext.setApplication(application);
@@ -59,10 +62,10 @@ public class RequestCycleListenerTest ex
errorCode = 0;
}
- @Override
- protected void tearDown() throws Exception
+ /** */
+ @After
+ public void tearDown()
{
- super.tearDown();
ThreadContext.getApplication().internalDestroy();
ThreadContext.detach();
}
@@ -129,7 +132,8 @@ public class RequestCycleListenerTest ex
/**
* @throws Exception
*/
- public void testBasicOperations() throws Exception
+ @Test
+ public void basicOperations() throws Exception
{
IncrementingListener incrementingListener = new IncrementingListener();
Application.get().getRequestCycleListeners().add(incrementingListener);
@@ -183,10 +187,9 @@ public class RequestCycleListenerTest ex
assertValues(1, 2, 3);
}
- /**
- * @throws Exception
- */
- public void testExceptionRequestHandlers() throws Exception
+ /** */
+ @Test
+ public void exceptionIsHandledByRegisteredHandler()
{
IncrementingListener incrementingListener = new IncrementingListener();
Application.get().getRequestCycleListeners().add(incrementingListener);
@@ -198,29 +201,28 @@ public class RequestCycleListenerTest ex
assertEquals(401, errorCode);
assertEquals(1, incrementingListener.exceptionResolutions);
assertEquals(0, incrementingListener.schedules);
+ }
- // two listeners that return a request handler should cause an exception
+ /** */
+ @Test
+ public void exceptionIsHandledByFirstAvailableHandler()
+ {
+ // when two listeners return a handler
Application.get().getRequestCycleListeners().add(new ErrorCodeListener(401));
- cycle = newRequestCycle(true);
- try
- {
- cycle.processRequestAndDetach();
- fail("expected an exception because two request cycle listeners returned a request handler");
- }
- catch (WicketRuntimeException e)
- {
- /*
- * expected, the second handler was resolved but thrown an exception handling the
- * request
- */
- assertEquals(2, incrementingListener.resolutions);
- }
+ Application.get().getRequestCycleListeners().add(new ErrorCodeListener(402));
+
+ RequestCycle cycle = newRequestCycle(true);
+ cycle.processRequestAndDetach();
+
+ // the first handler returned is used to handle the exception
+ assertEquals(401, errorCode);
}
/**
* @throws Exception
*/
- public void testExceptionHandingInOnDetach() throws Exception
+ @Test
+ public void exceptionHandingInOnDetach() throws Exception
{
// this test is a little flaky because it depends on the ordering of listeners which is not
// guaranteed
@@ -278,7 +280,6 @@ public class RequestCycleListenerTest ex
}
}
-
private class IncrementingListener implements IRequestCycleListener
{
@@ -330,6 +331,4 @@ public class RequestCycleListenerTest ex
assertEquals(detachesnotified, this.detachesnotified);
}
}
-
-
}
Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestHandlerStackTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestHandlerStackTest.java?rev=1097103&r1=1097102&r2=1097103&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestHandlerStackTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestHandlerStackTest.java Wed Apr 27 13:03:01 2011
@@ -16,25 +16,21 @@
*/
package org.apache.wicket.request.cycle;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
import org.apache.wicket.request.IRequestCycle;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.RequestHandlerStack;
import org.apache.wicket.request.Response;
+import org.junit.Test;
/**
- *
* @author Matej Knopp
*/
public class RequestHandlerStackTest extends BaseRequestHandlerStackTest
{
-
- /**
- * Construct.
- */
- public RequestHandlerStackTest()
- {
- }
-
private boolean testFlag1;
private boolean testFlag2;
private boolean testFlag3;
@@ -58,9 +54,8 @@ public class RequestHandlerStackTest ext
detachedFlag4 = false;
}
- /**
- *
- */
+ /** */
+ @Test
public void test1()
{
initFlags();
@@ -136,9 +131,8 @@ public class RequestHandlerStackTest ext
assertTrue(detachedFlag3);
}
- /**
- *
- */
+ /** */
+ @Test
public void test2()
{
initFlags();
@@ -234,9 +228,8 @@ public class RequestHandlerStackTest ext
assertTrue(detachedFlag4);
}
- /**
- *
- */
+ /** */
+ @Test
public void test3()
{
initFlags();