@SuppressWarnings({"unchecked"})
  public T createInstance(String managerClassName) {
    Class managerClass = ReflectionUtil.loadClass(managerClassName);
    if (managerClass == null) {
      logger.warn("Cannot load class: {}", managerClassName);
      managerClass = defaultImplClass;
    }

    if (!clazz.isAssignableFrom(managerClass)) {
      logger.warn("Cannot use as {}: {}", clazz.getName(), managerClassName);
      managerClass = defaultImplClass;
    }
    logger.debug("Using class: {}", managerClass.getName());

    T instance = (T) ReflectionUtil.newInstance(managerClass);
    if (instance == null) {
      logger.warn(
          "Cannot instanciate: {}. Fall back to default: {}.",
          managerClass.getName(),
          FieldsManager.class.getName());
      instance = (T) ReflectionUtil.newInstance(defaultImplClass);
      if (instance == null) {
        logger.error("Cannot instanciate: {}", defaultImplClass.getName());
      }
    }

    logger.debug("Installed {0}: {1}", clazz.getName(), instance);
    return instance;
  }
Example #2
0
  @Test
  public void testNewInstance() {

    String foo = ReflectionUtil.newInstance(String.class);

    assertNotNull(foo);

    Foo1 foo1 = ReflectionUtil.newInstance(Foo1.class);
    assertNotNull(foo1);

    Foo2 foo2 = ReflectionUtil.newInstance(Foo2.class);
    assertNotNull(foo2);

    Foo3 foo3 = ReflectionUtil.newInstance(Foo3.class);
    assertNotNull(foo3);

    class FooConverter implements Converter<FooConverter, ConverterInvocation> {

      @Override
      public FooConverter convert(ConverterInvocation input) {
        return this;
      }
    }

    FooConverter foo4 = ReflectionUtil.newInstance(FooConverter.class);
    assertNotNull(foo4);
  }
Example #3
0
 @Test(expected = RuntimeException.class)
 public void testExceptionWithConstructorWithMoreThanOneParam() {
   Foo4 foo4 = ReflectionUtil.newInstance(Foo4.class);
 }
Example #4
0
 @Test
 public void testNewInstanceWithClassWithManyConstructors() {
   Foo5 foo5 = ReflectionUtil.newInstance(Foo5.class);
 }