예제 #1
0
  public Object newInstance(
      ComponentDescriptor componentDescriptor, ClassRealm classRealm, PlexusContainer container)
      throws ComponentInstantiationException {
    Class implementationClass = null;

    try {
      String implementation = componentDescriptor.getImplementation();

      implementationClass = classRealm.loadClass(implementation);

      int modifiers = implementationClass.getModifiers();

      if (Modifier.isInterface(modifiers)) {
        throw new ComponentInstantiationException(
            "Cannot instanciate implementation '"
                + implementation
                + "' because the class is a interface.");
      }

      if (Modifier.isAbstract(modifiers)) {
        throw new ComponentInstantiationException(
            "Cannot instanciate implementation '"
                + implementation
                + "' because the class is abstract.");
      }

      Object instance = implementationClass.newInstance();

      return instance;
    } catch (InstantiationException e) {
      throw makeException(classRealm, componentDescriptor, implementationClass, e);
    } catch (ClassNotFoundException e) {
      throw makeException(classRealm, componentDescriptor, implementationClass, e);
    } catch (IllegalAccessException e) {
      throw makeException(classRealm, componentDescriptor, implementationClass, e);
    } catch (LinkageError e) {
      throw makeException(classRealm, componentDescriptor, implementationClass, e);
    }
  }