3
Google Guava EventBusは例外を取り除き、ログに記録します。Google Guavaで例外を起動するEventBus
私は私のアプローチを説明するために非常に単純なアプリケーションを書いた:
public class SimplePrinterEvent {
@Subscribe
public void doPrint(String s) {
int a = 2/0; //This is to fire an exception
System.out.println("printing : " + s);
}
}
デモ
public class SimplePrinterEventDemo {
public static void main(String[] args) {
EventBus eventBus = new EventBus();
eventBus.register(new SimplePrinterEvent());
try{
eventBus.post("This is going to print");
}
catch(Exception e){
System.out.println("Error Occured!");
}
}
}
これはcatchブロックに来ることはありません!
私はSubscriberExceptionHandlerを追加し、handleException()をオーバーライドしました。
EventBus eventBus = new EventBus(new SubscriberExceptionHandler() {
@Override
public void handleException(Throwable exception,
SubscriberExceptionContext context) {
System.out.println("Handling Error..yes I can do something here..");
throw new RuntimeException(exception);
}
});
ハンドラ内で例外を処理することができますが、私の要件は、例外をハンドリングするトップレイヤーに持ち込むことです。
EDIT:古いソリューション私はいくつかのウェブサイトに見つかりました。トリックに続き
public class CustomEventBus extends EventBus {
@Override
void dispatch(Object event, EventSubscriber wrapper) {
try {
wrapper.handleEvent(event);
} catch (InvocationTargetException cause) {
Throwables.propagate(Throwables.getRootCause(cause));
}
}
}
の両方が含まれてレベル18のために、以下のアプローチだけで動作しますが、あなたは、パッケージcom.google.common.eventbusにクラスCustomEventBusを置けば(EventSubscriberはパッケージPRIVAですte)。 –