Hi David,

That is great. I got it working with the following code:

<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0";>
        <map:components>
                ...
                <map:selectors>
                        <map:selector name="exception" 
src="org.apache.cocoon.selection.ExceptionSelector">
                                <exception name="FileNotFound" 
class="org.apache.cocoon.ResourceNotFoundException"/>
                                <exception name="ContentNotAvailableInCountry" 
class="org.apache.cocoon.ProcessingException"/>
                        </map:selector>
                </map:selectors>
        </map:components>
        <map:resources>
                <map:resource name="404">
                        <map:generate src="404.xml"/>
                        <map:serialize status-code="404"/>
                </map:resource>
                <map:resource name="404-notavailableinyourcountry">
                        <map:generate src="404-notavailableinyourcountry.xml"/>
                        <map:serialize status-code="404"/>
                </map:resource>
                ...
        </map:resources>
        <map:pipelines>
                <map:pipeline>
                        <map:handle-errors>
                                <map:select type="exception">
                                        <map:when 
test="ContentNotAvailableInCountry">
                                                <map:call 
resource="404-notavailableinyourcountry"/>
                                        </map:when>
                                        <map:when test="FileNotFound">
                                                <map:call resource="404"/>
                                        </map:when>
                                        <map:otherwise>
                                                <!-- something else -->
                                        </map:otherwise>
                                </map:select>
                        </map:handle-errors>
                        ...
                </map:pipeline>
        </map:pipelines>
</map:sitemap>


So I always get a "ContentNotAvailableInCountry" exception if I do a 
<xsl:message terminate="yes"/> in XSLT. Otherwise I'm serving a "generic" error 
page or a FileNotFound error page.


However, it would be great if I could throw different exceptions from within 
XSLT with the following approach:
<xsl:message terminate="yes">ContentNotAvailableInCountry</xsl:message>

I tried using an XPathExceptionSelector instead of the ExceptionSelector (the 
numbers 1/2 in the code below are only there to point out a line; they are not 
part of the code):

<map:selector name="exception" 
src="org.apache.cocoon.selection.XPathExceptionSelector">
        <exception name="Transform" 
class="org.apache.cocoon.ProcessingException">
(1)             <xpath name="ContentNotAvailableInCountry" 
test="rawMessage='Failed to process pipeline'"/>
(2)             <xpath name="ContentNotAvailableInCountry" 
test="message='ContentNotAvailableInCountry'"/>
        </exception>
</map:selector>

While (1) works fine (it's equal to the ExceptionSelector approach since I 
can't say what's the content of <xsl:message/>), I can't get (2) working.

How can I test if the content of <xsl:message terminate="yes"/> is a certain 
string with the help of XPathExceptionSelector?


Thank you!




-----Original Message-----
From: David Crossley [mailto:cross...@apache.org] 
Sent: Freitag, 13. Dezember 2013 00:49
To: users@cocoon.apache.org
Subject: Re: Trigger Cocoon http response code from within XSL code

Daniel Schmidt wrote:
> Hi Thorsten,
> 
> Thanks for pointing out actions. I will have a closer look at them.
> 
> Setting the status code is no problem, we already do that. The problem is 
> that we only know within the XSLT code if a page is available in a certain 
> country, because this is defined in XML.

Could use "stylesheet-directed termination" (xsl:message terminate="yes") Then 
in the relevant sitemap use "map:handle-errors" to set the status-code on the 
serializer.
http://forrest.apache.org/faq.html#handle-errors

-David

> Thanks.
> 
> 
> 
> From: Thorsten Scherler [mailto:scher...@gmail.com]
> Sent: Donnerstag, 12. Dezember 2013 14:33
> To: users@cocoon.apache.org
> Subject: Re: Trigger Cocoon http response code from within XSL code
> 
> On 12/12/2013 02:21 PM, Daniel Schmidt wrote:
> Hi,
> 
> In our project we have multiple languages and some pages are not available in 
> a certain country. If that is the case, we just output a message. For Search 
> engines it would be good to respond with a different status code then 200.
> 
> The question is: Is it possible to trigger a different http status code from 
> within the XSL-code to the sitemap? Is there a way of doing something like 
> that?
> 
> Thank you!
> Daniel
> 
> 
> Daniel Schmidt | Jr Web Developer | TomTom Business Solutions | 
> daniel.schm...@tomtom.com<mailto:daniel.schm...@tomtom.com> | 
> +49(0)341 24495-920 office | +49(0)341 24495-888 fax | 
> www.tomtom.com/business<http://www.tomtom.com/business>
> 
> 
> Depending which version I would suggest an action to do that. There are 
> examples how to set the status code, the question which one would you want to 
> set? From within xslt I think it is a bit more complicated.
> 
> salu2
> 
> 
> --
> 
> Thorsten Scherler <scherler.at.gmail.com>
> 
> codeBusters S.L. - web based systems
> 
> <consulting, training and solutions>
> 
> 
> 
> http://www.codebusters.es/

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@cocoon.apache.org
For additional commands, e-mail: users-h...@cocoon.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@cocoon.apache.org
For additional commands, e-mail: users-h...@cocoon.apache.org

Reply via email to