public void onFailure(Throwable error) { try { boolean errorHandled = false; for (CommandCallback<?> callback : deferred.getCallbacks()) { if (callback instanceof CommunicationExceptionCallback) { try { ((CommunicationExceptionCallback) callback).onCommunicationException(error); } catch (Throwable t) { Log.logError("Command failed on error callback", t); } errorHandled = true; } } if (!errorHandled && deferred.isLogCommunicationExceptions()) { onCommunicationException(error); } } catch (Throwable t) { if (deferred.isLogCommunicationExceptions()) { Log.logError("Command failed on error callback", t); } } finally { decrementDispatched(); deferreds.remove(deferred); } }