private void handleReply(Message message) {
if (!isReplyForThisSagaType(message))
return;
logger.debug("Handle reply: {}", message);
String sagaId = message.getRequiredHeader(SagaReplyHeaders.REPLY_SAGA_ID);
String sagaType = message.getRequiredHeader(SagaReplyHeaders.REPLY_SAGA_TYPE);
SagaInstance sagaInstance = sagaInstanceRepository.find(sagaType, sagaId);
Data sagaData = SagaDataSerde.deserializeSagaData(sagaInstance.getSerializedSagaData());
message.getHeader(SagaReplyHeaders.REPLY_LOCKED).ifPresent(lockedTarget -> {
String destination = message.getRequiredHeader(CommandMessageHeaders.inReply(CommandMessageHeaders.DESTINATION));
sagaInstance.addDestinationsAndResources(singleton(new DestinationAndResource(destination, lockedTarget)));
});
String currentState = sagaInstance.getStateName();
logger.info("Current state={}", currentState);
SagaActions<Data> actions = getStateDefinition().handleReply(currentState, sagaData, message);
logger.info("Handled reply. Sending commands {}", actions.getCommands());
processActions(sagaId, sagaInstance, sagaData, actions);
}