Javolution 6.0.0 java
XMLReaderImpl.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.xml.sax;
10 
11 import java.io.FileInputStream;
12 import java.io.IOException;
13 import java.io.InputStream;
14 import java.io.Reader;
15 import java.net.URL;
20 import org.xml.sax.DTDHandler;
21 import org.xml.sax.EntityResolver;
22 import org.xml.sax.ErrorHandler;
23 import org.xml.sax.InputSource;
24 import org.xml.sax.SAXException;
25 import org.xml.sax.SAXNotRecognizedException;
26 import org.xml.sax.SAXNotSupportedException;
27 
48 public class XMLReaderImpl implements XMLReader {
49 
54 
59 
63  private ErrorHandler _errorHandler;
64 
69 
73  public XMLReaderImpl() {
74  // Sets default handlers.
77  }
78 
90  public void parse(InputStream in) throws IOException, SAXException {
91  try {
92  _xmlReader.setInput(in);
93  parseAll();
94  } catch (XMLStreamException e) {
95  if (e.getNestedException() instanceof IOException)
96  throw (IOException) e.getNestedException();
97  throw new SAXException(e.getMessage());
98  } finally {
99  _xmlReader.reset();
100  }
101  }
102 
114  public void parse(InputStream in, String encoding) throws IOException,
115  SAXException {
116  try {
117  _xmlReader.setInput(in, encoding);
118  parseAll();
119  } catch (XMLStreamException e) {
120  if (e.getNestedException() instanceof IOException)
121  throw (IOException) e.getNestedException();
122  throw new SAXException(e.getMessage());
123  } finally {
124  _xmlReader.reset();
125  }
126  }
127 
140  public void parse(Reader reader) throws IOException, SAXException {
141  try {
142  _xmlReader.setInput(reader);
143  parseAll();
144  } catch (XMLStreamException e) {
145  if (e.getNestedException() instanceof IOException)
146  throw (IOException) e.getNestedException();
147  throw new SAXException(e.getMessage());
148  } finally {
149  _xmlReader.reset();
150  }
151  }
152 
153  // Implements XMLReader interface.
154  public void parse(InputSource input) throws IOException, SAXException {
155  Reader reader = input.getCharacterStream();
156  if (reader != null) {
157  parse(reader);
158  } else {
159  InputStream inStream = input.getByteStream();
160  if (inStream != null) {
161  parse(inStream, input.getEncoding());
162  } else {
163  parse(input.getSystemId());
164  }
165  }
166  }
167 
168  // Implements XMLReader interface.
169  public void parse(String systemId) throws IOException, SAXException {
170  InputStream inStream;
171  try {
172  URL url = new URL(systemId);
173  inStream = url.openStream();
174  } catch (Exception urlException) { // Try as filename.
175  try {
176  inStream = new FileInputStream(systemId);
177  } catch (Exception fileException) {
178  throw new UnsupportedOperationException("Cannot parse "
179  + systemId);
180  }
181  }
182  parse(inStream);
183  }
184 
185  // Implements XMLReader interface.
186  public void setContentHandler(ContentHandler handler) {
187  if (handler != null) {
188  _contentHandler = handler;
189  } else {
190  throw new NullPointerException();
191  }
192  }
193 
194  // Implements XMLReader interface.
196  return (_contentHandler == DEFAULT_HANDLER) ? null : _contentHandler;
197  }
198 
199  // Implements XMLReader interface.
200  public void setErrorHandler(ErrorHandler handler) {
201  if (handler != null) {
202  _errorHandler = handler;
203  } else {
204  throw new NullPointerException();
205  }
206  }
207 
208  // Implements XMLReader interface.
209  public ErrorHandler getErrorHandler() {
210  return (_errorHandler == DEFAULT_HANDLER) ? null : _errorHandler;
211  }
212 
213  // Implements XMLReader interface.
214  public boolean getFeature(String name) throws SAXNotRecognizedException,
215  SAXNotSupportedException {
216  if (name.equals("http://xml.org/sax/features/namespaces")) {
217  return true;
218  } else if (name
219  .equals("http://xml.org/sax/features/namespace-prefixes")) {
220  return true;
221  } else {
222  throw new SAXNotRecognizedException("Feature " + name
223  + " not recognized");
224  }
225  }
226 
227  public void setFeature(String name, boolean value)
228  throws SAXNotRecognizedException, SAXNotSupportedException {
229  if (name.equals("http://xml.org/sax/features/namespaces")
230  || name.equals("http://xml.org/sax/features/namespace-prefixes")) {
231  return; // Ignores, these features are always set.
232  } else {
233  throw new SAXNotRecognizedException("Feature " + name
234  + " not recognized");
235  }
236  }
237 
238  public Object getProperty(String name) throws SAXNotRecognizedException,
239  SAXNotSupportedException {
240  throw new SAXNotRecognizedException("Property " + name
241  + " not recognized");
242  }
243 
244  public void setProperty(String name, Object value)
245  throws SAXNotRecognizedException, SAXNotSupportedException {
246  throw new SAXNotRecognizedException("Property " + name
247  + " not recognized");
248  }
249 
250  public void setEntityResolver(EntityResolver resolver) {
251  _entityResolver = resolver;
252  }
253 
254  private EntityResolver _entityResolver;
255 
256  public EntityResolver getEntityResolver() {
257  return _entityResolver;
258  }
259 
260  public void setDTDHandler(DTDHandler handler) {
261  _dtdHandler = handler;
262  }
263 
264  private DTDHandler _dtdHandler;
265 
266  public DTDHandler getDTDHandler() {
267  return _dtdHandler;
268  }
269 
270  // Implements Reusable.
271  public void reset() {
274  _xmlReader.reset();
275  }
276 
285  private void parseAll() throws XMLStreamException, SAXException {
286  int eventType = _xmlReader.getEventType();
287  if (eventType != XMLStreamConstants.START_DOCUMENT)
288  throw new SAXException("Currently parsing");
290 
291  boolean doContinue = true;
292  while (doContinue) {
293  CharArray uri, localName, qName, prefix, text;
294  switch (_xmlReader.next()) {
296 
297  // Start prefix mapping.
298  for (int i = 0, count = _xmlReader.getNamespaceCount(); i < count; i++) {
299  prefix = _xmlReader.getNamespacePrefix(i);
300  prefix = (prefix == null) ? NO_CHAR : prefix; // Default namespace is ""
301  uri = _xmlReader.getNamespaceURI(i);
302  _contentHandler.startPrefixMapping(prefix, uri);
303  }
304 
305  // Start element.
306  uri = _xmlReader.getNamespaceURI();
307  uri = (uri == null) ? NO_CHAR : uri;
308  localName = _xmlReader.getLocalName();
309  qName = _xmlReader.getQName();
310  _contentHandler.startElement(uri, localName, qName,
312  break;
313 
315 
316  // End element.
317  uri = _xmlReader.getNamespaceURI();
318  uri = (uri == null) ? NO_CHAR : uri;
319  localName = _xmlReader.getLocalName();
320  qName = _xmlReader.getQName();
321  _contentHandler.endElement(uri, localName, qName);
322 
323  // End prefix mapping.
324  for (int i = 0, count = _xmlReader.getNamespaceCount(); i < count; i++) {
325  prefix = _xmlReader.getNamespacePrefix(i);
326  prefix = (prefix == null) ? NO_CHAR : prefix; // Default namespace is ""
328  }
329  break;
330 
333  text = _xmlReader.getText();
334  _contentHandler.characters(text.array(), text.offset(),
335  text.length());
336  break;
337 
339  text = _xmlReader.getText();
341  text.offset(), text.length());
342  break;
343 
347  break;
348 
350  // Ignores.
351  break;
352 
354  doContinue = false;
355  _xmlReader.close();
356  break;
357 
358  }
359  }
360  }
361 
362  private static final CharArray NO_CHAR = new CharArray("");
363 }
javolution.xml.sax.XMLReaderImpl.parse
void parse(InputStream in)
Definition: XMLReaderImpl.java:90
javolution.xml.sax.ContentHandler.startDocument
void startDocument()
javolution.text.CharArray
Definition: CharArray.java:36
javolution.xml.sax.XMLReaderImpl.DEFAULT_HANDLER
static DefaultHandler DEFAULT_HANDLER
Definition: XMLReaderImpl.java:53
javolution
javolution.xml.sax.ContentHandler.startPrefixMapping
void startPrefixMapping(CharArray prefix, CharArray uri)
javolution.xml.stream.XMLStreamConstants.END_DOCUMENT
static final int END_DOCUMENT
Definition: XMLStreamConstants.java:61
javolution.xml.internal.stream.XMLStreamReaderImpl.getQName
CharArray getQName()
Definition: XMLStreamReaderImpl.java:315
javolution.xml.stream.XMLStreamConstants.CDATA
static final int CDATA
Definition: XMLStreamConstants.java:81
javolution.xml.stream.XMLStreamConstants
Definition: XMLStreamConstants.java:19
javolution.xml.sax.XMLReaderImpl.setContentHandler
void setContentHandler(ContentHandler handler)
Definition: XMLReaderImpl.java:186
javolution.xml.internal.stream.XMLStreamReaderImpl.setInput
void setInput(InputStream in)
Definition: XMLStreamReaderImpl.java:216
javolution.xml.sax.XMLReaderImpl.getDTDHandler
DTDHandler getDTDHandler()
Definition: XMLReaderImpl.java:266
javolution.xml.sax.XMLReaderImpl.setDTDHandler
void setDTDHandler(DTDHandler handler)
Definition: XMLReaderImpl.java:260
javolution.xml.internal.stream.XMLStreamReaderImpl.getLocalName
CharArray getLocalName()
Definition: XMLStreamReaderImpl.java:1243
javolution.xml.sax.XMLReaderImpl.getErrorHandler
ErrorHandler getErrorHandler()
Definition: XMLReaderImpl.java:209
javolution.xml.sax.XMLReaderImpl.parse
void parse(InputStream in, String encoding)
Definition: XMLReaderImpl.java:114
javolution.xml.sax.ContentHandler.startElement
void startElement(CharArray uri, CharArray localName, CharArray qName, Attributes atts)
javolution.xml.sax.ContentHandler.ignorableWhitespace
void ignorableWhitespace(char ch[], int start, int length)
javolution.xml.stream.XMLStreamException.getNestedException
Throwable getNestedException()
Definition: XMLStreamException.java:96
javolution.xml.sax.XMLReaderImpl.parse
void parse(Reader reader)
Definition: XMLReaderImpl.java:140
javolution.text.CharArray.offset
int offset()
Definition: CharArray.java:104
javolution.xml.sax.ContentHandler.endElement
void endElement(CharArray uri, CharArray localName, CharArray qName)
javolution.xml.internal.stream.XMLStreamReaderImpl.next
int next()
Definition: XMLStreamReaderImpl.java:380
javolution.xml.internal.stream.XMLStreamReaderImpl.getText
CharArray getText()
Definition: XMLStreamReaderImpl.java:1321
javolution.xml.internal.stream.XMLStreamReaderImpl.getNamespaceCount
int getNamespaceCount()
Definition: XMLStreamReaderImpl.java:1258
javolution.xml.stream.XMLStreamConstants.START_ELEMENT
static final int START_ELEMENT
Definition: XMLStreamConstants.java:24
javolution.xml.sax.XMLReaderImpl.getProperty
Object getProperty(String name)
Definition: XMLReaderImpl.java:238
javolution.xml.sax.XMLReaderImpl._contentHandler
ContentHandler _contentHandler
Definition: XMLReaderImpl.java:58
javolution.xml.stream.XMLStreamConstants.COMMENT
static final int COMMENT
Definition: XMLStreamConstants.java:44
javolution.xml.stream.XMLStreamException
Definition: XMLStreamException.java:17
javolution.xml.sax.XMLReaderImpl.XMLReaderImpl
XMLReaderImpl()
Definition: XMLReaderImpl.java:73
javolution.xml.sax.XMLReaderImpl._dtdHandler
DTDHandler _dtdHandler
Definition: XMLReaderImpl.java:264
javolution.xml.sax.XMLReaderImpl._entityResolver
EntityResolver _entityResolver
Definition: XMLReaderImpl.java:254
javolution.xml.stream.XMLStreamConstants.SPACE
static final int SPACE
Definition: XMLStreamConstants.java:51
javolution.xml.internal.stream.XMLStreamReaderImpl.getNamespaceURI
CharArray getNamespaceURI(CharSequence prefix)
Definition: XMLStreamReaderImpl.java:1272
javolution.xml.sax.XMLReaderImpl.parse
void parse(String systemId)
Definition: XMLReaderImpl.java:169
javolution.xml.sax.XMLReaderImpl._xmlReader
final XMLStreamReaderImpl _xmlReader
Definition: XMLReaderImpl.java:68
javolution.xml.sax.XMLReaderImpl.setEntityResolver
void setEntityResolver(EntityResolver resolver)
Definition: XMLReaderImpl.java:250
javolution.xml.sax.ContentHandler.characters
void characters(char ch[], int start, int length)
javolution.xml.sax.XMLReaderImpl.NO_CHAR
static final CharArray NO_CHAR
Definition: XMLReaderImpl.java:362
javolution.text
Definition: CharArray.java:9
javolution.xml.stream.XMLStreamConstants.CHARACTERS
static final int CHARACTERS
Definition: XMLStreamConstants.java:39
javolution.xml.sax.XMLReaderImpl.getContentHandler
ContentHandler getContentHandler()
Definition: XMLReaderImpl.java:195
javolution.xml.stream.XMLStreamConstants.END_ELEMENT
static final int END_ELEMENT
Definition: XMLStreamConstants.java:29
javolution.xml.internal.stream.XMLStreamReaderImpl
Definition: XMLStreamReaderImpl.java:38
javolution.xml.sax.DefaultHandler
Definition: DefaultHandler.java:24
javolution.xml.sax.XMLReaderImpl.setFeature
void setFeature(String name, boolean value)
Definition: XMLReaderImpl.java:227
javolution.text.CharArray.length
int length()
Definition: CharArray.java:95
Exception
javolution.xml.sax.ContentHandler.endPrefixMapping
void endPrefixMapping(CharArray prefix)
javolution.xml.sax.XMLReaderImpl.setProperty
void setProperty(String name, Object value)
Definition: XMLReaderImpl.java:244
javolution.xml.internal.stream.XMLStreamReaderImpl.reset
void reset()
Definition: XMLStreamReaderImpl.java:984
javolution.xml.sax.ContentHandler.processingInstruction
void processingInstruction(CharArray target, CharArray data)
javolution.xml.sax.XMLReaderImpl.getEntityResolver
EntityResolver getEntityResolver()
Definition: XMLReaderImpl.java:256
javolution.xml.internal.stream.XMLStreamReaderImpl.getEventType
int getEventType()
Definition: XMLStreamReaderImpl.java:1239
javolution.xml.internal.stream.XMLStreamReaderImpl.close
void close()
Definition: XMLStreamReaderImpl.java:1181
javolution.text.CharArray.array
char[] array()
Definition: CharArray.java:86
javolution.xml.internal.stream
Definition: AttributesImpl.java:1
javolution.xml.sax.XMLReaderImpl.parseAll
void parseAll()
Definition: XMLReaderImpl.java:285
javolution.xml.internal.stream.XMLStreamReaderImpl.getAttributes
Attributes getAttributes()
Definition: XMLStreamReaderImpl.java:342
javolution.xml.internal.stream.XMLStreamReaderImpl.getPIData
CharArray getPIData()
Definition: XMLStreamReaderImpl.java:1305
javolution.xml.sax.XMLReaderImpl.getFeature
boolean getFeature(String name)
Definition: XMLReaderImpl.java:214
javolution.xml.sax.ContentHandler
Definition: ContentHandler.java:27
javolution.xml.internal.stream.XMLStreamReaderImpl.getNamespacePrefix
CharArray getNamespacePrefix(int index)
Definition: XMLStreamReaderImpl.java:1265
javolution.xml.internal
javolution.xml.stream.XMLStreamConstants.PROCESSING_INSTRUCTION
static final int PROCESSING_INSTRUCTION
Definition: XMLStreamConstants.java:34
javolution.xml.sax.XMLReaderImpl.parse
void parse(InputSource input)
Definition: XMLReaderImpl.java:154
javolution.xml.sax.XMLReaderImpl.reset
void reset()
Definition: XMLReaderImpl.java:271
javolution.xml
Definition: DefaultXMLFormat.java:9
javolution.xml.stream
Definition: Location.java:9
javolution.xml.stream.XMLStreamConstants.START_DOCUMENT
static final int START_DOCUMENT
Definition: XMLStreamConstants.java:56
javolution.xml.sax.XMLReaderImpl
Definition: XMLReaderImpl.java:48
javolution.xml.sax.XMLReaderImpl._errorHandler
ErrorHandler _errorHandler
Definition: XMLReaderImpl.java:63
javolution.xml.internal.stream.XMLStreamReaderImpl.getPITarget
CharArray getPITarget()
Definition: XMLStreamReaderImpl.java:1313
javolution.xml.sax.XMLReaderImpl.setErrorHandler
void setErrorHandler(ErrorHandler handler)
Definition: XMLReaderImpl.java:200
javolution.xml.sax.XMLReader
Definition: XMLReader.java:28