RE: Trigger Cocoon http response code from within XSL code

Daniel Schmidt <[email protected]>
Newsgroups gmane.text.xml.cocoon.user
Message-ID <31DE4BD22F1A1246AD1A584BC505CAD09604F758@NLSRVWP-EXM01.ttg.global>
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:[email protected]] 
Sent: Freitag, 13. Dezember 2013 00:49
To: [email protected]
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:[email protected]]
> Sent: Donnerstag, 12. Dezember 2013 14:33
> To: [email protected]
> 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 | 
> [email protected]<mailto:[email protected]> | 
> +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: [email protected]
For additional commands, e-mail: [email protected]
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.