Conditional call-template -broken in 2.6

T

terry.jeske

Hello,

In xalan 2.41 we were able to conditionally call a template. This
appears broken in 2.6. I did glance at the call-template specfications
but did not see anything that would point to this being a feature or a
change to follow a standard. The problem is that if the called
template is not included in xslt pass, I get:

javax.xml.transform.TransformerException: ElemTemplateElement error:
"your missing template name here".

We are upgrading our app to java 1.5, and have made extensive use of
this type of call which allow us to have leverage common code for
presentation and admin pages. Below is a simplified code snipet. If it
runs for you, make sure you check your xalan version by running java
org.apache.xalan.Version.

Any insight into why this is happening would be most appreciated.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">

<xsl:eek:utput method="xml"
media-type="text/html"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="DTD/xhtml1-strict.dtd"
encoding="ISO-8859-1" />

<xsl:variable name="testCall" select="'false'"/>
<xsl:template match="/">
<html>
<head>
<title>Conditional call-template test</title>
</head>

<body>
<xsl:if test="$testCall = 'true'">
<xsl:call-template name="foobar"/>
</xsl:if>
No errors. Go home and relax
</body>
</html>
</xsl:template>

<!-- uncomment this and it will work -->
<!--xsl:template name="foobar">
<b>hi</b>
</xsl:template-->

</xsl:stylesheet>
 
M

Malcolm Dew-Jones

(e-mail address removed) wrote:
: Hello,

: In xalan 2.41 we were able to conditionally call a template. This
: appears broken in 2.6. I did glance at the call-template specfications
: but did not see anything that would point to this being a feature or a
: change to follow a standard. The problem is that if the called
: template is not included in xslt pass, I get:

: javax.xml.transform.TransformerException: ElemTemplateElement error:
: "your missing template name here".

: We are upgrading our app to java 1.5, and have made extensive use of
: this type of call which allow us to have leverage common code for
: presentation and admin pages. Below is a simplified code snipet. If it
: runs for you, make sure you check your xalan version by running java
: org.apache.xalan.Version.

: Any insight into why this is happening would be most appreciated.

: <?xml version="1.0" encoding="ISO-8859-1"?>
: <xsl:stylesheet version="1.0"
: xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
: xmlns="http://www.w3.org/1999/xhtml">

: <xsl:eek:utput method="xml"
: media-type="text/html"
: doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
: doctype-system="DTD/xhtml1-strict.dtd"
: encoding="ISO-8859-1" />

: <xsl:variable name="testCall" select="'false'"/>
: <xsl:template match="/">
: <html>
: <head>
: <title>Conditional call-template test</title>
: </head>

: <body>
: <xsl:if test="$testCall = 'true'">
: <xsl:call-template name="foobar"/>
: </xsl:if>
: No errors. Go home and relax
: </body>
: </html>
: </xsl:template>

: <!-- uncomment this and it will work -->
: <!--xsl:template name="foobar">
: <b>hi</b>
: </xsl:template-->
:
: </xsl:stylesheet>

it appears that in the earlier version of xalan, calling an undefined
template would be a runtime error. In other words the template name is
not looked up until you try use the template. (and since you don't ever
try to actually use the temlate then you don't get the runtime error).

it appears that in the new version, referencing an undefined template is a
compile time error. In other words the template name is looked up while
the template is being prepared for use (i.e. compile time.) For most
people this would be considered an advantage. Typos in template names
will be detected ahead of time, thereby avoiding hard to track down
run-time errors.

I assume that you could simply define do-nothing versions of the templates
for the style sheets that don't really use them.

you might "include" or "import" the defintions, and then play with
relative paths so as to suck in the alternate versions depending on who is
using the style sheet.

$0.02
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,999
Messages
2,570,246
Members
46,840
Latest member
BrendanG78

Latest Threads

Top