Re-use the same transformer with stylesheet containing xsl:key doesn't work
correctly
-------------------------------------------------------------------------------------
Key: XALANJ-2140
URL: http://issues.apache.org/jira/browse/XALANJ-2140
Project: XalanJ2
Type: Bug
Components: XSLTC
Versions: 2.6
Environment: windows jdk 1.4.2_06 xsltc
Reporter: arn44
Priority: Critical
Hello,
I have a problem with a stylesheet containing a xsl:key.
I have the impression that the Transformer object guard into memory preceding
xml source.
Here a testcase to reproduce the problem.
The first transformation and the third should produce the same thing.
It is true with Xalan interpretive.
It is not the case in xsltc.
_________________________
package test;
import junit.framework.TestCase;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.Properties;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
public class XSLTTest extends TestCase {
public XSLTTest(String arg0) {
super(arg0);
}
public void testKey() throws Exception {
String key = "javax.xml.transform.TransformerFactory";
String value = "org.apache.xalan.xsltc.trax.TransformerFactoryImpl";
Properties props = System.getProperties();
props.put(key, value);
System.setProperties(props);
TransformerFactory tFactory = TransformerFactory.newInstance();
String xsl = getClass().getResource("test.xsl").getPath();
//1 transformation
Source xml = new StreamSource(new File(getClass()
.getResource("habP1.xml")
.getPath()));
ByteArrayOutputStream out = new ByteArrayOutputStream();
Transformer transformer = tFactory.newTransformer(new
StreamSource(xsl));
transformer.transform(xml, new StreamResult(out));
System.out.println(out.toString());
//2 transformation
xml = new StreamSource(new File(getClass().getResource("habP0.xml")
.getPath()));
ByteArrayOutputStream out2 = new ByteArrayOutputStream();
transformer.transform(xml, new StreamResult(out2));
System.out.println(out2.toString());
//3 transformation
xml = new StreamSource(new File(getClass().getResource("habP1.xml")
.getPath()));
ByteArrayOutputStream out3 = new ByteArrayOutputStream();
transformer.transform(xml, new StreamResult(out3));
System.out.println(out3.toString());
assertEquals(out.toString(),out3.toString());
}
}
--------test.xsl----------------------
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="ISO-8859-1" indent="yes" />
<xsl:key name="clef_habilitations" match ="action" use = "nom" />
<xsl:template match="/">
-<xsl:value-of select="key('clef_habilitations','nom1')/nom" />-
-<xsl:value-of select="key('clef_habilitations','nom2')/nom" />-
</xsl:template>
</xsl:stylesheet>
---------habP0.xml------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<habilitation>
<action>
<nom>nom1</nom>
</action>
<action>
<nom>nom2</nom>
</action>
<action>
<nom>nom3</nom>
</action>
<action>
<nom>nom4</nom>
</action>
</habilitation>
------------habP1.xml--------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<habilitation>
<action>
<nom>nom1</nom>
</action>
<action>
<nom>nom3</nom>
</action>
<action>
<nom>nom4</nom>
</action>
</habilitation>
----------System.out---------------------
-nom1-
--
-nom1-
-nom2-
-nom1-
-nom3-
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]