[ http://issues.apache.org/jira/browse/XALANJ-2140?page=comments#action_12312785 ]
Henry Zongaro commented on XALANJ-2140: --------------------------------------- It looks like information built for xsl:key from one transformation is contaminating subsequent transformations. I've attached a patch [1] that will clear any xsl:key information gathered at the end of a transformation. [1] http://issues.apache.org/jira/secure/attachment/12310557/j2140.patch.txt > 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 > Attachments: j2140.patch.txt > > 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]
