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 }