summaryrefslogtreecommitdiffstats
path: root/libjava/classpath/gnu/xml/stream/XMLParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/gnu/xml/stream/XMLParser.java')
-rw-r--r--libjava/classpath/gnu/xml/stream/XMLParser.java261
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];
OpenPOWER on IntegriCloud