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]

Reply via email to