@SuppressWarnings("unchecked") @Override public Object handle(Message<?> message, P target) throws Exception { C childEntity = childEntityResolver.apply((CommandMessage<?>) message, target); if (childEntity == null) { throw new AggregateEntityNotFoundException( "Aggregate cannot handle this command, as there is no entity instance to forward it to." ); } List<AnnotatedCommandHandlerInterceptor<? super C>> interceptors = childHandlingInterceptors.stream() .filter(chi -> chi.canHandle(message)) .sorted((chi1, chi2) -> Integer.compare(chi2.priority(), chi1.priority())) .map(chi -> new AnnotatedCommandHandlerInterceptor<>(chi, childEntity)) .collect(Collectors.toList()); Object result; if (interceptors.isEmpty()) { result = childHandler.handle(message, childEntity); } else { result = new DefaultInterceptorChain<>((UnitOfWork<CommandMessage<?>>) CurrentUnitOfWork.get(), interceptors, m -> childHandler.handle(message, childEntity)).proceed(); } return result; }