List services = (List) sExtraServices.get(getServletName()); Iterator iter = services.iterator(); while (iter.hasNext()) { DocumentService service = (DocumentService) iter.next();
List<DocumentService> services = sExtraServices.get(getServletName()); for (DocumentService service : services) {
    public void init() throws ServletException {        // TODO we should have a ReloadConfig soap command that will reload        // on demand, instead of modifying and waiting for some time.        PropertyConfigurator.configureAndWatch(LC.zimbra_log4j_properties.value());        String name = getServletName();        ZimbraLog.soap.info("Servlet " + name + " starting up");        super.init();        mEngine = new SoapEngine();        int i=0;        String cname;        while ((cname = getInitParameter(PARAM_ENGINE_HANDLER+i)) != null) {            loadHandler(cname);            i++;        }                // See if any extra services were perviously added by extensions         synchronized (sExtraServices) {            List services = (List) sExtraServices.get(getServletName());            Iterator iter = services.iterator();            while (iter.hasNext()) {                DocumentService service = (DocumentService) iter.next();                addService(service);                i++;            }        }                if (i==0)            throw new ServletException("Must specify at least one handler "+PARAM_ENGINE_HANDLER+i);        try {            Zimbra.startup();        } catch (Throwable t) {            ZimbraLog.soap.fatal("Unable to start servlet", t);        	throw new UnavailableException(t.getMessage());        }    }