set:distinct() over attribute list breaks XSLTC throwing HIERARCHY_REQUEST_ERR ------------------------------------------------------------------------------
Key: XALANJ-2424 URL: https://issues.apache.org/jira/browse/XALANJ-2424 Project: XalanJ2 Issue Type: Bug Components: XSLTC Affects Versions: 2.7, 2.7.1 Environment: Linux, Sun java 1.6 Reporter: Илья Казначеев If you do set:distinct over attribute list, XSLTC-compiled translet throws HIERARCHY_REQUEST_ERR exception. Exception is localised to point where set:distinct is called, even if it is assigned into a variable. Test case: <code><pre><tt><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:set="http://exslt.org/sets" version="1.0"> <xsl:output method="html" /> <xsl:template match="/"> <xsl:variable name="attrs" select="set:distinct(source/element/@attr)" /> <html><body> <xsl:for-each select="$attrs"> <xsl:value-of select="." /> </xsl:for-each> </body></html> </xsl:template> </xsl:stylesheet></tt></pre></code> With xml <code><pre><tt><source> <element attr="val1" name="foobar" /> <element attr="val2" name="bar" /> <element attr="val2" name="baz" /> <element attr="val3" name="baz" /> </source></tt></pre></code> that will cause an Exception to be thrown when variable is assigned. My unedicated guess is that it tries to apply-templates over selected nodes into document in place where set:distinct is computed. This happens, as I see for different partially-serialized document, before variable's enclosing element is closed. I've disassembled the stylesheet but didn't understand much from there, it goes like this: <code><pre><tt> // 30 66:invokeinterface #110 <Method org.w3c.dom.NodeList DOM.makeNodeList(DTMAxisIterator)> // 31 71:invokestatic #116 <Method org.w3c.dom.NodeList ExsltSets.distinct(org.w3c.dom.NodeList)> // 32 74:aload_0 // 33 75:aload_1 // 34 76:invokestatic #122 <Method DTMAxisIterator BasisLibrary.nodeList2Iterator(org.w3c.dom.NodeList, org.apache.xalan.xsltc.Translet, DOM)> // 35 79:new #126 <Class CachedNodeListIterator> // 36 82:dup_x1 // 37 83:swap // 38 84:invokespecial #127 <Method void CachedNodeListIterator(DTMAxisIterator)> // 39 87:iload 4 // 40 89:invokeinterface #41 <Method DTMAxisIterator DTMAxisIterator.setStartNode(int)> // 41 94:astore 9 // 42 96:aload_3 // 43 97:ldc1 #129 <String "html"> // 44 99:dup2 // 45 100:invokeinterface #14 <Method void SerializationHandler.startElement(String)></tt></pre></code> -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]