1 package groovy.xml;
2
3 import javax.xml.parsers.ParserConfigurationException;
4 import javax.xml.parsers.DocumentBuilderFactory;
5 import javax.xml.parsers.SAXParserFactory;
6 import java.security.PrivilegedExceptionAction;
7 import java.security.AccessController;
8 import java.security.PrivilegedActionException;
9
10 /***
11 * Support class for creating XML Factories
12 */
13 public class FactorySupport {
14 static Object createFactory(PrivilegedExceptionAction action) throws ParserConfigurationException {
15 Object factory;
16 try {
17 factory = AccessController.doPrivileged(action);
18 } catch (PrivilegedActionException pae) {
19 Exception e = pae.getException();
20 if (e instanceof ParserConfigurationException) {
21 throw(ParserConfigurationException) e;
22 } else {
23 throw new RuntimeException(e);
24 }
25 }
26 return factory;
27 }
28
29 public static DocumentBuilderFactory createDocumentBuilderFactory() throws ParserConfigurationException {
30 return (DocumentBuilderFactory) createFactory(new PrivilegedExceptionAction() {
31 public Object run() throws ParserConfigurationException {
32 return DocumentBuilderFactory.newInstance();
33 }
34 });
35 }
36
37 public static SAXParserFactory createSaxParserFactory() throws ParserConfigurationException {
38 return (SAXParserFactory) createFactory(new PrivilegedExceptionAction() {
39 public Object run() throws ParserConfigurationException {
40 return SAXParserFactory.newInstance();
41 }
42 });
43 }
44 }