diff --git a/src/main/java/com/github/dockerjava/api/command/EventCallback.java b/src/main/java/com/github/dockerjava/api/command/EventCallback.java index 009cc5998..45ac34dc8 100644 --- a/src/main/java/com/github/dockerjava/api/command/EventCallback.java +++ b/src/main/java/com/github/dockerjava/api/command/EventCallback.java @@ -7,4 +7,6 @@ */ public interface EventCallback { public void onEvent(Event event); + public void onException(Throwable throwable); + public void onCompletion(int numEvents); } diff --git a/src/main/java/com/github/dockerjava/api/model/EventNotifier.java b/src/main/java/com/github/dockerjava/api/model/EventNotifier.java index 39d42931e..18363617b 100644 --- a/src/main/java/com/github/dockerjava/api/model/EventNotifier.java +++ b/src/main/java/com/github/dockerjava/api/model/EventNotifier.java @@ -35,18 +35,26 @@ public static EventNotifier create(EventCallback eventCallback, WebTarget webTar @Override public Void call() throws Exception { - Response response = webTarget.request().get(Response.class); - InputStream inputStream = response.readEntity(InputStream.class); + int numEvents=0; + Response response = null; try { + response = webTarget.request().get(Response.class); + InputStream inputStream = response.readEntity(InputStream.class); JsonParser jp = JSON_FACTORY.createParser(inputStream); while (jp.nextToken() != JsonToken.END_OBJECT && !jp.isClosed()) { eventCallback.onEvent(OBJECT_MAPPER.readValue(jp, Event.class)); + numEvents++; } - } finally { + } + catch(Exception e) { + eventCallback.onException(e); + } + finally { if (response != null) { response.close(); } } + eventCallback.onCompletion(numEvents); return null; } } diff --git a/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java index 82bc7ffee..f75f7ed78 100644 --- a/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java @@ -110,5 +110,15 @@ public void onEvent(Event event) { LOG.info("Received event #{}: {}", countDownLatch.getCount(), event); countDownLatch.countDown(); } + + @Override + public void onException(Throwable throwable) { + LOG.error("Error occurred: {}", throwable.getMessage()); + } + + @Override + public void onCompletion(int numEvents) { + LOG.info("Number of events received: {}", numEvents); + } } }