You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2001/10/23 21:04:56 UTC

DO NOT REPLY [Bug 4375] New: - Using a StringReader in the InputSource of stylesheet causes incorrect character encoding

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4375>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4375

Using a StringReader in the InputSource of stylesheet causes incorrect character encoding

           Summary: Using a StringReader in the InputSource of stylesheet
                    causes incorrect character encoding
           Product: XalanJ2
           Version: 2.2.x
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Xalan
        AssignedTo: xalan-dev@xml.apache.org
        ReportedBy: jmeyer@cstlink.com


In my trasformation class, I receive xsl markup as a Java String.  Xalan doesn't
take into account that the Java-String is always encoded in UniCode and not by
the encoding in the xml declaration.

Note: This issue does not occur when using a StringReader for the xml source.

----------
Test Case:
----------
    FileReader fReader = new FileReader("foo.xsl");
    StringWriter sWriter = new StringWriter();
    int c;
    while ((c=fReader.read()) != -1) {
      sWriter.write(c);
    }
    TransformerFactory tFactory = TransformerFactory.newInstance();

    Transformer transformer = tFactory.newTransformer
                (new javax.xml.transform.stream.StreamSource
                (new StringReader(sWriter.toString())));

    transformer.transform(new StreamSource("foo.xml"),
                          new StreamResult(new FileOutputStream("foo.out")));

--------
foo.xml:
--------
<?xml version="1.0" encoding="UTF-8"?>
<root>
	<child1>
		<xsl-copy>foo</xsl-copy>
	</child1>
	<child2>
		<copy>�</copy>
	</child2>
	<child3>bar</child3>
</root>

--------
foo.xsl:
--------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:template match="node()">
		<xsl:copy>
			<xsl:copy-of select="@*"/>
			<xsl:apply-templates/>
		</xsl:copy>
	</xsl:template>
	<xsl:template match="xsl-copy">
		<xsl:copy>�</xsl:copy>
	</xsl:template>
</xsl:stylesheet>


----------------
expected output:
----------------
<?xml version="1.0" encoding="UTF-8"?>
<root>
	<child1>
		<xsl-copy>@</xsl-copy>
	</child1>
	<child2>
		<copy>�</copy>
	</child2>
	<child3>bar</child3>
</root>

--------------
actual output:
--------------
<?xml version="1.0" encoding="UTF-8"?>
<root>
	<child1>
		<xsl-copy>©</xsl-copy>
	</child1>
	<child2>
		<copy>�</copy>
	</child2>
	<child3>bar</child3>
</root>