@SuppressWarnings("unchecked") protected final <T> AstrixRemoteResult<T> toRemoteResult(AstrixServiceInvocationResponse response, Type returnType) { if (response.isServiceUnavailable()) { return AstrixRemoteResult.unavailable(response.getExceptionMsg(), CorrelationId.valueOf(response.getCorrelationId())); } if (response.hasThrownException()) { CorrelationId correlationId = CorrelationId.valueOf(response.getCorrelationId()); return AstrixRemoteResult.failure(createClientSideException(response, apiVersion), correlationId); } if (returnType.equals(Void.TYPE) || returnType.equals(Void.class)) { return AstrixRemoteResult.voidResult(); } if (isOptionalType(returnType)) { return AstrixRemoteResult.successful(restoreOptional(response, returnType)); } T result = unmarshall(response, returnType, apiVersion); return AstrixRemoteResult.successful(result); }