001 package groovy.xml;
002
003 import javax.xml.parsers.ParserConfigurationException;
004 import javax.xml.parsers.DocumentBuilderFactory;
005 import javax.xml.parsers.SAXParserFactory;
006 import java.security.PrivilegedExceptionAction;
007 import java.security.AccessController;
008 import java.security.PrivilegedActionException;
009
010 /**
011 * Support class for creating XML Factories
012 */
013 public class FactorySupport {
014 static Object createFactory(PrivilegedExceptionAction action) throws ParserConfigurationException {
015 Object factory;
016 try {
017 factory = AccessController.doPrivileged(action);
018 } catch (PrivilegedActionException pae) {
019 Exception e = pae.getException();
020 if (e instanceof ParserConfigurationException) {
021 throw(ParserConfigurationException) e;
022 } else {
023 throw new RuntimeException(e);
024 }
025 }
026 return factory;
027 }
028
029 public static DocumentBuilderFactory createDocumentBuilderFactory() throws ParserConfigurationException {
030 return (DocumentBuilderFactory) createFactory(new PrivilegedExceptionAction() {
031 public Object run() throws ParserConfigurationException {
032 return DocumentBuilderFactory.newInstance();
033 }
034 });
035 }
036
037 public static SAXParserFactory createSaxParserFactory() throws ParserConfigurationException {
038 return (SAXParserFactory) createFactory(new PrivilegedExceptionAction() {
039 public Object run() throws ParserConfigurationException {
040 return SAXParserFactory.newInstance();
041 }
042 });
043 }
044 }