[ 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-unsubscr...@xalan.apache.org For additional commands, e-mail: dev-h...@xalan.apache.org