Updated Branches: refs/heads/wicket-6.x 500651839 -> 68828cde2
WICKET-5398 don't use possibly conflicting encoding from XML declaration when parsing a String Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/68828cde Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/68828cde Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/68828cde Branch: refs/heads/wicket-6.x Commit: 68828cde24e00e47d0d3a80745c04391000b55a9 Parents: 5006518 Author: svenmeier <[email protected]> Authored: Tue Oct 29 10:08:47 2013 +0100 Committer: svenmeier <[email protected]> Committed: Tue Oct 29 10:08:47 2013 +0100 ---------------------------------------------------------------------- .../wicket/markup/parser/XmlPullParser.java | 27 ++++++++++++-------- .../wicket/markup/parser/XmlPullParserTest.java | 22 ++++++++++++++++ 2 files changed, 39 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/68828cde/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java index 262b795..377138a 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java @@ -17,9 +17,9 @@ package org.apache.wicket.markup.parser; import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.text.ParseException; import org.apache.wicket.markup.parser.XmlTag.TagType; @@ -48,10 +48,9 @@ public final class XmlPullParser implements IXmlPullParser public static final String SCRIPT = "script"; /** - * Reads the xml data from an input stream and converts the chars according to its encoding - * (<?xml ... encoding="..." ?>) + * The encoding of the XML. */ - private XmlReader xmlReader; + private String encoding; /** * A XML independent reader which loads the whole source data into memory and which provides @@ -84,7 +83,7 @@ public final class XmlPullParser implements IXmlPullParser @Override public final String getEncoding() { - return xmlReader.getEncoding(); + return encoding; } @Override @@ -544,7 +543,10 @@ public final class XmlPullParser implements IXmlPullParser @Override public void parse(final CharSequence string) throws IOException { - parse(new ByteArrayInputStream(string.toString().getBytes()), null); + Args.notNull(string, "string"); + + this.input = new FullyBufferedReader(new StringReader(string.toString())); + this.encoding = null; } /** @@ -554,6 +556,8 @@ public final class XmlPullParser implements IXmlPullParser * @param in * The input stream to read and parse * @throws IOException + * + * @see {@link #parse(InputStream, String)} */ @Override public void parse(final InputStream in) throws IOException @@ -563,7 +567,9 @@ public final class XmlPullParser implements IXmlPullParser } /** - * Reads and parses markup from an input stream + * Reads and parses markup from an input stream. + * <p> + * Note: The input is closed after parsing. * * @param inputStream * The input stream to read and parse @@ -578,13 +584,14 @@ public final class XmlPullParser implements IXmlPullParser try { - xmlReader = new XmlReader(new BufferedInputStream(inputStream, 4000), encoding); - input = new FullyBufferedReader(xmlReader); + XmlReader xmlReader = new XmlReader(new BufferedInputStream(inputStream, 4000), + encoding); + this.input = new FullyBufferedReader(xmlReader); + this.encoding = xmlReader.getEncoding(); } finally { IOUtils.closeQuietly(inputStream); - IOUtils.closeQuietly(xmlReader); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/68828cde/wicket-core/src/test/java/org/apache/wicket/markup/parser/XmlPullParserTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/parser/XmlPullParserTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/parser/XmlPullParserTest.java index 2e26d05..ac88a6f 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/parser/XmlPullParserTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/parser/XmlPullParserTest.java @@ -194,6 +194,28 @@ public class XmlPullParserTest extends Assert } /** + * WICKET-5398 parsing from String + */ + @Test + public void encodingOfString() throws Exception + { + // use an encoding that is not the system's file encoding + final String encoding; + if ("UTF-8".equals(System.getProperty("file.encoding"))) + { + encoding = "ISO-8859-1"; + } + else + { + encoding = "UTF-8"; + } + + final XmlPullParser parser = new XmlPullParser(); + parser.parse(String.format("<?xml encoding='%s' ?><span id='umlaut-äöü'></span>", encoding)); + assertEquals("umlaut-äöü", parser.nextTag().getAttribute("id")); + } + + /** * * @throws Exception */
