diff --git a/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java b/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java index bc1c3608..3874f572 100644 --- a/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java +++ b/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java @@ -16,6 +16,7 @@ import java.io.UnsupportedEncodingException; import org.codehaus.plexus.util.ReaderFactory; +import org.codehaus.plexus.util.xml.XmlReader; //import java.util.Hashtable; @@ -663,7 +664,12 @@ public void setInput( Reader in ) reset(); reader = in; - if ( reader instanceof InputStreamReader ) + if ( reader instanceof XmlReader ) { + // encoding already detected + XmlReader xsr = (XmlReader) reader; + fileEncoding = xsr.getEncoding(); + } + else if ( reader instanceof InputStreamReader ) { InputStreamReader isr = (InputStreamReader) reader; if ( isr.getEncoding() != null ) diff --git a/src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java b/src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java index 7b9fe30a..e0be666a 100644 --- a/src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java +++ b/src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java @@ -21,9 +21,15 @@ import static org.junit.Assert.fail; import java.io.EOFException; +import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; import java.io.StringReader; +import java.nio.file.Files; +import java.nio.file.Paths; +import org.codehaus.plexus.util.ReaderFactory; import org.junit.Test; /** @@ -840,4 +846,56 @@ public void testXMLDeclVersionEncodingStandaloneNoSpace() } } + /** + * Issue 163: https://github.com/codehaus-plexus/plexus-utils/issues/163 + * + * @throws IOException if IO error. + * + * @since 3.4.1 + */ + @Test + public void testEncodingISO_8859_1setInputReader() + throws IOException + { + try ( Reader reader = + ReaderFactory.newXmlReader( new File( "src/test/resources/xml", "test-encoding-ISO-8859-1.xml" ) ) ) + { + MXParser parser = new MXParser(); + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + assertTrue( true ); + } + catch ( XmlPullParserException e ) + { + fail( "should not raise exception: " + e ); + } + } + + /** + * Issue 163: https://github.com/codehaus-plexus/plexus-utils/issues/163 + * + * @throws IOException if IO error. + * + * @since 3.4.1 + */ + @Test + public void testEncodingISO_8859_1_setInputStream() + throws IOException + { + try ( InputStream input = + Files.newInputStream( Paths.get( "src/test/resources/xml", "test-encoding-ISO-8859-1.xml" ) ) ) + { + MXParser parser = new MXParser(); + parser.setInput( input, null ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + assertTrue( true ); + } + catch ( XmlPullParserException e ) + { + fail( "should not raise exception: " + e ); + } + } + } diff --git a/src/test/resources/xml/test-encoding-ISO-8859-1.xml b/src/test/resources/xml/test-encoding-ISO-8859-1.xml new file mode 100644 index 00000000..ae0aefe7 --- /dev/null +++ b/src/test/resources/xml/test-encoding-ISO-8859-1.xml @@ -0,0 +1,1503 @@ + + + + 4.0.0 + + org.apache + apache + 16 + + org.apache.commons + commons-parent + pom + 39 + Apache Commons Parent + http://commons.apache.org/ + The Apache Commons Parent POM provides common settings for all Apache Commons components. + + + + + + 3.0.1 + + + + continuum + https://continuum-ci.apache.org/ + + + + + + + scm:svn:http://svn.apache.org/repos/asf/commons/proper/commons-parent/tags/commons-parent-39 + scm:svn:https://svn.apache.org/repos/asf/commons/proper/commons-parent/tags/commons-parent-39 + http://svn.apache.org/viewvc/commons/proper/commons-parent/tags/commons-parent-39 + + + + + + + + Commons User List + user-subscribe@commons.apache.org + user-unsubscribe@commons.apache.org + user@commons.apache.org + http://mail-archives.apache.org/mod_mbox/commons-user/ + + http://markmail.org/list/org.apache.commons.users/ + http://old.nabble.com/Commons---User-f319.html + http://www.mail-archive.com/user@commons.apache.org/ + http://news.gmane.org/gmane.comp.jakarta.commons.user + + + + Commons Dev List + dev-subscribe@commons.apache.org + dev-unsubscribe@commons.apache.org + dev@commons.apache.org + http://mail-archives.apache.org/mod_mbox/commons-dev/ + + http://markmail.org/list/org.apache.commons.dev/ + http://old.nabble.com/Commons---Dev-f317.html + http://www.mail-archive.com/dev@commons.apache.org/ + http://news.gmane.org/gmane.comp.jakarta.commons.devel + + + + Commons Issues List + issues-subscribe@commons.apache.org + issues-unsubscribe@commons.apache.org + http://mail-archives.apache.org/mod_mbox/commons-issues/ + + http://markmail.org/list/org.apache.commons.issues/ + http://old.nabble.com/Commons---Issues-f25499.html + http://www.mail-archive.com/issues@commons.apache.org/ + + + + Commons Commits List + commits-subscribe@commons.apache.org + commits-unsubscribe@commons.apache.org + http://mail-archives.apache.org/mod_mbox/commons-commits/ + + http://markmail.org/list/org.apache.commons.commits/ + http://www.mail-archive.com/commits@commons.apache.org/ + + + + Apache Announce List + announce-subscribe@apache.org + announce-unsubscribe@apache.org + http://mail-archives.apache.org/mod_mbox/www-announce/ + + http://markmail.org/list/org.apache.announce/ + http://old.nabble.com/Apache-News-and-Announce-f109.html + http://www.mail-archive.com/announce@apache.org/ + http://news.gmane.org/gmane.comp.apache.announce + + + + + + + + + src/main/resources + + + + ${basedir} + META-INF + + NOTICE.txt + LICENSE.txt + + + + + + + + src/test/resources + + + + ${basedir} + META-INF + + NOTICE.txt + LICENSE.txt + + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.8 + + + org.apache.maven.plugins + maven-assembly-plugin + 2.5.5 + + + org.apache.maven.plugins + maven-clean-plugin + 2.6.1 + + + org.apache.maven.plugins + maven-compiler-plugin + ${commons.compiler.version} + + ${maven.compiler.source} + ${maven.compiler.target} + ${commons.encoding} + + ${commons.compiler.fork} + + ${commons.compiler.compilerVersion} + ${commons.compiler.javac} + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + org.apache.maven.plugins + maven-install-plugin + 2.5.2 + + + + org.apache.maven.plugins + maven-jar-plugin + 2.6 + + + org.apache.maven.plugins + maven-javadoc-plugin + ${commons.javadoc.version} + + + true + ${commons.encoding} + ${commons.docEncoding} + true + + ${commons.javadoc.java.link} + ${commons.javadoc.javaee.link} + + + + true + true + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.2 + + + + org.apache.maven.plugins + maven-remote-resources-plugin + + 1.5 + + + true + + + + org.apache.maven.plugins + maven-resources-plugin + 2.7 + + + + org.apache.maven.plugins + maven-site-plugin + ${commons.site-plugin.version} + + + true + + + + + org.apache.maven.wagon + wagon-ssh + ${commons.wagon-ssh.version} + + + + + attach-descriptor + + attach-descriptor + + + + + + org.apache.maven.plugins + maven-source-plugin + 2.4 + + + + true + true + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${commons.surefire.version} + + + + org.apache.commons + commons-build-plugin + 1.4 + + ${commons.release.name} + + + + org.apache.felix + maven-bundle-plugin + 2.5.3 + true + + + org.apache.rat + apache-rat-plugin + ${commons.rat.version} + + + org.codehaus.mojo + build-helper-maven-plugin + 1.9.1 + + + org.codehaus.mojo + buildnumber-maven-plugin + 1.3 + + + org.codehaus.mojo + clirr-maven-plugin + ${commons.clirr.version} + + ${minSeverity} + + + + + + + + + + maven-assembly-plugin + + + src/assembly/src.xml + + gnu + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + javadoc.resources + generate-sources + + run + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + true + org.apache.maven.plugins + maven-enforcer-plugin + 1.3.1 + + + enforce-maven-3 + + enforce + + + + + 3.0.0 + + + true + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + ${commons.manifestfile} + + ${project.name} + ${project.version} + ${project.organization.name} + ${project.name} + ${project.version} + ${project.organization.name} + org.apache + ${implementation.build} + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + ${commons.surefire.java} + + + + + org.apache.commons + commons-build-plugin + + + org.apache.felix + maven-bundle-plugin + + + + true + + ${commons.osgi.excludeDependencies} + ${project.build.directory}/osgi + + + <_nouses>true + + <_removeheaders>JAVA_1_3_HOME,JAVA_1_4_HOME,JAVA_1_5_HOME,JAVA_1_6_HOME,JAVA_1_7_HOME,JAVA_1_8_HOME,JAVA_1_9_HOME + ${commons.osgi.symbolicName} + ${commons.osgi.export} + ${commons.osgi.private} + ${commons.osgi.import} + ${commons.osgi.dynamicImport} + ${project.url} + + + + + bundle-manifest + process-classes + + manifest + + + + + + + org.apache.rat + apache-rat-plugin + ${commons.rat.version} + + + + + site-content/** + .checkstyle + .fbprefs + .pmd + src/site/resources/download_*.cgi + src/site/resources/profile.* + + + + + + org.apache.maven.plugins + maven-scm-publish-plugin + ${commons.scm-publish.version} + + ${project.reporting.outputDirectory} + scm:svn:${commons.scmPubUrl} + ${commons.scmPubCheckoutDirectory} + ${commons.scmPubServer} + true + + + + scm-publish + site-deploy + + publish-scm + + + + + + + + + + + + + + org.apache.maven.plugins + maven-changes-plugin + ${commons.changes.version} + + ${basedir}/src/changes/changes.xml + Fix Version,Key,Component,Summary,Type,Resolution,Status + + Fix Version DESC,Type,Key DESC + Fixed + Resolved,Closed + + Bug,New Feature,Task,Improvement,Wish,Test + + true + ${commons.changes.onlyCurrentVersion} + ${commons.changes.maxEntries} + ${commons.changes.runOnlyAtExecutionRoot} + + + + + changes-report + jira-report + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${commons.javadoc.version} + + + true + ${maven.compiler.source} + ${commons.encoding} + ${commons.docEncoding} + true + true + + true + + ${commons.javadoc.java.link} + ${commons.javadoc.javaee.link} + + + + + + default + + javadoc + + + + + + org.apache.maven.plugins + maven-jxr-plugin + ${commons.jxr.version} + + + org.apache.maven.plugins + maven-project-info-reports-plugin + ${commons.project-info.version} + + + + + index + summary + modules + + project-team + scm + issue-tracking + mailing-list + dependency-info + dependency-management + dependencies + dependency-convergence + cim + + + distribution-management + + + + + + org.apache.maven.plugins + maven-site-plugin + ${commons.site-plugin.version} + + + + navigation.xml,changes.xml + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + ${commons.surefire-report.version} + + ${commons.surefire-report.aggregate} + + + + + org.apache.rat + apache-rat-plugin + ${commons.rat.version} + + + + + site-content/** + .checkstyle + .fbprefs + .pmd + src/site/resources/download_*.cgi + src/site/resources/profile.* + + + + + org.codehaus.mojo + clirr-maven-plugin + ${commons.clirr.version} + + ${minSeverity} + + + + org.codehaus.mojo + jdepend-maven-plugin + ${commons.jdepend.version} + + + + + + + + + parse-target-version + + + + user.home + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + parse-version + + + parse-version + + + javaTarget + ${maven.compiler.target} + + + + + + + + + + + + animal-sniffer + + + + src/site/resources/profile.noanimal + + + + + + java${javaTarget.majorVersion}${javaTarget.minorVersion} + + + + + + + + org.codehaus.mojo + animal-sniffer-maven-plugin + ${commons.animal-sniffer.version} + + + checkAPIcompatibility + + + + check + + + + + + org.codehaus.mojo.signature + ${animal-sniffer.signature} + ${commons.animal-sniffer.signature.version} + + + + + + + + + + jacoco + + + + src/site/resources/profile.jacoco + + + + + + org.jacoco + jacoco-maven-plugin + ${commons.jacoco.version} + + + + prepare-agent + process-test-classes + + prepare-agent + + + + report + site + + report + + + + check + + check + + + + + BUNDLE + + + CLASS + COVEREDRATIO + ${commons.jacoco.classRatio} + + + INSTRUCTION + COVEREDRATIO + ${commons.jacoco.instructionRatio} + + + METHOD + COVEREDRATIO + ${commons.jacoco.methodRatio} + + + BRANCH + COVEREDRATIO + ${commons.jacoco.branchRatio} + + + LINE + COVEREDRATIO + ${commons.jacoco.lineRatio} + + + COMPLEXITY + COVEREDRATIO + ${commons.jacoco.complexityRatio} + + + + + ${commons.jacoco.haltOnFailure} + + + + + + + + + + org.jacoco + jacoco-maven-plugin + ${commons.jacoco.version} + + + + + + + cobertura + + + src/site/resources/profile.cobertura + + + + + + org.codehaus.mojo + cobertura-maven-plugin + ${commons.cobertura.version} + + + + + + + + release + + + + + maven-gpg-plugin + + ${gpg.passphrase} + + + + sign-artifacts + verify + + sign + + + + + + maven-install-plugin + + true + + + + maven-source-plugin + + + create-source-jar + + jar + test-jar + + + + + + maven-jar-plugin + + + + test-jar + + + + true + + + + + + maven-release-plugin + + + -Prelease + + + + maven-javadoc-plugin + + + create-javadoc-jar + + javadoc + jar + + package + + + + ${maven.compiler.source} + + + + maven-assembly-plugin + true + + + + single + + package + + + + + + + + + + apache-release + + + + maven-release-plugin + + apache-release + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-test-sources + + test-jar + + + + + + maven-install-plugin + + true + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + + + + + + java-1.3 + + true + 1.3 + ${JAVA_1_3_HOME}/bin/javac + ${JAVA_1_3_HOME}/bin/java + + + + + + java-1.4 + + true + 1.4 + ${JAVA_1_4_HOME}/bin/javac + ${JAVA_1_4_HOME}/bin/java + + 2.11 + + + + + + java-1.5 + + true + 1.5 + ${JAVA_1_5_HOME}/bin/javac + ${JAVA_1_5_HOME}/bin/java + + + + + + java-1.6 + + true + 1.6 + ${JAVA_1_6_HOME}/bin/javac + ${JAVA_1_6_HOME}/bin/java + + + + + + java-1.7 + + true + 1.7 + ${JAVA_1_7_HOME}/bin/javac + ${JAVA_1_7_HOME}/bin/java + + + + + + java-1.8 + + true + 1.8 + ${JAVA_1_8_HOME}/bin/javac + ${JAVA_1_8_HOME}/bin/java + + + + + + java-1.9 + + true + 1.9 + ${JAVA_1_9_HOME}/bin/javac + ${JAVA_1_9_HOME}/bin/java + + + + + + + + test-deploy + + id::default::file:target/deploy + + + + + + release-notes + + + + org.apache.maven.plugins + maven-changes-plugin + ${commons.changes.version} + + + src/changes + true + . + RELEASE-NOTES.txt + + ${commons.release.version} + + + + + create-release-notes + generate-resources + + announcement-generate + + + + + + + + + + + svn-buildnumber + + + !buildNumber.skip + !true + + + + + + org.codehaus.mojo + buildnumber-maven-plugin + + + generate-resources + + create + + + + + + true + + ?????? + false + false + + + + + + + + javasvn + + + + org.codehaus.mojo + buildnumber-maven-plugin + + + javasvn + + + + + + + + + jdk7-plugin-fix-version + + [1.7,) + + + + 3.0.0 + + 1.14 + + + + + + site-basic + + true + true + true + true + true + true + true + true + true + true + + + + + + + + ${project.version} + RC1 + COMMONSSITE + + + + 1.3 + 1.3 + + + false + + + + + + 2.18.1 + 2.18.1 + 2.10.3 + 0.11 + 2.11 + 2.6.1 + 2.5 + 2.8 + 2.8 + 3.4 + 0.7.5.201505241946 + 2.7 + 2.0 + 3.3 + 1.1 + 2.5.5 + + 1.11 + + 1.0 + + + ${project.artifactId}-${commons.release.version} + + -bin + ${project.artifactId}-${commons.release.2.version} + + -bin + ${project.artifactId}-${commons.release.3.version} + + -bin + + + 1.00 + 0.90 + 0.95 + 0.85 + 0.85 + 0.90 + false + + + ${project.artifactId} + + + org.apache.commons.${commons.componentid} + org.apache.commons.*;version=${project.version};-noimport:=true + * + + + true + + + ${project.build.directory}/osgi/MANIFEST.MF + + + scp + + + iso-8859-1 + + ${commons.encoding} + + ${commons.encoding} + + ${commons.encoding} + + + http://docs.oracle.com/javase/7/docs/api/ + http://docs.oracle.com/javaee/6/api/ + + + yyyy-MM-dd HH:mm:ssZ + ${scmBranch}@r${buildNumber}; ${maven.build.timestamp} + + + info + + + 100 + + + false + + + false + + 100 + + false + + + ${user.home}/commons-sites + + ${project.artifactId} + + https://svn.apache.org/repos/infra/websites/production/commons/content/proper/${project.artifactId} + ${commons.site.cache}/${commons.site.path} + commons.site + + https://analysis.apache.org/ + + + +