@dsaff since you are thinking of also creating factory classes for Rules, I'm working what you want to do with exceptions in the factories. A few options

a. Have factory methods throw a factory-specific checked exception (like what we have here)
b. Have factory methods not declare any exceptions
c. Hibrid:

    public abstract class FooFactory {

      protected abstract Foo create(FooFactoryParams params);

      public final Foo createFoo(FooFactoryParams params) throws FooNotCreatedException {
        try {
          Foo foo = create(params);
          if (foo == null) {
            throw new FooNotCreatedException();
          }
          return foo;
        } catch (RuntimeException e) {
          throw new FooNotCreatedException(e);
       }
    }