The following XSP snippet will cause an ArrayIndexOutOfBoundsException in
Cocoon 2.0.3 because the start of the outer element is never emitted to the
SAX stream.
XSP Snippet:
<xsp:page ....>
<page>
<xsp:logic>
if (!request.isUserInRole("root"))
{
<xsp:attribute name="security-error">Not authorized</xsp:attribute>
}
else
{
</xsp:logic
<!-- Build the page if authorized -->
<content />
<xsp:logic>
}
</xsp:logic>
</page>
</xsp:page>
Generated Java code:
if (!request.isUserInRole("root"))
{
xspAttr.addAttribute("", "security-error", "security-error", "CDATA", "Not
authorized");
}
else
{
this.contentHandler.startElement("", "page", "page", xspAttr);
xspAttr.clear();
}
this.contentHandler.endElement("", "page", "page");
The culprit is the <xsp:attribute>. If I comment it out, the error doesn't
happen.
E.g. the start code for <page> isn't emitted. And I can't find a workaround:
neither emitting characters or another element inside the 'if' makes it
emit.
Note: in xsp.xsl, the topmost non-xsp element is handled specially but this
error still occurs if you nest like this:
<page>
<foo>
<xsp:logic>if (...) {
<xsp:attribute...>
}
else
{
</xsp:logic>
...
<xsp:logic>
}
</xsp:logic>
</foo>
</page>
Per
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]