diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/v2/AzureProxy.java b/azure-client-runtime/src/main/java/com/microsoft/azure/v2/AzureProxy.java index a8fec026ec99..48b7dcbf5ab1 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/v2/AzureProxy.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/v2/AzureProxy.java @@ -32,6 +32,7 @@ import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.Single; +import io.reactivex.SingleSource; import io.reactivex.exceptions.Exceptions; import io.reactivex.functions.Function; @@ -41,6 +42,7 @@ import java.lang.reflect.Type; import java.net.NetworkInterface; import java.util.Enumeration; +import java.util.concurrent.Callable; /** * This class can be used to create an Azure specific proxy implementation for a provided Swagger @@ -256,12 +258,18 @@ public ObservableSource apply(HttpResponse httpResponse) throws Exception { return createPollStrategy(httpRequest, Single.just(bufferedHttpResponse), methodParser).flatMapObservable(new Function>>() { @Override public ObservableSource> apply(final PollStrategy pollStrategy) throws Exception { - Observable> first = handleBodyReturnTypeAsync(bufferedHttpResponse, methodParser, operationStatusResultType).flatMapObservable(new Function>>() { - @Override - public ObservableSource> apply(Object operationResult) throws Exception { - return Observable.>just(new OperationStatus<>(operationResult, pollStrategy.status())); - } - }); + Observable> first = handleBodyReturnTypeAsync(bufferedHttpResponse, methodParser, operationStatusResultType) + .map(new Function>() { + @Override + public OperationStatus apply(Object operationResult) throws Exception { + return new OperationStatus<>(operationResult, pollStrategy.status()); + } + }).switchIfEmpty(Single.defer(new Callable>>() { + @Override + public SingleSource> call() throws Exception { + return Single.just(new OperationStatus<>((Object) null, pollStrategy.status())); + } + })).toObservable(); Observable> rest = pollStrategy.pollUntilDoneWithStatusUpdates(httpRequest, methodParser, operationStatusResultType); return first.concatWith(rest); }