DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26019>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26019 infinit loop processing appearing with Xalan J 2.5.2 Summary: infinit loop processing appearing with Xalan J 2.5.2 Product: XalanJ2 Version: 2.5Dx Platform: PC OS/Version: Windows NT/2K Status: NEW Severity: Major Priority: Other Component: javax.xml AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] I asked to Henry Zongaro to test this bug. He told it was effectively one and asked me to post it here. I build a test case composed of three files to present it. One input file (testCaseInput.xml) One output file (testCaseOutput.xml) One stylesheet (testCase.xsl) You'll find these files at the end of this document. Here is the probleme : The following transformation is working fine with Xalan J 2 embedded in the JDK 1.4.1. but with Xalan J 2.5.2, it is looping infinitly. So as you can guess, it the testCaseOutput.xml file is the one i get with the JDK Xalan J 2 processor. For further explainations, please refere to the comments i included in the XSL file. Regards. Benoit Lefevre. ----- testCaseInput.xml ----- <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="./testCase.xsl" type="Text/xsl"?> <recordSet> <record name="User" Value="1"/> <record name="User" Value="2"/> <record name="Date" Value="3"/> <record name="Date" Value="4"/> <record name="Action" Value="5"/> <record name="Action" Value="6"/> </recordSet> ----- testCaseOutput.xml ----- <?xml version="1.0" encoding="UTF-8"?> <recordSet> <group name="User"> <record Value="1"/> <record Value="2"/> </group> <group name="Date"> <record Value="3"/> <record Value="4"/> </group> <group name="Action"> <record Value="5"/> <record Value="6"/> </group> </recordSet> ----- testCase.xsl ----- <?xml version="1.0" encoding="UTF-8"?> <!-- The following transformation is working fine with XalanJ2 embended into JDK 1.4, but with XalanJ2 V2.5.2, it's looping infinitly. Can you tell me why ? To sum up, it is supposed to act like a group by in SQL. To have a better idea of what i mean, i joined to this stylesheet an input XML file (testCaseInput.xml) AND the resulting output file (testCaseOutput.xml) that i obtained with XalanJ2 from JDK 1.4. For further explainations about this transformation please, read the following comments Thank you. eMail : [EMAIL PROTECTED] --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan" exclude-result- prefixes="xalan"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" media-type="xml"/> <!-- first template --> <xsl:template match="/"> <xsl:copy> <xsl:apply-templates select="@* | * | comment() | text ()"/> </xsl:copy> </xsl:template> <!-- identity like template --> <xsl:template match="@* | * | comment() | text()"> <xsl:copy> <xsl:apply-templates select="@* | * | comment() | text ()"/> </xsl:copy> </xsl:template> <!-- We start the group by process here --> <xsl:template match="recordSet" priority="1"> <xsl:copy> <!-- <xsl:copy-of select="xalan:checkEnvironment()"/> --> <!-- the process start with the first element of the "record" tag list --> <xsl:apply-templates select="record[1]" mode="groupBy"/> </xsl:copy> </xsl:template> <!-- When a record tag is matched, we try to group tags having the same name than this one all together in a new tag. Then we repeate the process on remaining nodes--> <xsl:template match="record" priority="1" mode="groupBy"> <!-- this parameter store names of tags that have allready been handled in previous calls --> <xsl:param name="prevNames" select="@name"/> <!-- let's remember the current tag name to simplify next XPath formulations --> <xsl:variable name="currentName" select="@name"/> <!-- we create a "group" tag to performe the grouping process -- > <xsl:element name="group"> <!-- This "group" tag have the same name than the nodes that are going to be stored inside --> <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> <!-- first we copy the current "record" tag by calling the second "record" template (getRideOf mode) --> <xsl:apply-templates select="." mode="getRideOf"/> <!-- then, we copy the sibblings of this tag who look like the current one (getRideOf mode again) --> <xsl:apply-templates select="following-sibling::* [EMAIL PROTECTED]" mode="getRideOf"/> </xsl:element> <!-- Finally we call again the "record" template (groupBy mode) by selecting the first sibbling of this node that haven't been processed yet --> <xsl:apply-templates select="../[EMAIL PROTECTED] (@name=$prevNames)][1]" mode="groupBy"> <xsl:with-param name="prevNames" select="preceding- sibling::*/@name|./@name"/> </xsl:apply-templates> <!--~~~~~~~~~~~~~~~~~~~~~~~~~~--> <!-- i guess it's one of the tow preceding select statements which cause the bug, but i can't figure out why --> <!--~~~~~~~~~~~~~~~~~~~~~~~~~~--> </xsl:template> <!-- this "record" template is used to copy completly a "record" tag but it's @name --> <xsl:template match="record" priority="1" mode="getRideOf"> <xsl:copy> <xsl:apply-templates select="@*[not(name(.)='name')] | * | comment() | text()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
