public XMLCache(String xmlFileName) {
		Logger l = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
		Document doc = null;
		
		if (xmlFileName==null || xmlFileName.isEmpty())
			throw new IllegalArgumentException();
		try {
			xmlFile = Paths.get(xmlFileName);
			if (Files.exists(xmlFile)) {
				org.jdom2.input.SAXBuilder builder = new org.jdom2.input.SAXBuilder();
				builder.setIgnoringBoundaryWhitespace(true);
				builder.setIgnoringElementContentWhitespace(true);
				doc = builder.build(Files.newInputStream(xmlFile));
			}
		} catch (InvalidPathException e) {
			throw new IllegalArgumentException(e);
		} catch (IOException e) {
			l.log(Level.WARNING, String.format("Error reading cache file <%s>%n", xmlFileName), e);
		} catch (JDOMException e) {
			l.log(Level.WARNING, String.format("Error parsing cache file <%s>%n", xmlFileName), e);
		} 

		if (doc == null) doc = new Document(new Element("root"));
		outputter = new XMLOutputter();
		Format xmlOutputFormat = outputter.getFormat();
		xmlOutputFormat.setIndent("  ");
		xmlOutputFormat.setLineSeparator(System.getProperty("line.separator"));
//		outputter.setFormat(xmlOutputFormat);
		outputter.setFormat(Format.getPrettyFormat());
		this.doc = doc;
	}