5 import mir.util.ExceptionRoutines;
7 import org.xml.sax.InputSource;
8 import org.xml.sax.Locator;
9 import org.xml.sax.SAXException;
10 import org.xml.sax.SAXParseException;
15 * <p>Description: </p>
16 * <p>Copyright: Copyright (c) 2003</p>
18 * @author not attributable
21 class XMLSAXParserProvider implements XMLParserEngine.XMLParserProvider {
22 private boolean nameSpaceAware;
24 public XMLSAXParserProvider(boolean aNameSpaceAware) {
25 nameSpaceAware = aNameSpaceAware;
28 public void parse(java.io.Reader aReader, XMLParserEngine.XMLParserReceiver aReceiver) throws XMLParserExc, XMLParserFailure {
30 javax.xml.parsers.SAXParserFactory parserFactory = javax.xml.parsers.SAXParserFactory.newInstance();
32 parserFactory.setNamespaceAware(true);
33 parserFactory.setValidating(true);
34 javax.xml.parsers.SAXParser parser = parserFactory.newSAXParser();
36 parser.parse(new InputSource(aReader), new SAXHandler(aReceiver));
38 catch (org.xml.sax.SAXException e) {
39 Throwable t = ExceptionRoutines.traceCauseException(e);
41 if (t instanceof XMLParserExc) {
42 throw (XMLParserExc) t;
45 if (t instanceof XMLParserFailure) {
46 throw (XMLParserFailure) t;
49 if (t instanceof SAXParseException) {
50 throw new XMLParserExc(t.getMessage());
53 throw new XMLParserFailure(t);
56 throw new XMLParserFailure(t);
60 private class SAXHandler extends org.xml.sax.helpers.DefaultHandler {
61 private XMLParserEngine.XMLParserReceiver receiver;
63 public SAXHandler(XMLParserEngine.XMLParserReceiver aReceiver) throws XMLParserExc, XMLParserFailure {
67 receiver.startDocument();
70 public void setDocumentLocator(final Locator aLocator) {
72 new XMLParserEngine.XMLLocator() {
73 public int getLineNr() {
74 return aLocator.getLineNumber();
77 public int getColumnNr() {
78 return aLocator.getColumnNumber();
84 public void startElement(String aUri, String aLocalName, String aQualifiedName, org.xml.sax.Attributes anAttributes) throws org.xml.sax.SAXException {
86 Map attributes = new java.util.HashMap();
90 tag = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName), aLocalName);
91 for (int i=0; i<anAttributes.getLength(); i++)
93 new XMLName(anAttributes.getURI(i),
94 XMLReaderTool.getPrefixFromQualifiedName(anAttributes.getQName(i)),
95 anAttributes.getLocalName(i)),
96 anAttributes.getValue(i));
99 tag = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName),
100 XMLReaderTool.getLocalNameFromQualifiedName(aQualifiedName));
101 for (int i=0; i<anAttributes.getLength(); i++)
103 new XMLName(anAttributes.getURI(i),
104 XMLReaderTool.getPrefixFromQualifiedName(anAttributes.getQName(i)),
105 XMLReaderTool.getLocalNameFromQualifiedName(anAttributes.getQName(i))),
106 anAttributes.getValue(i));
109 receiver.startElement(tag, attributes);
111 catch (XMLParserExc e) {
112 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
114 catch (Exception e) {
115 throw new SAXException(e);
119 public void endElement(String aUri, String aLocalName, String aQualifiedName) throws org.xml.sax.SAXException {
122 XMLName element = new XMLName(aUri, XMLReaderTool.getPrefixFromQualifiedName(aQualifiedName), aLocalName);
124 receiver.endElement(element);
126 catch (XMLParserExc e) {
127 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
129 catch (Exception e) {
130 throw new org.xml.sax.SAXException(e);
134 public void endDocument() throws org.xml.sax.SAXException {
137 receiver.endDocument();
139 catch (XMLParserExc e) {
140 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
142 catch (Exception e) {
143 throw new org.xml.sax.SAXException(e);
147 public void characters(char[] aBuffer, int aStart, int anEnd) throws org.xml.sax.SAXException {
149 String text = new String(aBuffer, aStart, anEnd);
153 catch (XMLParserExc e) {
154 throw new org.xml.sax.SAXParseException(e.getMessage(), null, e);
156 catch (Exception e) {
157 throw new org.xml.sax.SAXException(e);