code: protected void violation(final Receiver<Void> receiver,
        final Set<ConstraintViolation<?>> errors) {
      this.reuse();
      Set<Throwable> causes = null;
      for (final AbstractRequest<?, ?> request : new ArrayList<>(this.state.invocations)) {
        try {
          request.onViolation(errors);
        } catch (final Throwable t) {
          if (causes == null) {
            causes = new HashSet<>();
          }
          causes.add(t);
        }
      }
      if (receiver != null) {
        try {
          receiver.onConstraintViolation(errors);
        } catch (final Throwable t) {
          if (causes == null) {
            causes = new HashSet<>();
          }
          causes.add(t);
        }
      }
  
      if (causes != null) {
        throw new UmbrellaException(causes);
      }
    }
docs: Invoke the appropriate {@code onViolation} callbacks, possibly throwing an
  {@link UmbrellaException} if one or more callbacks fails.