code: public static StringIdentifierGenerator getInstance(
              StringIdentifierGenerator[] generators) {
          if (generators == null) {
              throw new IllegalArgumentException(
                      "Generator array must not be null");
          }
          if (generators.length == 0) {
              throw new IllegalArgumentException(
                      "Generator array must not be empty");
          }
          StringIdentifierGenerator[] generatorsCopy = 
              new StringIdentifierGenerator[generators.length];
          for (int i = 0; i < generators.length; i++) {
              if (generators[i] == null) {
                  throw new IllegalArgumentException(
                          "Generators must not be null");
              }
              generatorsCopy[i] = generators[i];
          }  
          return new CompositeIdentifierGenerator(generatorsCopy);
      }
docs: Factory method to create a new <code>CompositeIdentifierGenerator</code>
  from an input array of <code>StringIdentifierGenerator</code> instances.
  <p>
  The input array is (shallow) copied - i.e., the object references in the
  input array are copied into a new array used internally.  The array is
  expected to be non-empty and not to contain nulls.
  
  @param generators the identifiers to concatenate, copied by reference
  @return the composite identifier generator
  @throws IllegalArgumentException if the generators array is null
  @throws IllegalArgumentException if any generator in the array is null