Skip to content
Snippets Groups Projects
Commit 1b8a6f2d authored by Goik Martin's avatar Goik Martin
Browse files

Testing duplicate handler execution

parent 286649db
No related branches found
No related tags found
No related merge requests found
Showing
with 340 additions and 340 deletions
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.hdm_stuttgart.mi.sda1.saxhtml</groupId>
<artifactId>saxmemo2html</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>saxmemo2html</name>
<!--Fixme: Add a sensible project related domain here -->
<url>http://www.mi.hdm-stuttgart.de/freedocs</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.1</version>
<configuration />
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>de.hdm_stuttgart.de.saxstandard.App</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.hdm_stuttgart.mi.sda1.saxhtml</groupId>
<artifactId>saxmemo2html</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>saxmemo2html</name>
<!--Fixme: Add a sensible project related domain here -->
<url>http://www.mi.hdm-stuttgart.de/freedocs</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>de.hdm_stuttgart.mi.exam</groupId>
<artifactId>examtesting</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.1</version>
<configuration />
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>de.hdm_stuttgart.de.saxstandard.App</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package de.hdm_stuttgart.mi.sda1.saxhtml.v2;
package de.hdm_stuttgart.mi.sda1.saxhtml.v1;
import java.io.PrintStream;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import de.hdm_stuttgart.mi.sda1.saxhtml.tools.ContentRedirect;
import de.hdm_stuttgart.mi.exam.SaxFilter;
/**
* Turning &lt;memo&gt; documents to HTML
*
*/
public class Memo2HtmlHandler implements ContentRedirect {
public class Memo2HtmlHandler extends DefaultHandler implements SaxFilter {
private PrintStream out;
private PrintStream out;
@Override
public void setOutputStream(final PrintStream out) {
this.out = out;
}
/**
* Output will be written to stdout
*
* Output will be written to standard output unless redefined by {@link #setOutputStream(PrintStream)}
*/
public Memo2HtmlHandler() {
setOutputStream(System.out);
......@@ -25,45 +31,31 @@ public class Memo2HtmlHandler implements ContentRedirect {
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
out.print("<html>");
// TODO: complete my implementation!
out.print("<html>");
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
out.print("</html>");
public void startElement(String uri, String localName, String tagName,
Attributes attributes) throws SAXException {
// TODO: implement me!
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
// TODO Auto-generated method stub
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO: implement me!
}
@Override
public void endElement(String uri, String localName, String qName)
public void endElement(String uri, String localName, String tagName)
throws SAXException {
// TODO Auto-generated method stub
// TODO: implement me!
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
public void endDocument() throws SAXException {
// TODO: complete my implementation!
out.print("</html>");
}
// You probably don't need the following callbacks.
//
@Override public void setDocumentLocator(Locator locator) {}
@Override public void startPrefixMapping(String prefix, String uri) throws SAXException {}
@Override public void endPrefixMapping(String prefix) throws SAXException {}
@Override public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {}
@Override public void processingInstruction(String target, String data) throws SAXException {}
@Override public void skippedEntity(String name) throws SAXException {}
@Override
public void setOutputStream(final PrintStream out) {
this.out = out;
}
}
\ No newline at end of file
package de.hdm_stuttgart.mi.sda1.saxhtml.v2;
import java.io.PrintStream;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import de.hdm_stuttgart.mi.exam.SaxFilter;
/**
* Turning &lt;memo&gt; documents to HTML
*
*/
public class Memo2HtmlHandler extends DefaultHandler implements SaxFilter {
private PrintStream out;
@Override
public void setOutputStream(final PrintStream out) {
this.out = out;
}
/**
*
* Output will be written to standard output unless redefined by {@link #setOutputStream(PrintStream)}
*/
public Memo2HtmlHandler() {
setOutputStream(System.out);
}
@Override
public void startDocument() throws SAXException {
// TODO: complete my implementation!
out.print("<html>");
}
@Override
public void startElement(String uri, String localName, String tagName,
Attributes attributes) throws SAXException {
// TODO: implement me!
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO: implement me!
}
@Override
public void endElement(String uri, String localName, String tagName)
throws SAXException {
// TODO: implement me!
}
@Override
public void endDocument() throws SAXException {
// TODO: complete my implementation!
out.print("</html>");
}
}
\ No newline at end of file
......@@ -31,7 +31,7 @@ public class Memo2HtmlHandler extends DefaultHandler implements SaxFilter {
@Override
public void startDocument() throws SAXException {
// Clear
// Clear recipients being left over from a previous run
recipients.clear();
}
......
package de.hdm_stuttgart.de.sda1.saxhtml.v2.test;
import org.junit.Assert;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import de.hdm_stuttgart.de.mi.exam.test.sax.DomAssert;
import de.hdm_stuttgart.de.mi.exam.test.sax.SaxFilterTest;
......@@ -11,6 +14,7 @@ import de.hdm_stuttgart.mi.sda1.saxhtml.v2.Memo2HtmlHandler;
*/
@SuppressWarnings("javadoc")
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestComplexSaxTransform extends SaxFilterTest {
static {
......@@ -43,4 +47,9 @@ public class TestComplexSaxTransform extends SaxFilterTest {
DomAssert.assertSingleNodeContent("<strong>M. Goik</strong> must appear inside a <p> immediately following the list of recipients",
htmlRootElement, "body/dl/following-sibling::*[1]", "h2", "Subject: Best wishes");
}
@Test public void testXduplicateHandlerInvocation() {
SaxFilterTest.processAndParseResult();// Execute handler a second time.
Assert.assertNull(SaxFilterTest.initializationErrorString, SaxFilterTest.initializationErrorString);
DomAssert.assertNumberOfNodes("Invoking SAX handler two times in succession: There should be two <li> elements matching two recipients", htmlRootElement, "body/dl/dd/ul/li", 2);
}
}
\ No newline at end of file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.hdm_stuttgart.mi.sda1.saxhtml</groupId>
<artifactId>saxmemo2html</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>SaxMemo2Hhtml</name>
<!--Fixme: Add a sensible project related domain here -->
<url>http://www.mi.hdm-stuttgart.de/freedocs</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.1</version>
<configuration/>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>de.hdm_stuttgart.de.saxstandard.App</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package de.hdm_stuttgart.mi.sda1.saxhtml.tools;
import java.io.PrintStream;
import org.xml.sax.ContentHandler;
public interface ContentRedirect extends ContentHandler {
/**
* Allow output redirection.
* @param out Output will be redirected here.
*/
public void setOutputStream(PrintStream out);
}
package de.hdm_stuttgart.mi.sda1.saxhtml.v1;
/** Driver */
public class Driver {
/** @param argv unused */
public static void main(String argv[]) {
try{
Memo2Html memo2html = new Memo2Html(new Memo2HtmlHandler());
memo2html.parse("src/main/resources/memo.xml");
} catch (Exception e){
e.printStackTrace(System.err);
}
}
}
\ No newline at end of file
package de.hdm_stuttgart.mi.sda1.saxhtml.v1;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
/** Parser, content- and error handler assembly */
public class Memo2Html {
private final XMLReader xmlReader;
private final MyErrorHandler errorHandler = new MyErrorHandler();
/**
* @param out
* @throws SAXException
* Parsing may fail.
* @throws ParserConfigurationException
* Unable to instantiate parser.
*/
public Memo2Html(final ContentHandler handler) throws SAXException,
ParserConfigurationException {
final SAXParserFactory saxPf = SAXParserFactory.newInstance();
final SAXParser saxParser = saxPf.newSAXParser();
xmlReader = saxParser.getXMLReader();
xmlReader.setContentHandler(handler);
xmlReader.setErrorHandler(errorHandler);
}
/**
* Parse an existing memo instance and create HTML output.
*
* @param uri
* The resource to be parsed
* @throws IOException
* Access related problems
* @throws SAXException
* Parsing may fail
*/
public void parse(final String uri) throws IOException, SAXException {
xmlReader.parse(uri);
}
}
\ No newline at end of file
package de.hdm_stuttgart.mi.sda1.saxhtml.v1;
import java.io.PrintStream;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import de.hdm_stuttgart.mi.sda1.saxhtml.tools.ContentRedirect;
/**
* Turning &lt;memo&gt; documents to HTML as being shown in sample document memo.xml.1.sample.html
*
*/
public class Memo2HtmlHandler implements ContentRedirect {
private PrintStream out;
/**
* Output will be written to stdout
*/
public Memo2HtmlHandler() {
setOutputStream(System.out);
}
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
out.print("<html>");
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
out.print("</html>");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
}
// You probably don't need the following callbacks.
//
@Override public void setDocumentLocator(Locator locator) {}
@Override public void startPrefixMapping(String prefix, String uri) throws SAXException {}
@Override public void endPrefixMapping(String prefix) throws SAXException {}
@Override public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {}
@Override public void processingInstruction(String target, String data) throws SAXException {}
@Override public void skippedEntity(String name) throws SAXException {}
@Override
public void setOutputStream(final PrintStream out) {
this.out = out;
}
}
\ No newline at end of file
package de.hdm_stuttgart.mi.sda1.saxhtml.v1;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.ErrorHandler;
/** Handle parsing errors */
public class MyErrorHandler implements ErrorHandler {
/** @see ErrorHandler#warning(SAXParseException) */
public void warning(SAXParseException e) {
System.err.println("[Warning]" + getLocationString(e));
}
/** @see ErrorHandler#error(SAXParseException) */
public void error(SAXParseException e) {
System.err.println("[Error]" + getLocationString(e));
}
/** @see ErrorHandler#fatalError(SAXParseException) */
public void fatalError(SAXParseException e) throws SAXException{
System.err.println("[Fatal Error]" + getLocationString(e));
}
private String getLocationString(SAXParseException e) {
return " line " + e.getLineNumber() +
", column " + e.getColumnNumber()+ ":" + e.getMessage();
}
}
\ No newline at end of file
package de.hdm_stuttgart.mi.sda1.saxhtml.v2;
import de.hdm_stuttgart.mi.sda1.saxhtml.v1.Memo2HtmlHandler;
/** Driver */
public class Driver {
/** @param argv unused */
public static void main(String argv[]) {
try{
Memo2Html memo2html = new Memo2Html(new Memo2HtmlHandler());
memo2html.parse("src/main/resources/memo.xml");
} catch (Exception e){
e.printStackTrace(System.err);
}
}
}
\ No newline at end of file
package de.hdm_stuttgart.mi.sda1.saxhtml.v2;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import de.hdm_stuttgart.mi.sda1.saxhtml.v1.MyErrorHandler;
/** Parser, content- and error handler assembly */
public class Memo2Html {
private final XMLReader xmlReader;
private final MyErrorHandler errorHandler = new MyErrorHandler();
/**
* @param out Write output to stream
* @throws SAXException
* Parsing may fail.
* @throws ParserConfigurationException
* Unable to instantiate parser.
*/
public Memo2Html(final ContentHandler handler) throws SAXException,
ParserConfigurationException {
final SAXParserFactory saxPf = SAXParserFactory.newInstance();
final SAXParser saxParser = saxPf.newSAXParser();
xmlReader = saxParser.getXMLReader();
xmlReader.setContentHandler(handler);
xmlReader.setErrorHandler(errorHandler);
}
/**
* Parse an existing memo instance and create HTML output.
*
* @param uri
* The resource to be parsed
* @throws IOException
* Access related problems
* @throws SAXException
* Parsing may fail
*/
public void parse(final String uri) throws IOException, SAXException {
xmlReader.parse(uri);
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment