improve exception handling of ThrowingEventBus

This commit is contained in:
Sebastian Sdorra
2013-05-15 09:26:29 +02:00
parent 426175c793
commit de1dd3420c
2 changed files with 49 additions and 2 deletions

View File

@@ -30,10 +30,16 @@
*/
package com.google.common.eventbus;
//~--- non-JDK imports --------------------------------------------------------
import com.google.common.base.Throwables;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.event.EventBusException;
//~--- JDK imports ------------------------------------------------------------
@@ -48,6 +54,14 @@ import java.lang.reflect.InvocationTargetException;
public class ThrowingEventBus extends EventBus
{
/**
* the logger for ThrowingEventBus
*/
private static final Logger logger =
LoggerFactory.getLogger(ThrowingEventBus.class);
//~--- methods --------------------------------------------------------------
/**
* {@inheritDoc}
*
@@ -64,8 +78,13 @@ public class ThrowingEventBus extends EventBus
}
catch (InvocationTargetException ex)
{
Throwable cause = ex.getCause();
Throwables.propagateIfPossible(cause);
logger.trace("could not propagate exception, throw as EventBusException");
throw new EventBusException(
"could not handle event ".concat(event.toString()), ex);
"could not handle event ".concat(event.toString()), cause);
}
}
}

View File

@@ -30,6 +30,7 @@
*/
package sonia.scm.event;
//~--- non-JDK imports --------------------------------------------------------
@@ -49,6 +50,10 @@ import sonia.scm.user.UserEvent;
import static org.junit.Assert.*;
//~--- JDK imports ------------------------------------------------------------
import java.io.IOException;
/**
*
* @author Sebastian Sdorra
@@ -133,7 +138,30 @@ public class GuavaScmEventBusTest extends AbstractTestBase
*
*/
@Test(expected = EventBusException.class)
public void testSyncPostWithException()
public void testSyncPostWithCheckedException()
{
GuavaScmEventBus eventBus = new GuavaScmEventBus();
eventBus.register(new Object()
{
@Subscribe
public void handleEvent(Object event) throws IOException
{
throw new IOException("could not handle event");
}
}, false);
eventBus.post(new Object());
}
/**
* Method description
*
*/
@Test(expected = RuntimeException.class)
public void testSyncPostWithRuntimeException()
{
GuavaScmEventBus eventBus = new GuavaScmEventBus();