1:
37:
38: package ;
39:
40: import ;
41:
42: import ;
43: import ;
44:
45: import ;
46: import ;
47: import ;
48: import ;
49: import ;
50: import ;
51:
52: import ;
53: import ;
54: import ;
55: import ;
56:
57:
58:
65: public final class JAXPFactory
66: extends DocumentBuilderFactory
67: {
68:
69: private static final String PROPERTY = "http://xml.org/sax/properties/";
70: private static final String FEATURE = "http://xml.org/sax/features/";
71:
72: private SAXParserFactory pf;
73:
74:
77: public JAXPFactory()
78: {
79: }
80:
81:
85: public DocumentBuilder newDocumentBuilder()
86: throws ParserConfigurationException
87: {
88: if (pf == null)
89: {
90:
91:
92: pf = new gnu.xml.aelfred2.JAXPFactory();
93:
94: }
95:
96:
97: pf.setValidating(isValidating());
98:
99:
100:
101:
102:
103:
104: pf.setNamespaceAware(isNamespaceAware());
105:
106: try
107: {
108:
109: pf.setFeature(FEATURE + "namespace-prefixes", true);
110:
111: return new JAXPBuilder(pf.newSAXParser().getXMLReader(), this);
112: }
113: catch (SAXException e)
114: {
115: String msg = "can't create JAXP DocumentBuilder: " + e.getMessage();
116: throw new ParserConfigurationException(msg);
117: }
118: }
119:
120:
121: public void setAttribute(String name, Object value)
122: throws IllegalArgumentException
123: {
124: if ("http://java.sun.com/xml/jaxp/properties/schemaLanguage".equals(name))
125: {
126:
127: }
128: else
129: {
130: throw new IllegalArgumentException(name);
131: }
132: }
133:
134:
135: public Object getAttribute(String name)
136: throws IllegalArgumentException
137: {
138: throw new IllegalArgumentException(name);
139: }
140:
141: static final class JAXPBuilder
142: extends DocumentBuilder
143: implements ErrorHandler
144: {
145:
146: private Consumer consumer;
147: private XMLReader producer;
148: private DomImpl impl;
149:
150: JAXPBuilder(XMLReader parser, JAXPFactory factory)
151: throws ParserConfigurationException
152: {
153: impl = new DomImpl();
154:
155:
156: try
157: {
158: consumer = new Consumer();
159: }
160: catch (SAXException e)
161: {
162: throw new ParserConfigurationException(e.getMessage());
163: }
164:
165:
166: consumer.setHidingReferences(factory.isExpandEntityReferences());
167: consumer.setHidingComments(factory.isIgnoringComments());
168: consumer.setHidingWhitespace(factory.isIgnoringElementContentWhitespace());
169: consumer.setHidingCDATA(factory.isCoalescing());
170:
171:
172: producer = parser;
173: producer.setContentHandler(consumer.getContentHandler());
174: producer.setDTDHandler(consumer.getDTDHandler());
175:
176: try
177: {
178: String id;
179:
180:
181:
182: if (factory.isValidating ())
183: {
184: producer.setFeature(FEATURE + "validation", true);
185: producer.setErrorHandler(this);
186: }
187:
188:
189: producer.setFeature(FEATURE + "namespace-prefixes", true);
190: producer.setFeature(FEATURE + "namespaces",
191: factory.isNamespaceAware());
192:
193:
194: id = PROPERTY + "lexical-handler";
195: producer.setProperty(id, consumer.getProperty(id));
196:
197: id = PROPERTY + "declaration-handler";
198: producer.setProperty(id, consumer.getProperty(id));
199:
200: }
201: catch (SAXException e)
202: {
203: throw new ParserConfigurationException(e.getMessage());
204: }
205: }
206:
207: public Document parse(InputSource source)
208: throws SAXException, IOException
209: {
210: producer.parse(source);
211: Document doc = consumer.getDocument();
212:
213: doc.setDocumentURI(source.getSystemId());
214: return doc;
215: }
216:
217: public boolean isNamespaceAware()
218: {
219: try
220: {
221: return producer.getFeature(FEATURE + "namespaces");
222: }
223: catch (SAXException e)
224: {
225:
226: throw new RuntimeException(e.getMessage());
227: }
228: }
229:
230: public boolean isValidating()
231: {
232: try
233: {
234: return producer.getFeature(FEATURE + "validation");
235: }
236: catch (SAXException e)
237: {
238:
239: throw new RuntimeException(e.getMessage());
240: }
241: }
242:
243: public void setEntityResolver(EntityResolver resolver)
244: {
245: producer.setEntityResolver(resolver);
246: }
247:
248: public void setErrorHandler(ErrorHandler handler)
249: {
250: producer.setErrorHandler(handler);
251: consumer.setErrorHandler(handler);
252: }
253:
254: public DOMImplementation getDOMImplementation()
255: {
256: return impl;
257: }
258:
259: public Document newDocument()
260: {
261: return new DomDocument();
262: }
263:
264:
265: public void fatalError(SAXParseException e)
266: throws SAXException
267: {
268: throw e;
269: }
270:
271: public void error(SAXParseException e)
272: throws SAXException
273: {
274: throw e;
275: }
276:
277: public void warning(SAXParseException e)
278: throws SAXException
279: {
280:
281: }
282:
283: }
284:
285: }