/* ------------------------------------------------------------ */
  @Override
  public void doStart() throws Exception {
    super.doStart();

    if (!javax.servlet.Filter.class.isAssignableFrom(_class)) {
      String msg = _class + " is not a javax.servlet.Filter";
      super.stop();
      throw new IllegalStateException(msg);
    }
  }
 /* ------------------------------------------------------------ */
 @Override
 public void dump(Appendable out, String indent) throws IOException {
   super.dump(out, indent);
   if (_filter instanceof Dumpable) {
     ((Dumpable) _filter).dump(out, indent);
   }
 }
  /* ------------------------------------------------------------ */
  @Override
  public void doStop() throws Exception {
    if (_filter != null) {
      try {
        destroyInstance(_filter);
      } catch (Exception e) {
        LOG.warn(e);
      }
    }
    if (!_extInstance) _filter = null;

    _config = null;
    super.doStop();
  }
  /* ------------------------------------------------------------ */
  @Override
  public void initialize() throws Exception {
    super.initialize();

    if (_filter == null) {
      try {
        ServletContext context = _servletHandler.getServletContext();
        _filter =
            (context instanceof ServletContextHandler.Context)
                ? ((ServletContextHandler.Context) context).createFilter(getHeldClass())
                : getHeldClass().newInstance();
      } catch (ServletException se) {
        Throwable cause = se.getRootCause();
        if (cause instanceof InstantiationException) throw (InstantiationException) cause;
        if (cause instanceof IllegalAccessException) throw (IllegalAccessException) cause;
        throw se;
      }
    }

    _config = new Config();
    if (LOG.isDebugEnabled()) LOG.debug("Filter.init {}", _filter);
    _filter.init(_config);
  }