You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2002/10/22 17:10:16 UTC
DO NOT REPLY [Bug 13850] New: -
xsltc type match problem with docbook test in xsltmark
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=13850>.
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=13850
xsltc type match problem with docbook test in xsltmark
Summary: xsltc type match problem with docbook test in xsltmark
Product: XalanJ2
Version: CurrentCVS
Platform: Other
OS/Version: Other
Status: NEW
Severity: Critical
Priority: Other
Component: org.apache.xalan.xsltc
AssignedTo: xalan-dev@xml.apache.org
ReportedBy: tom.amiro@sun.com
We run a docbook test as part of a customized XSLTCMARK performance
test suite.
I caught a regression on the docbook testcase in the xsltmark performance
benchmark with XSLTC. Santi thought it had something to do with the
Xalan/XSLTC integration extension work Morris Kwan recently did.
Here is the error message:
docbook: docbook.xsl ERROR: 'Cannot convert
argument/return type
in call to method
'org.apache.xalan.lib.ExsltSets.leading(reference, reference)''
javax.xml.transform.TransformerConfigurationException: Could not compile
stylesheet
at
org.apache.xalan.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:662)
at
com.datapower.xsltmark.XSLTCTRAXDriver.loadStylesheet(XSLTCTRAXDriver.java:77)
at com.datapower.xsltmark.XSLTMark.runBenchmark(XSLTMark.java:72)
at com.datapower.xsltmark.XSLTMark.main(XSLTMark.java:509)
I attached the docbook stylesheet where the problem seems to be happening
and
here is a snippet that might help you understand it.
<xsl:template name="unwrap.p">
<xsl:param name="p"/>
<xsl:choose>
<xsl:when test="function-available('exsl:node-set')
and function-available('set:leading')
and function-available('set:trailing')">
<xsl:apply-templates select="exsl:node-set($p)" mode="unwrap.p"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$p"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Here's another snippet from the same xsl file (html-rtf.xsl)
<!-- This template should never get called if these functions aren't
available -->
<!-- but this test is still necessary so that processors don't choke on
the -->
<!-- function calls if they don't support the set: functions -->
<xsl:if test="function-available('set:leading')
and function-available('set:trailing')">
<xsl:choose>
<xsl:when test="$blocks">
<xsl:variable name="leading" select="set:leading($nodes,$blocks)"/>
<xsl:variable name="trailing" select="set:trailing
($nodes,$blocks)"/>
Morris Kwan responded:
I can reproduce the problem. I would not call it a regression because the
underlying problem exists before the extension integration. It did not show
up because previously function-available("set:leading") returned false and
the block inside <xsl:if> did not get evaluated. With the extension
changes, function-available() returns true. Now more code runs through the
compiler and you have a better chance to uncover a problem which was not
caught before.
The problem has something to do with the type of a <xsl:param>. In the
instruction set:leading($nodes,$blocks), both $nodes and $blocks are
parameters. The default type of a parameter is Reference. However, the
set:leading function expects the two arguments to be of type nodeset. The
types do not match and the exception is thrown.
I also notice other problems when using parameters in function arguments. I
am going to find a solution for this problem. I will let Santiago review
the solution before putting it in.