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=25224>. 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=25224 XALAN fails rendering html including javascript Summary: XALAN fails rendering html including javascript Product: XalanJ2 Version: 2.4Dx Platform: PC OS/Version: Windows NT/2K Status: NEW Severity: Minor Priority: Other Component: org.apache.xalan AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] XALAN fails rendering html including javascript: java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 7TransformerException: at: file:///h:/PROJEKTE/Optimay/Sources/QMPROC~1/xml/Test.xsl 55 ; SystemID: file:///h:/PROJEKTE/Optimay/Sources/QMPROC~1/xml/Test.xsl; Line#: 55; Column#: 52 javax.xml.transform.TransformerException: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 7 at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2329) at org.apache.xalan.templates.ElemLiteralResult.execute (ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2324) at org.apache.xalan.templates.ElemLiteralResult.execute (ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2324) at org.apache.xalan.templates.ElemLiteralResult.execute (ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2324) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode (TransformerImpl.java:2147) at org.apache.xalan.transformer.TransformerImpl.transformNode (TransformerImpl.java:1203) at org.apache.xalan.transformer.TransformerImpl.transform (TransformerImpl.java:665) at org.apache.xalan.transformer.TransformerImpl.transform (TransformerImpl.java:1119) at org.apache.xalan.transformer.TransformerImpl.transform (TransformerImpl.java:1097) at com.exln.stylus.CXalanDriver.doProcessing(CXalanDriver.java:150) at com.exln.stylus.CProcessorDriver.process(CProcessorDriver.java:55) Caused by: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 7 at java.util.Vector.remove(Vector.java:796) at com.exln.stylus.CXalanDriver.traceEnd(CXalanDriver.java:518) at org.apache.xalan.trace.TraceManager.fireTraceEndEvent (TraceManager.java:220) at org.apache.xalan.trace.TraceManager.fireTraceEndEvent (TraceManager.java:197) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes (ElemApplyTemplates.java:441) at org.apache.xalan.templates.ElemApplyTemplates.execute (ElemApplyTemplates.java:215) at org.apache.xalan.templates.ElemForEach.transformSelectedNodes (ElemForEach.java:444) at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:300) at org.apache.xalan.templates.ElemForEach.transformSelectedNodes (ElemForEach.java:444) at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:300) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2324) ... 13 more --------- java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 7 at java.util.Vector.remove(Vector.java:796) at com.exln.stylus.CXalanDriver.traceEnd(CXalanDriver.java:518) at org.apache.xalan.trace.TraceManager.fireTraceEndEvent (TraceManager.java:220) at org.apache.xalan.trace.TraceManager.fireTraceEndEvent (TraceManager.java:197) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes (ElemApplyTemplates.java:441) at org.apache.xalan.templates.ElemApplyTemplates.execute (ElemApplyTemplates.java:215) at org.apache.xalan.templates.ElemForEach.transformSelectedNodes (ElemForEach.java:444) at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:300) at org.apache.xalan.templates.ElemForEach.transformSelectedNodes (ElemForEach.java:444) at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:300) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2324) at org.apache.xalan.templates.ElemLiteralResult.execute (ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2324) at org.apache.xalan.templates.ElemLiteralResult.execute (ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2324) at org.apache.xalan.templates.ElemLiteralResult.execute (ElemLiteralResult.java:710) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2324) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode (TransformerImpl.java:2147) at org.apache.xalan.transformer.TransformerImpl.transformNode (TransformerImpl.java:1203) at org.apache.xalan.transformer.TransformerImpl.transform (TransformerImpl.java:665) at org.apache.xalan.transformer.TransformerImpl.transform (TransformerImpl.java:1119) at org.apache.xalan.transformer.TransformerImpl.transform (TransformerImpl.java:1097) at com.exln.stylus.CXalanDriver.doProcessing(CXalanDriver.java:150) at com.exln.stylus.CProcessorDriver.process(CProcessorDriver.java:55) *************** Workaround ************************* Use <xsl:template match="a:para" mode="JavaScript"> <![CDATA[ text += '<p>'; ]]> <xsl:apply-templates mode="JavaScript"/> <![CDATA[ text += '</p>'; ]]> </xsl:template> instead of <xsl:template match="a:para" mode="JavaScript"> text += '<p>'; <xsl:apply-templates mode="JavaScript"/> text += '</p>'; </xsl:template> **************** Reproduce bug ************************ Use this xml file as input: <?xml version="1.0" encoding="UTF-8"?> <process xmlns="http://www.agere.com/qm/process"> <ios> <io name="Requirement docs" id="IO1"> <description> <para>This IO...</para> </description> </io> </ios> </process> Use this xsl stylesheet: <?xml version='1.0' encoding='UTF-8'?> <xsl:stylesheet xmlns:a="http://www.agere.com/qm/process" exclude-result- prefixes="a b c" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:c="http://www.agere.com/qm/roadmap" xmlns:b="http://www.w3.org/1999/xhtml"> <xsl:output method="html"/> <xsl:variable name="process" select="translate (a:process/@name, ' ', '_')"/> <xsl:param name="coordspath" select="concat($process,'.xhtml')"/> <xsl:variable name="coords" select="document($coordspath)"/> <xsl:param name="legend" select="document('QMRoadmap.xml')"/> <xsl:variable name="this" select="/"/> <xsl:template match="/"> <html><head> <title><xsl:value-of select="concat('QM Process - ',a:process/@name)"/></title> <meta name="description" content="???"/> <meta name="keywords" content="qm, process, software,???"/> <script type="text/javascript" src="javascript/popUp.js"/> <script type="text/javascript" src="javascript/hashTable.js"/> <script type="text/javascript" src="javascript/objectInfo.js"/> <xsl:call-template name="head"/> <xsl:call-template name="javascriptGetHref"/> <script type="text/javascript"> <![CDATA[ function showPopUp(object){ try{ popUp(object); } catch(e){ if (debugging) throw e; else window.status='Error in Javascript: ' + e + ' (' + e.description + ')'; } } function finish() { try{ if (!(descWindow == null || descWindow.closed)){ descWindow.close (); } } catch(e){ if (debugging) throw e; else window.status='Error in Javascript: ' + e + ' (' + e.description + ')'; } } ]]> try{ var objects = new Hashtable(); var text = null; var link = null; objects.clear(); var object = null; var metric = null; object = new Legend ('Legend','QM Process'); text = new String() <xsl:apply-templates mode="JavaScript" select="$legend/c:roadmap/c:legend"/> object.setDesc(text); objects.put ('Legend',object); <xsl:for-each select="a:process/a:ios/a:io"> object = new IO( '<xsl:value-of select="@id"/>', '<xsl:value-of select="@name"/>'); text = new String(); <xsl:for-each select="a:description"> <xsl:apply-templates mode="JavaScript"/> </xsl:for-each> object.setDesc (text); objects.put ('<xsl:value-of select="@id"/>', object); </xsl:for-each> <xsl:for-each select="a:process/a:activities/a:action"> object = new Action( '<xsl:value-of select="@id"/>', '<xsl:value-of select="@name"/>'); text = new String(); <xsl:for-each select="a:description"> <xsl:apply-templates mode="JavaScript"/> </xsl:for-each> object.setDesc (text); <xsl:for-each select="a:means"> object.setMeans('<xsl:value-of select="."/>'); </xsl:for-each> <xsl:for-each select="a:input"> <xsl:variable name="io" select="@io"/> text = new String(); <xsl:for-each select="a:description"> <xsl:apply-templates mode="JavaScript"/> </xsl:for-each> object.addInput('<xsl:value-of select="@io"/>','<xsl:value-of select="/a:process/a:ios/a:[EMAIL PROTECTED]/@name"/>',text); </xsl:for-each> <xsl:for-each select="a:output"> <xsl:variable name="io" select="@io"/> text = new String(); <xsl:for-each select="a:description"> <xsl:apply-templates mode="JavaScript"/> </xsl:for-each> object.addOutput('<xsl:value-of select="@io"/>','<xsl:value-of select="/a:process/a:ios/a:[EMAIL PROTECTED]/@name"/>',text); </xsl:for-each> <xsl:for-each select="a:responsibility"> object.addResp('<xsl:value-of select="@type"/>','<xsl:value-of select="@name"/>'); </xsl:for-each> objects.put ('<xsl:value-of select="@id"/>', object); </xsl:for-each> <xsl:for-each select="a:process/a:activities/a:decision"> object = new Decision( '<xsl:value-of select="@id"/>', '<xsl:value-of select="@name"/>'); text = new String(); <xsl:for-each select="a:description"> <xsl:apply-templates mode="JavaScript"/> </xsl:for-each> object.setDesc (text); <xsl:for-each select="a:responsibility"> object.addResp('<xsl:value-of select="@type"/>','<xsl:value-of select="@name"/>'); </xsl:for-each> objects.put ('<xsl:value-of select="@id"/>', object); </xsl:for-each> object = new Process( 'Details', '<xsl:value-of select="a:process/@name"/>'); text = new String(); <xsl:for-each select="a:description"> <xsl:apply- templates mode="JavaScript"/> </xsl:for-each> object.setDesc(text); object.setOwner ('<xsl:value-of select="a:process/@owner"/>'); text = new String(); <xsl:for-each select="a:process/a:compliance"> <xsl:apply- templates mode="JavaScript"/> </xsl:for-each> object.setComp(text); <xsl:for-each select="a:process/a:references/a:reference"> link = new String() text = new String(); <xsl:for-each select="a:description"> <xsl:apply-templates mode="JavaScript"/> </xsl:for-each> <xsl:for-each select="a:link"> link = '<xsl:value-of select="@name"/>'; </xsl:for-each> object.addRef ('<xsl:value-of select="@id"/>',link,text); </xsl:for-each> <xsl:for-each select="a:process/a:records/a:record"> object.addRecord ('<xsl:value-of select="@id"/>','<xsl:value-of select="@period"/>','<xsl:value- of select="@storage"/>'); </xsl:for-each> <xsl:for-each select="a:process/a:definitions/a:definition"> text = new String(); <xsl:apply- templates mode="JavaScript"/> object.addDef ('<xsl:value-of select="@id"/>',text); </xsl:for-each> <xsl:for-each select="a:process/a:start/a:input"> <xsl:variable name="io" select="@io"/> text = new String(); <xsl:for-each select="a:description"> <xsl:apply-templates mode="JavaScript"/> </xsl:for-each> object.addInput('<xsl:value-of select="@io"/>','<xsl:value-of select="/a:process/a:ios/a:[EMAIL PROTECTED]/@name"/>',text); </xsl:for-each> <xsl:for-each select="a:process/a:end/a:output"> <xsl:variable name="io" select="@io"/> text = new String(); <xsl:for-each select="a:description"> <xsl:apply-templates mode="JavaScript"/> </xsl:for-each> object.addOutput('<xsl:value-of select="@io"/>','<xsl:value-of select="/a:process/a:ios/a:[EMAIL PROTECTED]/@name"/>',text); </xsl:for-each> objects.put('Details', object); object = new Metrics( 'Metrics', '<xsl:value-of select="a:process/@name"/>'); <xsl:for-each select="a:process/a:metrics/a:metric"> metric = new MetricInfo('<xsl:value-of select="@id"/>'); text = new String(); <xsl:for-each select="a:purpose"> <xsl:apply-templates mode="JavaScript"/> </xsl:for-each> metric.setPurpose(text); metric.setDefinition('<xsl:value-of select="a:purpose/@definition"/>'); metric.setUnit ('<xsl:value-of select="a:purpose/@unit"/>'); metric.setDataResp('<xsl:value-of select="a:data/@responsible"/>'); metric.setDataFrequency('<xsl:value-of select="a:data/@frequency"/>'); metric.setTargetResp('<xsl:value-of select="a:target/@responsible"/>'); metric.setTargetFrequency('<xsl:value-of select="a:target/@frequency"/>'); metric.setTargetData('<xsl:value-of select="a:target/@basis"/>'); metric.setAnalysisResp('<xsl:value-of select="a:analysis/@responsible"/>'); metric.setAnalysisFrequency('<xsl:value-of select="a:analysis/@frequency"/>'); metric.setAnalysisMethod('<xsl:value-of select="a:analysis/@method"/>'); metric.setRecipients('<xsl:value-of select="@recipients"/>'); <xsl:for-each select="a:influences/a:influence"> metric.addInfluence('<xsl:value-of select="@process"/>'); </xsl:for-each> text = new String(); <xsl:for-each select="a:remarks"> <xsl:apply-templates mode="JavaScript"/> </xsl:for-each> metric.setRemarks(text); object.addMetric (metric); </xsl:for-each> objects.put('Metrics', object); } catch(e){ if (debugging) throw e; else window.status='Error in Javascript: ' + e + ' (' + e.description + ')'; } </script> </head> <body onUnload="finish()"> <xsl:call-template name="header"/> <table width="760" class="clsLayout"> <thead> <tr> <td class="clsHead1"> <script type="text/javascript">document.write('<a href="'+getHref('./')+'" class="clsHead1">QM Process</a>')</script> </td> </tr> <tr> <td class="clsHead2"> <h2> <xsl:value-of select="a:process/@name"/> </h2> </td> </tr> </thead> <tbody> <tr> <td> <xsl:for-each select="a:process/a:purpose"> <xsl:apply- templates/> </xsl:for-each> </td> </tr> <tr> <td class="clsLinkbar">[ <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text> <a><xsl:attribute name="href">javascript:showPopUp('Details')</xsl:attribute>details</a> <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text>] <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text> <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text>[ <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text> <a><xsl:attribute name="href">javascript:showPopUp('Metrics')</xsl:attribute>metrics</a> <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text>] <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text> <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text>[ <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text> <a><xsl:attribute name="href">javascript:showPopUp('Legend')</xsl:attribute>legend</a> <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text>] <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text> <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text>[ <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text> <a target="_blank" href="Matrix-Web-Publishing???">download</a> <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text> <a target="_blank" href="Matrix-Web-Publishing???"> <img align="middle" src="../images/pdf.gif" border="0"/> </a> <xsl:text disable- output-escaping="yes">&nbsp;</xsl:text>] </td> </tr> <tr> <td class="clsMap"> <map name="navmap" id="navmap"> <script type="text/javascript"> <xsl:for-each select="$coords//[EMAIL PROTECTED]"> <xsl:variable name="href" select="@href"/> document.write('<area title="click here for details"> <xsl:attribute name="coords"> <xsl:value-of select="@coords"/> </xsl:attribute> <xsl:choose> <xsl:when test="count($this/a:process/a:activities/a:subprocess [EMAIL PROTECTED])>0"> <xsl:attribute name="href">'+getHref('<xsl:value-of select="concat(translate($this/a:process/a:activities/a:subprocess [EMAIL PROTECTED]/@name,' ','_'),'.html')"/>')+'</xsl:attribute> <xsl:attribute name="target">_self</xsl:attribute> </xsl:when> <xsl:otherwise> <xsl:attribute name="href">javascript:showPopUp(\'<xsl:value-of select="$href"/>\')</xsl:attribute> </xsl:otherwise> </xsl:choose> <xsl:attribute name="shape"> <xsl:value-of select="@shape"/> </xsl:attribute></area>'); </xsl:for-each> </script> </map> <img useMap="#navmap" border="0"> <xsl:attribute name="alt"> <xsl:value-of select="a:process/@name"/> </xsl:attribute> <xsl:attribute name="src"> <xsl:value-of select="concat('images/', $process, '.gif')"/> </xsl:attribute> <xsl:attribute name="title"> <xsl:value-of select="a:process/@name"/> </xsl:attribute></img> </td> </tr> </tbody> </table> <xsl:call-template name="footer"/> </body> </html> </xsl:template> <xsl:template name="head"> <meta http-equiv="Content-Script-Type" content="text/javascript"/> <link rel="stylesheet" type="text/css" href="/webstandards/style/styleStandard.css"/> <link rel="stylesheet" type="text/css" href="../style/styleStandard.css"/> <script type="text/javascript"> <![CDATA[ var debugging = false; if (debugging) alert("Debugging mode is enabled. Please set 'debugging' to false."); ]]> </script> </xsl:template> <xsl:template name="javascriptGetHref"> <script type="text/javascript"> <![CDATA[ function getHref(href){ try{ href += location.search; return href; } catch(e){ if (debugging) throw e; else { window.status='Error in Javascript: ' + e + ' (' + e.description + ')'; return href; } } } ]]> </script> </xsl:template> <xsl:template name="header"> <xsl:text disable-output-escaping="yes"><![CDATA[<!--#include virtual="/webstandards/header1.inc"-->]]></xsl:text> </xsl:template> <xsl:template name="footer"> <xsl:text disable-output-escaping="yes"><![CDATA[<!-- #config timefmt="%d-%b-%Y %H:%M:%S"-->]]></xsl:text> <script src="../javascript/footer.js" type="text/javascript"/> <script type="text/javascript">date='<xsl:text disable- output-escaping="yes"><![CDATA[<!--#echo var="LAST_MODIFIED"-->]] ></xsl:text>';</script> <script src="../javascript/local_footer.js" type="text/javascript"/><xsl:text disable-output-escaping="yes"><![CDATA[<!-- #include virtual="/webstandards/footer.inc"-->]]></xsl:text> </xsl:template> <xsl:template match="a:para" mode="JavaScript"> text += '<p>'; <xsl:apply-templates mode="JavaScript"/> text += '</p>'; </xsl:template> <xsl:template match="a:list" mode="JavaScript"> <![CDATA[ text += '<ul>'; ]]> <xsl:apply-templates mode="JavaScript"/> <![CDATA[ text += '</ul>'; ]]> </xsl:template> <xsl:template match="a:listelement" mode="JavaScript"> <![CDATA[ text += '<li>'; ]]> <xsl:apply-templates mode="JavaScript"/> <![CDATA[ text += '</li>'; ]]> </xsl:template> <xsl:template match="a:bold" mode="JavaScript"> <![CDATA[ text += '<b>'; ]]> <xsl:apply-templates mode="JavaScript"/> <![CDATA[ text += '</b>'; ]]> </xsl:template> <xsl:template match="a:italic" mode="JavaScript"> <![CDATA[ text += '<i>'; ]]> <xsl:apply-templates mode="JavaScript"/> <![CDATA[ text += '</i>'; ]]> </xsl:template> <xsl:template match="text()" mode="JavaScript"> <xsl:if test="substring(.,1,1)=' '"> text +=' '; </xsl:if> text += '<xsl:value-of select="normalize-space(.)"/>'; <xsl:if test="substring(.,string-length(.),string-length(.))=' '"> text +=' '; </xsl:if> </xsl:template> <xsl:template match="a:para"> <p> <xsl:apply-templates/> </p> </xsl:template> <xsl:template match="a:list"> <ul> <xsl:apply-templates/> </ul> </xsl:template> <xsl:template match="a:listelement"> <li> <xsl:apply-templates/> </li> </xsl:template> <xsl:template match="a:bold"> <b> <xsl:apply-templates/> </b> </xsl:template> <xsl:template match="a:italic"> <i> <xsl:apply-templates/> </i> </xsl:template> <xsl:template match="text()"> <xsl:if test="substring(.,1,1)=' '"> <xsl:text disable-output-escaping="yes"><![CDATA[ ]] ></xsl:text> </xsl:if> <xsl:value-of select="normalize-space(.)"/> <xsl:if test="substring(.,string-length(.),string-length(.))=' '"> <xsl:text disable-output-escaping="yes"><![CDATA[ ]] ></xsl:text> </xsl:if> </xsl:template> </xsl:stylesheet>
