docs: public boolean processRequest(String[] processArray, Properties requestProperties, RequestDispatcher frh) throws ConfigurationException {
  		String[] subProcessArray;
  		String mappingName;
  		if (processArray.length == 0) {
  			mappingName = this.defaultMappingName;
  			subProcessArray = new String[0];
  		} else {
  			mappingName = processArray[0];
  			subProcessArray = new String[processArray.length - 1];
  			System.arraycopy(processArray, 1, subProcessArray, 0, subProcessArray.length);
  		}
  
  		Mapping mapping = mappingMap.get(mappingName);
  		if (mapping == null) {
  			System.out.println(new LogEntry("can not find mapping '" + mappingName + "': turning to default mapping '" + defaultMappingName + "'"));
  			mapping = mappingMap.get(defaultMappingName);
  			if (mapping == null || !mapping.isLoaded()) {
  				throw new ConfigurationException("can not find mapping '" + mappingName + "',\n" +
  						"default mapping specification '" + defaultMappingName + "' " + (mapping == null ? " absent" : " not loaded") +
  						";\nadd a default mapping to avoid uncontrolled responses");
  			}
  		}
  		if (!mapping.isLoaded()) {
  			throw new ConfigurationException("mapping '" + mappingName + "' not loaded");
  		}
  		Process process = mapping.getRootProcess();
  		boolean hasResponded = false;
  		try {
  			hasResponded = process.processRequest(subProcessArray, requestProperties, frh);
  		} catch (Throwable t) {
  			if (t instanceof RuntimeException) {
  				throw (RuntimeException) t;
  			}
  			throw new ConfigurationException("process not completed due to insufficient error handling", t);
  		}
  		return hasResponded;
  	}