@Override
public void invoke(final Object event) {
try {
method.invoke(observer, event);
} catch (final InvocationTargetException e) {
if (!seen.get().add(this)) {
return;
}
final Throwable t = e.getTargetException() == null ? e : e.getTargetException();
if (!(event instanceof ObserverFailed)) {
doFire(new ObserverFailed(observer, method, event, t));
}
if (t instanceof InvocationTargetException && t.getCause() != null) {
ObserverManager.logger().log(Level.SEVERE, "error invoking " + observer, t.getCause());
} else {
ObserverManager.logger().log(Level.SEVERE, "error invoking " + observer, t);
}
} catch (final IllegalAccessException e) {
ObserverManager.logger().log(Level.SEVERE, method + " can't be invoked, check it is public");
}
}