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 org.xml.sax.SAXParseException;
\r
9 import mir.util.ExceptionFunctions;
\r
14 * <p>Description: </p>
\r
15 * <p>Copyright: Copyright (c) 2003</p>
\r
17 * @author not attributable
\r
20 class XMLSAXParserProvider implements XMLParserEngine.XMLParserProvider {
\r
21 private boolean nameSpaceAware;
\r
23 public XMLSAXParserProvider(boolean aNameSpaceAware) {
\r
24 nameSpaceAware = aNameSpaceAware;
\r
27 public void parse(java.io.Reader aReader, XMLParserEngine.XMLParserReceiver aReceiver) throws XMLParserExc, XMLParserFailure {
\r
29 javax.xml.parsers.SAXParserFactory parserFactory = javax.xml.parsers.SAXParserFactory.newInstance();
\r
31 parserFactory.setNamespaceAware(true);
\r
32 parserFactory.setValidating(true);
\r
33 javax.xml.parsers.SAXParser parser = parserFactory.newSAXParser();
\r
35 parser.parse(new InputSource(aReader), new SAXHandler(aReceiver));
\r
37 catch (org.xml.sax.SAXException e) {
\r
38 Throwable t = ExceptionFunctions.traceCauseException(e);
\r
40 if (t instanceof XMLParserExc) {
\r
41 throw (XMLParserExc) t;
\r
44 if (t instanceof XMLParserFailure) {
\r
45 throw (XMLParserFailure) t;
\r
48 if (t instanceof SAXParseException) {
\r
49 throw new XMLParserExc(t.getMessage());
\r
52 throw new XMLParserFailure(t);
\r
54 catch (Throwable t) {
\r
55 throw new XMLParserFailure(t);
\r
59 private class SAXHandler extends org.xml.sax.helpers.DefaultHandler {
\r
60 private XMLParserEngine.XMLParserReceiver receiver;
\r
62 public SAXHandler(XMLParserEngine.XMLParserReceiver aReceiver) throws XMLParserExc, XMLParserFailure {
\r
65 receiver = aReceiver;
\r
66 receiver.startDocument();
\r
69 public void setDocumentLocator(final Locator aLocator) {
\r
70 receiver.setLocator(
\r
71 new XMLParserEngine.XMLLocator() {
\r
72 public int getLineNr() {
\r
73 return aLocator.getLineNumber();
\r
76 public int getColumnNr() {
\r
77 return aLocator.getColumnNumber();
\r
83 public void startElement(String aUri, String aLocalName, String aQualifiedName, org.xml.sax.Attributes anAttributes) throws org.xml.sax.SAXException {
\r
85 Map attributes = new java.util.HashMap();
\r
88 if (nameSpaceAware) {
\r
89 tag = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName), aLocalName);
\r
90 for (int i=0; i<anAttributes.getLength(); i++)
\r
92 new XMLName(anAttributes.getURI(i),
\r
93 XMLReaderTool.getPrefixFromQualifiedName(anAttributes.getQName(i)),
\r
94 anAttributes.getLocalName(i)),
\r
95 anAttributes.getValue(i));
\r
98 tag = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName),
\r
99 XMLReaderTool.getLocalNameFromQualifiedName(aQualifiedName));
\r
100 for (int i=0; i<anAttributes.getLength(); i++)
\r
102 new XMLName(anAttributes.getURI(i),
\r
103 XMLReaderTool.getPrefixFromQualifiedName(anAttributes.getQName(i)),
\r
104 XMLReaderTool.getLocalNameFromQualifiedName(anAttributes.getQName(i))),
\r
105 anAttributes.getValue(i));
\r
108 receiver.startElement(tag, attributes);
\r
110 catch (XMLParserExc e) {
\r
111 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
\r
113 catch (Exception e) {
\r
114 throw new SAXException(e);
\r
118 public void endElement(String aUri, String aLocalName, String aQualifiedName) throws org.xml.sax.SAXException {
\r
121 XMLName element = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName), aLocalName);
\r
123 receiver.endElement(element);
\r
125 catch (XMLParserExc e) {
\r
126 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
\r
128 catch (Exception e) {
\r
129 throw new org.xml.sax.SAXException(e);
\r
133 public void endDocument() throws org.xml.sax.SAXException {
\r
136 receiver.endDocument();
\r
138 catch (XMLParserExc e) {
\r
139 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
\r
141 catch (Exception e) {
\r
142 throw new org.xml.sax.SAXException(e);
\r
146 public void characters(char[] aBuffer, int aStart, int anEnd) throws org.xml.sax.SAXException {
\r
148 String text = new String(aBuffer, aStart, anEnd);
\r
150 receiver.text(text);
\r
152 catch (XMLParserExc e) {
\r
153 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
\r
155 catch (Exception e) {
\r
156 throw new org.xml.sax.SAXException(e);
\r