I noticed code like:
boolean autoCreate = "true".equals(factory.attributeValue("auto-create"));
Java already has some boolean semantics that I would expect to be leveraged for consistency. The line could be replaced with:
boolean autoCreate = Boolean.parseBoolean(factory.attributeValue("auto-create"));
There is a subtle difference in that parseBoolean will do a case insensitive comparison, but at least this is consistent with core Java.
The above change also removes "magic values" repeated ("true").
Very minor issue, but also easy to fix.