Uploaded image for project: 'XalanJ2'
  1. XalanJ2
  2. XALANJ-2438

[PATCH] XSLTC ignores XPath predicates in xsl:key elements

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Blocker
    • Resolution: Unresolved
    • The Latest Development Code
    • XSLTC
    • None
    • Linux and Windows XP with Sun JRE 1.5.0_14, 1.5.0_15, 1.6.0_04 and 1.6.0_05
    • PatchAvailable

    Description

      The Xalan XSLT compiler (XSLTC) ignores XPath predicates in xsl:key
      elements since the class 'org.apache.xalan.xsltc.compiler.Stylesheet'
      was rearranged in august 2003 to reorder the compilation of top level
      XSLT elements (including keys) to respect dependencies between global
      XSLT variables and keys. Method 'compileTopLevel' was changed to emit
      code also for key elements and not emit code calling the method generated
      by 'compileBuildKeys'. For this reason the byte code for each key element
      is generated twice: First time into generated method 'buildKeys' from
      'compileBuildKeys' and second time into generated method 'topLevel'
      from 'compileTopLevel'. Method 'buildKeys' is still necessary, because
      it is called by the XSLT 'document' function, if additional input
      documents are loaded later.

      Unfortunately the translate method of some XPath elements expected to
      be called only once and they remove sub elements while their first execution.
      So all XPath predicates get lost in class 'org.apache.xalan.xsltc.compiler.FilterExpr'
      and 'org.apache.xalan.xsltc.compiler.Step' by a remove operation on
      the '_predicates' container while the execution from 'compileBuildKeys'.
      So 'compileTopLevel' generates wrong code for all key elements containing
      predicates in their XPath expressions.

      The attached patch changes the 'FilterExpr' and 'Step' class to use an
      index variable to determine the current predicate and to not remove them.
      This patch was tested with the current Subversion version of Xalan
      (last change of Xalan tree in revision 584164) and with Sun JDK 1.5.0_14,
      1.5.0_15, 1.6.0_04 and 1.6.0_05.

      This bug exists also in Sun JRE 1.6 (1.6.0 up to 1.6.0_05) and JRE 1.5
      (since 1.5.0_12 up to 1.5.0_15) in classes
      'com.sun.org.apache.xalan.internal.xsltc.compiler.FilterExpr' and
      'com.sun.org.apache.xalan.internal.xsltc.compiler.Step'. The attached
      test JAR file contains also patches for these versions and fixes in form
      of JAR files to be installed into '../jre/lib/endorsed' directories of
      Sun JRE installations. The last Sun JRE version with correct handling
      of xls:key elements is 1.5.0_11.

      Please add the attached test files to the Xalan test suite. I have
      released them under Apache license version 2.0.

      Helge Schulz - OpenSHORE.org

      Attachments

        1. PredicateInKey-XSLT-Test-1.3.jar
          34 kB
          Helge Schulz
        2. PredicateInKey-XSLT-Test-1.2.jar
          31 kB
          Helge Schulz
        3. PredicateInKey-XSLT-Test-1.1.jar
          32 kB
          Helge Schulz
        4. PredicateInKey-XSLT-Test.jar
          10 kB
          Helge Schulz
        5. PredicateInKey-Xalan-SVN-r889881.patch
          7 kB
          Helge Schulz
        6. PredicateInKey.xsl
          8 kB
          Helge Schulz
        7. PredicateInKey.xml
          1 kB
          Helge Schulz
        8. PredicateInKey.out
          0.5 kB
          Helge Schulz

        Activity

          People

            Unassigned Unassigned
            heschulz Helge Schulz
            Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: