[New] added constructor for XmlModelSaxStreamReader with encoding

This commit is contained in:
Robert von Burg 2019-09-17 14:30:27 +02:00
parent 19ce94df1d
commit 48142e517c
2 changed files with 32 additions and 9 deletions

View File

@ -4,10 +4,7 @@ import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter; import javax.xml.stream.XMLStreamWriter;
import java.io.File; import java.io.*;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -46,9 +43,9 @@ public class StrolchXmlHelper {
return elementListener.getElements(); return elementListener.getElements();
} }
public static List<StrolchRootElement> parseStream(InputStream stream) { public static List<StrolchRootElement> parseStream(InputStream stream, String encoding) {
SimpleStrolchElementListener elementListener = new SimpleStrolchElementListener(); SimpleStrolchElementListener elementListener = new SimpleStrolchElementListener();
new XmlModelSaxStreamReader(elementListener, stream).parseStream(); new XmlModelSaxStreamReader(elementListener, stream, encoding).parseStream();
return elementListener.getElements(); return elementListener.getElements();
} }

View File

@ -15,11 +15,15 @@
*/ */
package li.strolch.model.xml; package li.strolch.model.xml;
import static li.strolch.model.StrolchModelConstants.DEFAULT_ENCODING;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParserFactory;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.Date; import java.util.Date;
@ -27,6 +31,7 @@ import li.strolch.exception.StrolchException;
import li.strolch.model.Tags; import li.strolch.model.Tags;
import li.strolch.utils.helper.StringHelper; import li.strolch.utils.helper.StringHelper;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
/** /**
@ -34,11 +39,32 @@ import org.xml.sax.SAXException;
*/ */
public class XmlModelSaxStreamReader extends XmlModelSaxReader { public class XmlModelSaxStreamReader extends XmlModelSaxReader {
private InputStream stream; private InputSource source;
public XmlModelSaxStreamReader(StrolchElementListener listener, InputStream stream) { public XmlModelSaxStreamReader(StrolchElementListener listener, InputStream stream) {
this(listener, stream, DEFAULT_ENCODING);
}
public XmlModelSaxStreamReader(StrolchElementListener listener, InputStreamReader reader) {
this(listener, reader, DEFAULT_ENCODING);
}
public XmlModelSaxStreamReader(StrolchElementListener listener, InputStream stream, String encoding) {
super(listener); super(listener);
this.stream = stream;
try {
this.source = new InputSource(new InputStreamReader(stream, encoding));
this.source.setEncoding(encoding);
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException("Encoding " + encoding + " unsupported!");
}
}
public XmlModelSaxStreamReader(StrolchElementListener listener, InputStreamReader reader, String encoding) {
super(listener);
this.source = new InputSource(reader);
this.source.setEncoding(encoding);
} }
@Override @Override
@ -64,7 +90,7 @@ public class XmlModelSaxStreamReader extends XmlModelSaxReader {
SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser(); SAXParser sp = spf.newSAXParser();
sp.parse(this.stream, this); sp.parse(this.source, this);
long endNanos = System.nanoTime(); long endNanos = System.nanoTime();
this.statistics.durationNanos = endNanos - startNanos; this.statistics.durationNanos = endNanos - startNanos;