code: public <T extends Assignable> T create(final Class<T> type, final String archiveName)
          throws IllegalArgumentException {
          // Precondition checks
          if (type == null) {
              throw new IllegalArgumentException("Type must be specified");
          }
          if (archiveName == null) {
              throw new IllegalArgumentException("ArchiveName must be specified");
          }
  
          // Get the impl class
          final Class<?> archiveImplClass;
          try {
              archiveImplClass = ClassLoaderSearchUtil.findClassFromClassLoaders(ARCHIVE_IMPL,
                  this.configuration.getClassLoaders());
          } catch (final ClassNotFoundException cnfe) {
              throw new IllegalStateException("Could not find the archive implementation class " + ARCHIVE_IMPL
                  + " in any configured ClassLoader", cnfe);
          }
  
          // Make a new instance
          final Archive<?> archive = SecurityActions.newInstance(archiveImplClass, new Class<?>[] { String.class,
              Configuration.class }, new Object[] { archiveName, configuration }, Archive.class);
  
          // Wrap as the requested type and return
          return archive.as(type);
      }
docs: Creates a new archive of the specified type. The archive will be be backed by the {@link Configuration} specific
  to this {@link ArchiveFactory}.
  
  @param type
  The type of the archive e.g. {@link org.jboss.shrinkwrap.api.spec.WebArchive}
  @param archiveName
  the archiveName to use
  @return An {@link Assignable} view
  @throws IllegalArgumentException
  either argument is not supplied