-
Bug
-
Resolution: Fixed
-
P3
-
5.0
-
b90
-
x86
-
windows_xp
FULL PRODUCT VERSION :
Java Plug-in 1.5.0_03
Verwendung der JRE-Version 1.5.0_03 Java HotSpot(TM) Client VM
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
EXTRA RELEVANT SYSTEM CONFIGURATION :
MS Internet Explorer 6.0.2900.2180.xpsp_sp2_gdr.050301-1519
A DESCRIPTION OF THE PROBLEM :
XSLTC fails internally on <xsl:sort> in an applet. The sorted elements are just missing from the transformed xml output.
Looking at the source code revealed the following:
The method com.sun.org.apache.xalan.internal.xsltc.dom.NodeSortRecord.initialize tries to read the property "com.sun.org.apache.xalan.internal.xsltc.COLLATOR_FACTORY". This fails with a SecurityException. The exception is silently consumed in method com.sun.org.apache.xalan.internal.xsltc.dom.SortingIterator.setStartNode(int). Catching the exception skips the calls to addRecord leaving the parent xml element empty.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile attached source code and run with "java -Djava.security.manager".
The program sorts the child elements of <a> alphabetically:
<?xml version="1.0"?><a><c/><b/><d/></a>
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
<?xml version="1.0" encoding="UTF-8"?><a><b/><c/><d/></a>
ACTUAL -
<?xml version="1.0" encoding="UTF-8"?><a/>
ERROR MESSAGES/STACK TRACES THAT OCCUR :
None. Enabling "-Djava.security.debug=access:failure" prints:
[...]
access: access denied (java.util.PropertyPermission com.sun.org.apache.xalan.internal.xsltc.COLLATOR_FACTORY read)
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1158)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:253)
at java.security.AccessController.checkPermission(AccessController.java:427)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
at java.lang.System.getProperty(System.java:627)
at com.sun.org.apache.xalan.internal.xsltc.dom.NodeSortRecord.initialize(NodeSortRecord.java:107)
at com.sun.org.apache.xalan.internal.xsltc.dom.NodeSortRecordFactory.makeNodeSortRecord(NodeSortRecordFactory.java:151)
at com.sun.org.apache.xalan.internal.xsltc.dom.SortingIterator.setStartNode(SortingIterator.java:59)
at GregorSamsa.template$dot$1()
at GregorSamsa.applyTemplates()
at GregorSamsa.applyTemplates()
at GregorSamsa.transform()
at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:594)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:640)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:279)
at test.TestXsltcApplet.sortTransform(TestXsltcApplet.java:79)
at test.TestXsltcApplet.main(TestXsltcApplet.java:33)
access: access allowed (java.security.SecurityPermission getPolicy)
access: domain that failed ProtectionDomain (null <no signer certificates>)
com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl$TransletClassLoader@1dd46f7
<no principals>
java.security.Permissions@1f4689e (
(java.lang.RuntimePermission stopThread)
(java.util.PropertyPermission java.version read)
(java.util.PropertyPermission java.vm.name read)
(java.util.PropertyPermission java.vm.vendor read)
(java.util.PropertyPermission os.name read)
(java.util.PropertyPermission java.vendor.url read)
(java.util.PropertyPermission java.vm.specification.vendor read)
(java.util.PropertyPermission java.specification.vendor read)
(java.util.PropertyPermission os.version read)
(java.util.PropertyPermission java.specification.name read)
(java.util.PropertyPermission java.class.version read)
(java.util.PropertyPermission file.separator read)
(java.util.PropertyPermission java.vm.version read)
(java.util.PropertyPermission os.arch read)
(java.util.PropertyPermission java.vm.specification.name read)
(java.util.PropertyPermission java.vm.specification.version read)
(java.util.PropertyPermission java.specification.version read)
(java.util.PropertyPermission java.vendor read)
(java.util.PropertyPermission path.separator read)
(java.util.PropertyPermission line.separator read)
(java.net.SocketPermission localhost:1024- listen,resolve)
)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
/** *
* @author Copyright © SOLYP Informatik GmbH 2005
* @author Frank Rösel
*/
public class TestXsltcApplet extends Object
{
public static void main(String[] args)
{
TestXsltcApplet applet = new TestXsltcApplet();
applet.sortTransform();
}
public void sortTransform()
{
String xsl =
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +"\n"+
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"" +"\n"+
" version=\"1.0\" >" +"\n"+
"" +"\n"+
" <xsl:strip-space elements=\"*\" />" +"\n"+
"" +"\n"+
" <xsl:template match=\"*|comment()|processing-instruction()\">" +"\n"+
" <xsl:copy>" +"\n"+
" <xsl:copy-of select=\"@*\" />" +"\n"+
" <xsl:apply-templates select=\"*|text()|comment()|processing-instruction()\"/>" +"\n"+
" </xsl:copy>" +"\n"+
" </xsl:template>" +"\n"+
"" +"\n"+
" <xsl:template match=\"a\">" +"\n"+
" <xsl:copy>" +"\n"+
" <xsl:copy-of select=\"@*\" />" +"\n"+
" <xsl:apply-templates>" +"\n"+
" <xsl:sort select=\"local-name(.)\" data-type=\"text\"/>" +"\n"+
" </xsl:apply-templates>" +"\n"+
" </xsl:copy>" +"\n"+
" </xsl:template>" +"\n"+
"" +"\n"+
"</xsl:stylesheet>";
String xml = "<?xml version=\"1.0\"?>" +
"<a>" +
"<c/>" +
"<b/>" +
"<d/>" +
"</a>";
try {
Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(xsl)));
StringWriter writer = new StringWriter();
transformer.transform(new StreamSource(new StringReader(xml)), new StreamResult(writer));
System.out.println(writer.toString());
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
---------- END SOURCE ----------
###@###.### 2005-06-03 16:10:02 GMT
Java Plug-in 1.5.0_03
Verwendung der JRE-Version 1.5.0_03 Java HotSpot(TM) Client VM
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
EXTRA RELEVANT SYSTEM CONFIGURATION :
MS Internet Explorer 6.0.2900.2180.xpsp_sp2_gdr.050301-1519
A DESCRIPTION OF THE PROBLEM :
XSLTC fails internally on <xsl:sort> in an applet. The sorted elements are just missing from the transformed xml output.
Looking at the source code revealed the following:
The method com.sun.org.apache.xalan.internal.xsltc.dom.NodeSortRecord.initialize tries to read the property "com.sun.org.apache.xalan.internal.xsltc.COLLATOR_FACTORY". This fails with a SecurityException. The exception is silently consumed in method com.sun.org.apache.xalan.internal.xsltc.dom.SortingIterator.setStartNode(int). Catching the exception skips the calls to addRecord leaving the parent xml element empty.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile attached source code and run with "java -Djava.security.manager".
The program sorts the child elements of <a> alphabetically:
<?xml version="1.0"?><a><c/><b/><d/></a>
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
<?xml version="1.0" encoding="UTF-8"?><a><b/><c/><d/></a>
ACTUAL -
<?xml version="1.0" encoding="UTF-8"?><a/>
ERROR MESSAGES/STACK TRACES THAT OCCUR :
None. Enabling "-Djava.security.debug=access:failure" prints:
[...]
access: access denied (java.util.PropertyPermission com.sun.org.apache.xalan.internal.xsltc.COLLATOR_FACTORY read)
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1158)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:253)
at java.security.AccessController.checkPermission(AccessController.java:427)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
at java.lang.System.getProperty(System.java:627)
at com.sun.org.apache.xalan.internal.xsltc.dom.NodeSortRecord.initialize(NodeSortRecord.java:107)
at com.sun.org.apache.xalan.internal.xsltc.dom.NodeSortRecordFactory.makeNodeSortRecord(NodeSortRecordFactory.java:151)
at com.sun.org.apache.xalan.internal.xsltc.dom.SortingIterator.setStartNode(SortingIterator.java:59)
at GregorSamsa.template$dot$1()
at GregorSamsa.applyTemplates()
at GregorSamsa.applyTemplates()
at GregorSamsa.transform()
at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:594)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:640)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:279)
at test.TestXsltcApplet.sortTransform(TestXsltcApplet.java:79)
at test.TestXsltcApplet.main(TestXsltcApplet.java:33)
access: access allowed (java.security.SecurityPermission getPolicy)
access: domain that failed ProtectionDomain (null <no signer certificates>)
com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl$TransletClassLoader@1dd46f7
<no principals>
java.security.Permissions@1f4689e (
(java.lang.RuntimePermission stopThread)
(java.util.PropertyPermission java.version read)
(java.util.PropertyPermission java.vm.name read)
(java.util.PropertyPermission java.vm.vendor read)
(java.util.PropertyPermission os.name read)
(java.util.PropertyPermission java.vendor.url read)
(java.util.PropertyPermission java.vm.specification.vendor read)
(java.util.PropertyPermission java.specification.vendor read)
(java.util.PropertyPermission os.version read)
(java.util.PropertyPermission java.specification.name read)
(java.util.PropertyPermission java.class.version read)
(java.util.PropertyPermission file.separator read)
(java.util.PropertyPermission java.vm.version read)
(java.util.PropertyPermission os.arch read)
(java.util.PropertyPermission java.vm.specification.name read)
(java.util.PropertyPermission java.vm.specification.version read)
(java.util.PropertyPermission java.specification.version read)
(java.util.PropertyPermission java.vendor read)
(java.util.PropertyPermission path.separator read)
(java.util.PropertyPermission line.separator read)
(java.net.SocketPermission localhost:1024- listen,resolve)
)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
/** *
* @author Copyright © SOLYP Informatik GmbH 2005
* @author Frank Rösel
*/
public class TestXsltcApplet extends Object
{
public static void main(String[] args)
{
TestXsltcApplet applet = new TestXsltcApplet();
applet.sortTransform();
}
public void sortTransform()
{
String xsl =
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +"\n"+
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"" +"\n"+
" version=\"1.0\" >" +"\n"+
"" +"\n"+
" <xsl:strip-space elements=\"*\" />" +"\n"+
"" +"\n"+
" <xsl:template match=\"*|comment()|processing-instruction()\">" +"\n"+
" <xsl:copy>" +"\n"+
" <xsl:copy-of select=\"@*\" />" +"\n"+
" <xsl:apply-templates select=\"*|text()|comment()|processing-instruction()\"/>" +"\n"+
" </xsl:copy>" +"\n"+
" </xsl:template>" +"\n"+
"" +"\n"+
" <xsl:template match=\"a\">" +"\n"+
" <xsl:copy>" +"\n"+
" <xsl:copy-of select=\"@*\" />" +"\n"+
" <xsl:apply-templates>" +"\n"+
" <xsl:sort select=\"local-name(.)\" data-type=\"text\"/>" +"\n"+
" </xsl:apply-templates>" +"\n"+
" </xsl:copy>" +"\n"+
" </xsl:template>" +"\n"+
"" +"\n"+
"</xsl:stylesheet>";
String xml = "<?xml version=\"1.0\"?>" +
"<a>" +
"<c/>" +
"<b/>" +
"<d/>" +
"</a>";
try {
Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(xsl)));
StringWriter writer = new StringWriter();
transformer.transform(new StreamSource(new StringReader(xml)), new StreamResult(writer));
System.out.println(writer.toString());
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
---------- END SOURCE ----------
###@###.### 2005-06-03 16:10:02 GMT