@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); }
@Deprecated public static <T> List<AstrixRemoteResult<T>> convertToAstrixRemoteResults(SpaceRemotingResult<T>[] results) { List<AstrixRemoteResult<T>> converted = new ArrayList<AstrixRemoteResult<T>>(results.length); for (SpaceRemotingResult<T> result : results) { if (result.getException() != null) { converted.add(AstrixRemoteResult.<T>failure(toRuntimeException(result.getException()), CorrelationId.undefined())); } else { converted.add(AstrixRemoteResult.successful(result.getResult())); } } return converted; }
@Override public Set<T> reduce(List<AstrixRemoteResult<Set<T>>> results) { Set<T> set = new HashSet<>(); for (AstrixRemoteResult<Set<T>> result : results) { set.addAll(result.getResult()); } return set; }
@Override public List<T> reduce(List<AstrixRemoteResult<List<T>>> results) { List<T> result = new ArrayList<>(); for (AstrixRemoteResult<List<T>> remoteResult : results) { Collection<T> r = remoteResult.getResult(); if (result != null) { result.addAll(r); } } return result; }
@Override public Map<K, V> reduce(List<AstrixRemoteResult<Map<K, V>>> results) { Map<K, V> map = new HashMap<K, V>(); for (AstrixRemoteResult<Map<K, V>> result : results) { map.putAll(result.getResult()); } return map; }
@Override public LunchRestaurantGrade reduce(List<AstrixRemoteResult<LunchRestaurantGrade>> grades) { LunchRestaurantGrade result = null; for (AstrixRemoteResult<LunchRestaurantGrade> grade : grades) { if (grade.getResult() == null) { continue; } if (result == null || grade.getResult().avarageGrade() > result.avarageGrade()) { result = grade.getResult(); } } return result; }
private void readResults(List<AstrixServiceInvocationResponse> responseList) { responseList.forEach(res -> remotingEngine.toRemoteResult(res, targetReturnType).getResult()); }
private void readResponses(List<AstrixServiceInvocationResponse> responses) { responses.forEach(res -> remotingEngine.toRemoteResult(res, returnType).getResult()); }
protected Observable<Object> submitRoutedRequest(AstrixServiceInvocationRequest request, RoutingKey routingKey) { Observable<AstrixServiceInvocationResponse> response = remotingEngine.submitRoutedRequest( request, routingKey); return response.map(t1 -> remotingEngine.toRemoteResult(t1, returnType).getResult()); }