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    }