public QueryResponse serializeResponse(QueryResponseMessage<?> response, String requestMessageId) { QueryResponse.Builder builder = QueryResponse.newBuilder(); if (response.isExceptional()) { Throwable exceptionResult = response.exceptionResult(); builder.setErrorCode(ErrorCode.QUERY_EXECUTION_ERROR.errorCode()); builder.setErrorMessage(ExceptionSerializer.serialize(configuration.getClientId(), exceptionResult)); } else { builder.setPayload(payloadSerializer.apply(response)); } return builder .putAllMetaData(metadataSerializer.apply(response.getMetaData())) .setMessageIdentifier(response.getIdentifier()) .setRequestIdentifier(requestMessageId) .build(); }
@Override public <R, Q> CompletableFuture<R> query(String queryName, Q query, ResponseType<R> responseType) { CompletableFuture<QueryResponseMessage<R>> queryResponse = queryBus .query(processInterceptors(new GenericQueryMessage<>(query, queryName, responseType))); CompletableFuture<R> result = new CompletableFuture<>(); queryResponse.exceptionally(cause -> asResponseMessage(responseType.responseMessagePayloadType(), cause)) .thenAccept(queryResponseMessage -> { try { if (queryResponseMessage.isExceptional()) { result.completeExceptionally(queryResponseMessage.exceptionResult()); } else { result.complete(queryResponseMessage.getPayload()); } } catch (Exception e) { result.completeExceptionally(e); } }); return result; }
QueryProviderOutbound serialize(QueryResponseMessage initialResult, String subscriptionId) { QueryResponse response = QueryResponse.newBuilder() .setPayload(payloadSerializer.apply(initialResult)) .putAllMetaData(metadataSerializer.apply(initialResult.getMetaData())) .setMessageIdentifier(initialResult.getIdentifier()) .setRequestIdentifier(subscriptionId) .build(); return newBuilder().setSubscriptionQueryResponse( SubscriptionQueryResponse.newBuilder() .setSubscriptionIdentifier(subscriptionId) .setInitialResult(response)).build(); }
@Override public <Q, I, U> SubscriptionQueryResult<I, U> subscriptionQuery(String queryName, Q query, ResponseType<I> initialResponseType, ResponseType<U> updateResponseType, SubscriptionQueryBackpressure backpressure, int updateBufferSize) { SubscriptionQueryMessage<Q, I, U> subscriptionQueryMessage = new GenericSubscriptionQueryMessage<>(query, queryName, initialResponseType, updateResponseType); SubscriptionQueryResult<QueryResponseMessage<I>, SubscriptionQueryUpdateMessage<U>> result = queryBus .subscriptionQuery(processInterceptors(subscriptionQueryMessage), backpressure, updateBufferSize); return new DefaultSubscriptionQueryResult<>( result.initialResult() .filter(initialResult -> Objects.nonNull(initialResult.getPayload())) .map(Message::getPayload) .onErrorMap(e -> e instanceof IllegalPayloadAccessException ? e.getCause() : e), result.updates() .filter(update -> Objects.nonNull(update.getPayload())) .map(SubscriptionQueryUpdateMessage::getPayload), result ); }
@Override public <Q, I, U> SubscriptionQueryResult<I, U> subscriptionQuery(String queryName, Q query, ResponseType<I> initialResponseType, ResponseType<U> updateResponseType, SubscriptionQueryBackpressure backpressure, int updateBufferSize) { SubscriptionQueryMessage<Q, I, U> subscriptionQueryMessage = new GenericSubscriptionQueryMessage<>(query, queryName, initialResponseType, updateResponseType); SubscriptionQueryResult<QueryResponseMessage<I>, SubscriptionQueryUpdateMessage<U>> result = queryBus .subscriptionQuery(processInterceptors(subscriptionQueryMessage), backpressure, updateBufferSize); return new DefaultSubscriptionQueryResult<>( result.initialResult() .filter(initialResult -> Objects.nonNull(initialResult.getPayload())) .map(Message::getPayload) .onErrorMap(e -> e instanceof IllegalPayloadAccessException ? e.getCause() : e), result.updates() .filter(update -> Objects.nonNull(update.getPayload())) .map(SubscriptionQueryUpdateMessage::getPayload), result ); }
QueryProviderOutbound serialize(QueryResponseMessage initialResult, String subscriptionId) { QueryResponse response = QueryResponse.newBuilder() .setPayload(payloadSerializer.apply(initialResult)) .putAllMetaData(metadataSerializer.apply(initialResult.getMetaData())) .setMessageIdentifier(initialResult.getIdentifier()) .setRequestIdentifier(subscriptionId) .build(); return newBuilder().setSubscriptionQueryResponse( SubscriptionQueryResponse.newBuilder() .setSubscriptionIdentifier(subscriptionId) .setInitialResult(response)).build(); }
public QueryResponse serializeResponse(QueryResponseMessage<?> response, String requestMessageId) { QueryResponse.Builder builder = QueryResponse.newBuilder(); if (response.isExceptional()) { Throwable exceptionResult = response.exceptionResult(); builder.setErrorCode(ErrorCode.QUERY_EXECUTION_ERROR.errorCode()); builder.setErrorMessage(ExceptionSerializer.serialize(configuration.getClientId(), exceptionResult)); } else { builder.setPayload(payloadSerializer.apply(response)); } return builder .putAllMetaData(metadataSerializer.apply(response.getMetaData())) .setMessageIdentifier(response.getIdentifier()) .setRequestIdentifier(requestMessageId) .build(); }
@Override public <R, Q> CompletableFuture<R> query(String queryName, Q query, ResponseType<R> responseType) { CompletableFuture<QueryResponseMessage<R>> queryResponse = queryBus .query(processInterceptors(new GenericQueryMessage<>(query, queryName, responseType))); CompletableFuture<R> result = new CompletableFuture<>(); queryResponse.exceptionally(cause -> asResponseMessage(responseType.responseMessagePayloadType(), cause)) .thenAccept(queryResponseMessage -> { if (queryResponseMessage.isExceptional()) { result.completeExceptionally(queryResponseMessage.exceptionResult()); } else { result.complete(queryResponseMessage.getPayload()); } }); return result; }
@Override public <Q, I, U> SubscriptionQueryResult<I, U> subscriptionQuery(String queryName, Q query, ResponseType<I> initialResponseType, ResponseType<U> updateResponseType, SubscriptionQueryBackpressure backpressure, int updateBufferSize) { SubscriptionQueryMessage<Q, I, U> subscriptionQueryMessage = new GenericSubscriptionQueryMessage<>(query, queryName, initialResponseType, updateResponseType); SubscriptionQueryResult<QueryResponseMessage<I>, SubscriptionQueryUpdateMessage<U>> result = queryBus .subscriptionQuery(processInterceptors(subscriptionQueryMessage), backpressure, updateBufferSize); return new DefaultSubscriptionQueryResult<>( result.initialResult() .filter(initialResult -> Objects.nonNull(initialResult.getPayload())) .map(QueryResponseMessage::getPayload), result.updates() .filter(update -> Objects.nonNull(update.getPayload())) .map(SubscriptionQueryUpdateMessage::getPayload), result ); }