RE: Trigger Cocoon http response code from within XSL code

Daniel Schmidt <[email protected]>
Newsgroups gmane.text.xml.cocoon.user
Message-ID <31DE4BD22F1A1246AD1A584BC505CAD09605FE92@NLSRVWP-EXM01.ttg.global>
Hi David,

> Just in case you have not seen it, and to add more connections info to the mail archives:
> http://wiki.apache.org/cocoon/ErrorHandling
> Some of that is old, but there is a good thread linked in the section about Cocoon 2.1 that is relevant:
> Subject: Generators now allowed in <map:handle-errors>
> http://marc.info/?l=xml-cocoon-dev&m=104923290631009

Thank you very much for the links provided.

I was able to make it work. Here is the code for throwing individual exceptions from within XSLT to the cocoon sitemap:

...
<map:selectors>
  <map:selector name="exception" src="org.apache.cocoon.selection.XPathExceptionSelector">
    <exception name="FileNotFound" class="org.apache.cocoon.ResourceNotFoundException"/>
    <exception name="Transform" class="javax.xml.transform.TransformerException" unroll="true">
      <xpath name="ContentNotAvailableInCountry" test="message='ContentNotAvailableInCountry'"/>
    </exception>
    <exception class="java.lang.Throwable" unroll="true"/>
  </map:selector>
</map:selectors>
...
<map:handle-errors>
  <map:select type="exception">
    <map:when test="ContentNotAvailableInCountry">
      <!-- defined <xsl:message terminate="yes">ContentNotAvailableInCountry</xsl:message> error -->
    </map:when>
    <map:when test="Transform">
      <!-- generic <xsl:message terminate="yes"/> error -->
    </map:when>
    <map:when test="FileNotFound">
      <!-- file not found error -->
    </map:when>
    <map:otherwise>
      <!-- something else -->
    </map:otherwise>
  </map:select>
</map:handle-errors>
...

This works for me. The key is to have the unroll="true" in it + the order of the <exceptions/>.

I will do further testing.

Cheers,
Daniel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.