public static Persistence getPersistence(URL url) throws Exception {
InputStream persistenceDescriptor = null;
try {
persistenceDescriptor = url.openStream();
JAXBContext jc = JAXBContextFactory.newInstance(Persistence.class);
Unmarshaller u = jc.createUnmarshaller();
UnmarshallerHandler uh = u.getUnmarshallerHandler();
// create a new XML parser
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
SAXParser parser = factory.newSAXParser();
XMLReader xmlReader = parser.getXMLReader();
// Create a filter to intercept events
PersistenceFilter xmlFilter = new PersistenceFilter(xmlReader);
// Be sure the filter has the JAXB content handler set (or it wont
// work)
xmlFilter.setContentHandler(uh);
SAXSource source = new SAXSource(xmlFilter, new InputSource(persistenceDescriptor));
return (Persistence) u.unmarshal(source);
} finally {
if (persistenceDescriptor != null) persistenceDescriptor.close();
}
}
|