diff options
Diffstat (limited to 'libjava/classpath/gnu/xml/stream/XMLParser.java')
-rw-r--r-- | libjava/classpath/gnu/xml/stream/XMLParser.java | 261 |
1 files changed, 169 insertions, 92 deletions
diff --git a/libjava/classpath/gnu/xml/stream/XMLParser.java b/libjava/classpath/gnu/xml/stream/XMLParser.java index 87096eecf9e..ef3779944c3 100644 --- a/libjava/classpath/gnu/xml/stream/XMLParser.java +++ b/libjava/classpath/gnu/xml/stream/XMLParser.java @@ -56,6 +56,8 @@ package gnu.xml.stream; import java.io.BufferedInputStream; import java.io.EOFException; import java.io.File; +import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; @@ -86,6 +88,8 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import gnu.java.net.CRLFInputStream; +import gnu.classpath.debug.TeeInputStream; +import gnu.classpath.debug.TeeReader; /** * An XML parser. @@ -420,6 +424,21 @@ public class XMLParser ids = new HashSet(); idrefs = new HashSet(); } + String debug = System.getProperty("gnu.xml.debug.input"); + if (debug != null) + { + try + { + File file = File.createTempFile(debug, ".xml"); + in = new TeeInputStream(in, new FileOutputStream(file)); + } + catch (IOException e) + { + RuntimeException e2 = new RuntimeException(); + e2.initCause(e); + throw e2; + } + } pushInput(new Input(in, null, null, systemId, null, null, false, true)); } @@ -479,6 +498,21 @@ public class XMLParser ids = new HashSet(); idrefs = new HashSet(); } + String debug = System.getProperty("gnu.xml.debug.input"); + if (debug != null) + { + try + { + File file = File.createTempFile(debug, ".xml"); + reader = new TeeReader(reader, new FileWriter(file)); + } + catch (IOException e) + { + RuntimeException e2 = new RuntimeException(); + e2.initCause(e); + throw e2; + } + } pushInput(new Input(null, reader, null, systemId, null, null, false, true)); } @@ -1332,6 +1366,15 @@ public class XMLParser return false; } count += l2; + // check the characters we received first before doing additional reads + for (int i = 0; i < count; i++) + { + if (chars[i] != tmpBuf[i]) + { + reset(); + return false; + } + } while (count < len) { // force read @@ -1341,15 +1384,14 @@ public class XMLParser reset(); return false; } - tmpBuf[count++] = (char) c; - } - for (int i = 0; i < len; i++) - { - if (chars[i] != tmpBuf[i]) + tmpBuf[count] = (char) c; + // check each character as it is read + if (chars[count] != tmpBuf[count]) { reset(); return false; } + count++; } return true; } @@ -4250,97 +4292,131 @@ public class XMLParser public static void main(String[] args) throws Exception { + boolean validating = false; + boolean namespaceAware = false; boolean xIncludeAware = false; - if (args.length > 1 && "-x".equals(args[1])) - xIncludeAware = true; - XMLParser p = new XMLParser(new java.io.FileInputStream(args[0]), - absolutize(null, args[0]), - true, // validating - true, // namespaceAware - true, // coalescing, - true, // replaceERefs - true, // externalEntities - true, // supportDTD - true, // baseAware - true, // stringInterning - true, // extendedEventTypes - null, - null); - XMLStreamReader reader = p; - if (xIncludeAware) - reader = new XIncludeFilter(p, args[0], true, true, true); - try + int pos = 0; + while (pos < args.length && args[pos].startsWith("-")) { - int event; - //do - while (reader.hasNext()) + if ("-x".equals(args[pos])) + xIncludeAware = true; + else if ("-v".equals(args[pos])) + validating = true; + else if ("-n".equals(args[pos])) + namespaceAware = true; + pos++; + } + if (pos >= args.length) + { + System.out.println("Syntax: XMLParser [-n] [-v] [-x] <file> [<file2> [...]]"); + System.out.println("\t-n: use namespace aware mode"); + System.out.println("\t-v: use validating parser"); + System.out.println("\t-x: use XInclude aware mode"); + System.exit(2); + } + while (pos < args.length) + { + XMLParser p = new XMLParser(new java.io.FileInputStream(args[pos]), + absolutize(null, args[pos]), + validating, // validating + namespaceAware, // namespaceAware + true, // coalescing, + true, // replaceERefs + true, // externalEntities + true, // supportDTD + true, // baseAware + true, // stringInterning + true, // extendedEventTypes + null, + null); + XMLStreamReader reader = p; + if (xIncludeAware) + reader = new XIncludeFilter(p, args[pos], true, true, true); + try { - event = reader.next(); - Location loc = reader.getLocation(); - System.out.print(loc.getLineNumber()+":"+loc.getColumnNumber()+" "); - switch (event) + int event; + //do + while (reader.hasNext()) { - case XMLStreamConstants.START_DOCUMENT: - System.out.println("START_DOCUMENT version="+reader.getVersion()+ - " encoding="+reader.getEncoding()); - break; - case XMLStreamConstants.END_DOCUMENT: - System.out.println("END_DOCUMENT"); - break; - case XMLStreamConstants.START_ELEMENT: - System.out.println("START_ELEMENT "+reader.getName()); - int l = reader.getNamespaceCount(); - for (int i = 0; i < l; i++) - System.out.println("\tnamespace "+reader.getNamespacePrefix(i)+ - "='"+reader.getNamespaceURI(i)+"'"); - l = reader.getAttributeCount(); - for (int i = 0; i < l; i++) - System.out.println("\tattribute "+reader.getAttributeName(i)+ - "='"+reader.getAttributeValue(i)+"'"); - break; - case XMLStreamConstants.END_ELEMENT: - System.out.println("END_ELEMENT "+reader.getName()); - break; - case XMLStreamConstants.CHARACTERS: - System.out.println("CHARACTERS '"+encodeText(reader.getText())+"'"); - break; - case XMLStreamConstants.CDATA: - System.out.println("CDATA '"+encodeText(reader.getText())+"'"); - break; - case XMLStreamConstants.SPACE: - System.out.println("SPACE '"+encodeText(reader.getText())+"'"); - break; - case XMLStreamConstants.DTD: - System.out.println("DTD "+reader.getText()); - break; - case XMLStreamConstants.ENTITY_REFERENCE: - System.out.println("ENTITY_REFERENCE "+reader.getText()); - break; - case XMLStreamConstants.COMMENT: - System.out.println("COMMENT '"+encodeText(reader.getText())+"'"); - break; - case XMLStreamConstants.PROCESSING_INSTRUCTION: - System.out.println("PROCESSING_INSTRUCTION "+reader.getPITarget()+ - " "+reader.getPIData()); - break; - case START_ENTITY: - System.out.println("START_ENTITY "+reader.getText()); - break; - case END_ENTITY: - System.out.println("END_ENTITY "+reader.getText()); - break; - default: - System.out.println("Unknown event: "+event); + event = reader.next(); + Location loc = reader.getLocation(); + System.out.print(loc.getLineNumber() + ":" + + loc.getColumnNumber() + " "); + switch (event) + { + case XMLStreamConstants.START_DOCUMENT: + System.out.println("START_DOCUMENT version=" + + reader.getVersion() + + " encoding=" + + reader.getEncoding()); + break; + case XMLStreamConstants.END_DOCUMENT: + System.out.println("END_DOCUMENT"); + break; + case XMLStreamConstants.START_ELEMENT: + System.out.println("START_ELEMENT " + + reader.getName()); + int l = reader.getNamespaceCount(); + for (int i = 0; i < l; i++) + System.out.println("\tnamespace " + + reader.getNamespacePrefix(i) + "='" + + reader.getNamespaceURI(i)+"'"); + l = reader.getAttributeCount(); + for (int i = 0; i < l; i++) + System.out.println("\tattribute " + + reader.getAttributeName(i) + "='" + + reader.getAttributeValue(i) + "'"); + break; + case XMLStreamConstants.END_ELEMENT: + System.out.println("END_ELEMENT " + reader.getName()); + break; + case XMLStreamConstants.CHARACTERS: + System.out.println("CHARACTERS '" + + encodeText(reader.getText()) + "'"); + break; + case XMLStreamConstants.CDATA: + System.out.println("CDATA '" + + encodeText(reader.getText()) + "'"); + break; + case XMLStreamConstants.SPACE: + System.out.println("SPACE '" + + encodeText(reader.getText()) + "'"); + break; + case XMLStreamConstants.DTD: + System.out.println("DTD " + reader.getText()); + break; + case XMLStreamConstants.ENTITY_REFERENCE: + System.out.println("ENTITY_REFERENCE " + reader.getText()); + break; + case XMLStreamConstants.COMMENT: + System.out.println("COMMENT '" + + encodeText(reader.getText()) + "'"); + break; + case XMLStreamConstants.PROCESSING_INSTRUCTION: + System.out.println("PROCESSING_INSTRUCTION " + + reader.getPITarget() + " " + + reader.getPIData()); + break; + case START_ENTITY: + System.out.println("START_ENTITY " + reader.getText()); + break; + case END_ENTITY: + System.out.println("END_ENTITY " + reader.getText()); + break; + default: + System.out.println("Unknown event: " + event); + } } } - } - catch (XMLStreamException e) - { - Location l = reader.getLocation(); - System.out.println("At line "+l.getLineNumber()+ - ", column "+l.getColumnNumber()+ - " of "+l.getSystemId()); - throw e; + catch (XMLStreamException e) + { + Location l = reader.getLocation(); + System.out.println("At line "+l.getLineNumber()+ + ", column "+l.getColumnNumber()+ + " of "+l.getSystemId()); + throw e; + } + pos++; } } @@ -5039,7 +5115,6 @@ public class XMLParser void mark(int len) throws IOException { - //System.out.println(" mark:"+len); markOffset = offset; markLine = line; markColumn = column; @@ -5082,7 +5157,9 @@ public class XMLParser { int ret; if (unicodeReader != null) - ret = unicodeReader.read(b, off, len); + { + ret = unicodeReader.read(b, off, len); + } else { byte[] b2 = new byte[len]; |