public Map<String, Definition> read(Object source)
throws DefinitionsFactoryException {
// Get out if we have not been initialized.
if (!inited) {
throw new DefinitionsFactoryException(
"Definitions reader has not been initialized.");
}
// This is an instance variable instead of a local variable because
// we want to be able to call the addDefinition method to populate it.
// But we reset the Map here, which, of course, has threading implications.
definitions = new HashMap<String, Definition>();
if (source == null) {
// Perhaps we should throw an exception here.
return null;
}
InputStream input;
try {
input = (InputStream) source;
} catch (ClassCastException e) {
throw new DefinitionsFactoryException(
"Invalid source type. Requires java.io.InputStream.", e);
}
try {
// set first object in stack
//digester.clear();
digester.push(this);
// parse
digester.parse(input);
} catch (SAXException e) {
throw new DefinitionsFactoryException(
"XML error reading definitions.", e);
} catch (IOException e) {
throw new DefinitionsFactoryException(
"I/O Error reading definitions.", e);
}
return definitions;
}