diff --git a/clients/java/signalr/src/main/java/com/microsoft/signalr/DefaultHttpClient.java b/clients/java/signalr/src/main/java/com/microsoft/signalr/DefaultHttpClient.java index 45dc7efb00..d8eee27c87 100644 --- a/clients/java/signalr/src/main/java/com/microsoft/signalr/DefaultHttpClient.java +++ b/clients/java/signalr/src/main/java/com/microsoft/signalr/DefaultHttpClient.java @@ -110,7 +110,11 @@ final class DefaultHttpClient extends HttpClient { client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { - responseSubject.onError(e.getCause()); + Throwable cause = e.getCause(); + if (cause == null) { + cause = e; + } + responseSubject.onError(cause); } @Override diff --git a/clients/java/signalr/src/main/java/com/microsoft/signalr/HubConnection.java b/clients/java/signalr/src/main/java/com/microsoft/signalr/HubConnection.java index d9257f6093..7c29721fc6 100644 --- a/clients/java/signalr/src/main/java/com/microsoft/signalr/HubConnection.java +++ b/clients/java/signalr/src/main/java/com/microsoft/signalr/HubConnection.java @@ -4,6 +4,7 @@ package com.microsoft.signalr; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -762,13 +763,14 @@ public class HubConnection { public void cancelOutstandingInvocations(Exception ex) { lock.lock(); try { - pendingInvocations.forEach((key, irq) -> { + Collection keys = pendingInvocations.keySet(); + for (String key : keys) { if (ex == null) { - irq.cancel(); + pendingInvocations.get(key).cancel(); } else { - irq.fail(ex); + pendingInvocations.get(key).fail(ex); } - }); + } pendingInvocations.clear(); } finally { @@ -779,14 +781,11 @@ public class HubConnection { public void addInvocation(InvocationRequest irq) { lock.lock(); try { - pendingInvocations.compute(irq.getInvocationId(), (key, value) -> { - if (value != null) { - // This should never happen - throw new IllegalStateException("Invocation Id is already used"); - } - - return irq; - }); + if (pendingInvocations.containsKey(irq.getInvocationId())) { + throw new IllegalStateException("Invocation Id is already used"); + } else { + pendingInvocations.put(irq.getInvocationId(), irq); + } } finally { lock.unlock(); }