1 package mir.util.xml;
\r
5 import org.xml.sax.InputSource;
\r
6 import org.xml.sax.SAXException;
\r
7 import org.xml.sax.Locator;
\r
8 import mir.util.ExceptionFunctions;
\r
13 * <p>Description: </p>
\r
14 * <p>Copyright: Copyright (c) 2003</p>
\r
16 * @author not attributable
\r
19 class XMLSAXParserProvider implements XMLParserEngine.XMLParserProvider {
\r
20 private boolean nameSpaceAware;
\r
22 public XMLSAXParserProvider(boolean aNameSpaceAware) {
\r
23 nameSpaceAware = aNameSpaceAware;
\r
26 public void parse(java.io.Reader aReader, XMLParserEngine.XMLParserReceiver aReceiver) throws XMLParserExc, XMLParserFailure {
\r
28 javax.xml.parsers.SAXParserFactory parserFactory = javax.xml.parsers.SAXParserFactory.newInstance();
\r
30 parserFactory.setNamespaceAware(true);
\r
31 parserFactory.setValidating(true);
\r
32 javax.xml.parsers.SAXParser parser = parserFactory.newSAXParser();
\r
34 parser.parse(new InputSource(aReader), new SAXHandler(aReceiver));
\r
36 catch (org.xml.sax.SAXException e) {
\r
37 Throwable t = ExceptionFunctions.traceCauseException(e);
\r
39 if (t instanceof XMLParserExc) {
\r
40 throw (XMLParserExc) t;
\r
43 if (t instanceof XMLParserFailure) {
\r
44 throw (XMLParserFailure) t;
\r
47 throw new XMLParserFailure(t);
\r
49 catch (Throwable t) {
\r
50 throw new XMLParserFailure(t);
\r
54 private class SAXHandler extends org.xml.sax.helpers.DefaultHandler {
\r
55 private XMLParserEngine.XMLParserReceiver receiver;
\r
57 public SAXHandler(XMLParserEngine.XMLParserReceiver aReceiver) throws XMLParserExc, XMLParserFailure {
\r
60 receiver = aReceiver;
\r
61 receiver.startDocument();
\r
64 public void setDocumentLocator(final Locator aLocator) {
\r
65 receiver.setLocator(
\r
66 new XMLParserEngine.XMLLocator() {
\r
67 public int getLineNr() {
\r
68 return aLocator.getLineNumber();
\r
71 public int getColumnNr() {
\r
72 return aLocator.getColumnNumber();
\r
78 public void startElement(String aUri, String aLocalName, String aQualifiedName, org.xml.sax.Attributes anAttributes) throws org.xml.sax.SAXException {
\r
80 Map attributes = new java.util.HashMap();
\r
83 if (nameSpaceAware) {
\r
84 tag = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName), aLocalName);
\r
85 for (int i=0; i<anAttributes.getLength(); i++)
\r
87 new XMLName(anAttributes.getURI(i),
\r
88 XMLReaderTool.getPrefixFromQualifiedName(anAttributes.getQName(i)),
\r
89 anAttributes.getLocalName(i)),
\r
90 anAttributes.getValue(i));
\r
93 tag = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName),
\r
94 XMLReaderTool.getLocalNameFromQualifiedName(aQualifiedName));
\r
95 for (int i=0; i<anAttributes.getLength(); i++)
\r
97 new XMLName(anAttributes.getURI(i),
\r
98 XMLReaderTool.getPrefixFromQualifiedName(anAttributes.getQName(i)),
\r
99 XMLReaderTool.getLocalNameFromQualifiedName(anAttributes.getQName(i))),
\r
100 anAttributes.getValue(i));
\r
103 receiver.startElement(tag, attributes);
\r
105 catch (XMLParserExc e) {
\r
106 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
\r
108 catch (Exception e) {
\r
109 throw new SAXException(e);
\r
113 public void endElement(String aUri, String aLocalName, String aQualifiedName) throws org.xml.sax.SAXException {
\r
116 XMLName element = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName), aLocalName);
\r
118 receiver.endElement(element);
\r
120 catch (XMLParserExc e) {
\r
121 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
\r
123 catch (Exception e) {
\r
124 throw new org.xml.sax.SAXException(e);
\r
128 public void endDocument() throws org.xml.sax.SAXException {
\r
131 receiver.endDocument();
\r
133 catch (XMLParserExc e) {
\r
134 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
\r
136 catch (Exception e) {
\r
137 throw new org.xml.sax.SAXException(e);
\r
141 public void characters(char[] aBuffer, int aStart, int anEnd) throws org.xml.sax.SAXException {
\r
143 String text = new String(aBuffer, aStart, anEnd);
\r
145 receiver.text(text);
\r
147 catch (XMLParserExc e) {
\r
148 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
\r
150 catch (Exception e) {
\r
151 throw new org.xml.sax.SAXException(e);
\r