import java.io.*; import java.util.*; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; /* * @author Aleksander Slominski [aslom@extreme.indiana.edu] */ public class SAX2Tester extends DefaultHandler implements Tester { final public static int RUN_SIZE = 100000 - 1; int count; String elementName; XMLReader parser; public SAX2Tester() { } public void setUp(Properties props) throws Exception { String parserName = props.getProperty("sax2.parsername"); parser = (XMLReader)Class.forName(parserName).newInstance(); parser.setFeature("http://xml.org/sax/features/validation", false); parser.setFeature("http://xml.org/sax/features/namespaces", true ); parser.setContentHandler(this); } public TestResult testCount(String data, int runs, String elementName) throws Exception { this.elementName = elementName; //int runs = RUN_SIZE/size + 1; parser.setErrorHandler(this); // one run for warmup //reader.reset(); //Reader reader = new StringReader(data); Reader reader = new BufferedReader(new StringReader(data)); //reader.mark(0); InputSource in = new InputSource(reader); parser.parse(in); //reader.reset(); // prepare InputSource[] ins = new InputSource[runs]; for(int i = 0; i < runs ; ++i) { reader = new StringReader(data); ins[i] = new InputSource(reader); } // start timing double start = TestTimer.tick(); for(int i = 0; i < runs ; ++i) { count = 0; //reader.reset(); //in = new InputSource(reader); parser.parse(ins[i]); } double end = TestTimer.tick(); TestResult result = new TestResult(); result.elementCount = count; result.timeSecs = (end - start) / runs; return result; } // SAX2 handler public void startElement(String uri, String local, String raw, Attributes attrs) { if(local.equals(elementName)) count++; } }