You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by "Jens Annighöfer (JIRA)" <ji...@apache.org> on 2018/04/25 10:21:00 UTC
[jira] [Updated] (XALANJ-2614) Serializer 2.7.2 / Xalan 2.7.2 - Bug
using Mime-Encoding 'ISO-8859-1'
[ https://issues.apache.org/jira/browse/XALANJ-2614?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jens Annighöfer updated XALANJ-2614:
------------------------------------
Description:
We found a problem using Xalan / Serializer with Java 9 and 10 when transforming an XML document with a styleheet containing an output-encoding.
{code:xml|title=Simple input|borderStyle=solid}
<?xml version="1.0" encoding="UTF-8"?>
<Message>
<Value>This is a test input.</Value>
</Message>
{code}
{code:xml|title=Simple stylesheet containing an output-encoding|borderStyle=solid}
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" indent="no" encoding="ISO-8859-1"/>
<xsl:template match="/">
<xsl:text>Tramsformed text: </xsl:text>
<xsl:value-of select="//Message/Value"/>
</xsl:template>
</xsl:stylesheet>
{code}
{code:java|title=Simple transformation code|borderStyle=solid}
@Test
public void test2() throws Exception {
final InputStream is1 = Java9Test.class.getClassLoader().getResourceAsStream("test/Input.xml");
assertNotNull(is1);
final Document input = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is1);
assertNotNull(input);
final InputStream is2 = Java9Test.class.getClassLoader().getResourceAsStream("test/Transform.xsl");
assertNotNull(is2);
final OutputStream os = new FileOutputStream("Output-" + System.getProperty("java.version") + ".txt", false);
StreamSource xsl = new StreamSource(is2);
Transformer t = TransformerFactory.newInstance().newTransformer(xsl);
DOMSource src = new DOMSource(input);
t.transform(src, new StreamResult(os));
}
{code}
Using Java 7 or Java 8 the result is correct: \{{Tramsformed text: This is a test input.}}. Using Java 9 or Java 10 the result is not correct:
{noformat}Tramsformed text: This is a test input.
{noformat}
indicating an invalid or unknown encoding.
In Java 7 or Java 8 _org.apache.xml.serializer.Encodings.getEncodingInfo("ISO-8859-1")_ returns "ISO8859_1" which is a valid Java encoding name. In Java 9 oder Java 10 the method returns "8859-1" which is not a valid name.
The problem is caused by a change to the method _keys()_ in the _java.util.Properties_ class. This method returns die entries of the _Encodings.properties_ in a different order since Java 9.
was:
We found a problem using Xalan / Serializer with Java 9 and 10 when transforming an XML document with a styleheet containing an output-encoding.
{code:xml|title=Simple input|borderStyle=solid}
<?xml version="1.0" encoding="UTF-8"?>
<Message>
<Value>This is a test input.</Value>
</Message>
{code}
{code:xml|title=Simple stylesheet containing an output-encoding|borderStyle=solid}
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" indent="no" encoding="ISO-8859-1"/>
<xsl:template match="/">
<xsl:text>Tramsformed text: </xsl:text>
<xsl:value-of select="//Message/Value"/>
</xsl:template>
</xsl:stylesheet>
{code}
{code:java|title=Simple transformation code|borderStyle=solid}
@Test
public void test2() throws Exception {
final InputStream is1 = Java9Test.class.getClassLoader().getResourceAsStream("test/Input.xml");
assertNotNull(is1);
final Document input = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is1);
assertNotNull(input);
final InputStream is2 = Java9Test.class.getClassLoader().getResourceAsStream("test/Transform.xsl");
assertNotNull(is2);
final OutputStream os = new FileOutputStream("Output-" + System.getProperty("java.version") + ".txt", false);
StreamSource xsl = new StreamSource(is2);
Transformer t = TransformerFactory.newInstance().newTransformer(xsl);
DOMSource src = new DOMSource(input);
t.transform(src, new StreamResult(os));
}
{code}
Using Java 7 or Java 8 the result is correct: \{{Tramsformed text: This is a test input.}}. Using Java 9 or Java 10 the result is not correct: \{{Tramsformed text: This is a test input.}} indicating an invalid or unknown encoding.
In Java 7 or Java 8 _org.apache.xml.serializer.Encodings.getEncodingInfo("ISO-8859-1")_ returns "ISO8859_1" which is a valid Java encoding name. In Java 9 oder Java 10 the method returns "8859-1" which is not a valid name.
The problem is caused by a change to the method _keys()_ in the _java.util.Properties_ class. This method returns die entries of the _Encodings.properties_ in a different order since Java 9.
> Serializer 2.7.2 / Xalan 2.7.2 - Bug using Mime-Encoding 'ISO-8859-1'
> ---------------------------------------------------------------------
>
> Key: XALANJ-2614
> URL: https://issues.apache.org/jira/browse/XALANJ-2614
> Project: XalanJ2
> Issue Type: Bug
> Security Level: No security risk; visible to anyone(Ordinary problems in Xalan projects. Anybody can view the issue.)
> Components: Serialization
> Affects Versions: 2.7.2
> Environment: Windows 10, Linux
> Java 9, Java 10
> Reporter: Jens Annighöfer
> Assignee: Steven J. Hathaway
> Priority: Critical
> Fix For: The Latest Development Code
>
> Attachments: test.zip
>
>
> We found a problem using Xalan / Serializer with Java 9 and 10 when transforming an XML document with a styleheet containing an output-encoding.
> {code:xml|title=Simple input|borderStyle=solid}
> <?xml version="1.0" encoding="UTF-8"?>
> <Message>
> <Value>This is a test input.</Value>
> </Message>
> {code}
> {code:xml|title=Simple stylesheet containing an output-encoding|borderStyle=solid}
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
> <xsl:output method="text" indent="no" encoding="ISO-8859-1"/>
> <xsl:template match="/">
> <xsl:text>Tramsformed text: </xsl:text>
> <xsl:value-of select="//Message/Value"/>
> </xsl:template>
> </xsl:stylesheet>
> {code}
> {code:java|title=Simple transformation code|borderStyle=solid}
> @Test
> public void test2() throws Exception {
> final InputStream is1 = Java9Test.class.getClassLoader().getResourceAsStream("test/Input.xml");
> assertNotNull(is1);
> final Document input = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is1);
> assertNotNull(input);
> final InputStream is2 = Java9Test.class.getClassLoader().getResourceAsStream("test/Transform.xsl");
> assertNotNull(is2);
> final OutputStream os = new FileOutputStream("Output-" + System.getProperty("java.version") + ".txt", false);
> StreamSource xsl = new StreamSource(is2);
> Transformer t = TransformerFactory.newInstance().newTransformer(xsl);
> DOMSource src = new DOMSource(input);
> t.transform(src, new StreamResult(os));
> }
> {code}
> Using Java 7 or Java 8 the result is correct: \{{Tramsformed text: This is a test input.}}. Using Java 9 or Java 10 the result is not correct:
> {noformat}Tramsformed text: This is a test input.
> {noformat}
> indicating an invalid or unknown encoding.
> In Java 7 or Java 8 _org.apache.xml.serializer.Encodings.getEncodingInfo("ISO-8859-1")_ returns "ISO8859_1" which is a valid Java encoding name. In Java 9 oder Java 10 the method returns "8859-1" which is not a valid name.
> The problem is caused by a change to the method _keys()_ in the _java.util.Properties_ class. This method returns die entries of the _Encodings.properties_ in a different order since Java 9.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xalan.apache.org
For additional commands, e-mail: dev-help@xalan.apache.org