public IFilter buildFilterChain() {
    List<Class<? extends IFilter>> list = getConfiguredFilters();
    ListIterator<Class<? extends IFilter>> listIterator = list.listIterator(list.size());
    IFilter innerFilter = null;
    while (listIterator.hasPrevious()) {
      Class<? extends IFilter> filterClass = listIterator.previous();
      Class args[] = new Class[]{IFilter.class};
      try {
        Constructor constructor = filterClass.getDeclaredConstructor(args);
        IFilter filter = (IFilter) constructor.newInstance(innerFilter);
        innerFilter = filter;
      } catch (NoSuchMethodException e) {
        e.printStackTrace();
      } catch (InvocationTargetException e) {
        e.printStackTrace();
      } catch (InstantiationException e) {
        e.printStackTrace();
      } catch (IllegalAccessException e) {
        e.printStackTrace();
      }
    }
    return innerFilter;
  }