- From: Philip Fennell <Philip.Fennell@marklogic.com>
- Date: Wed, 2 Dec 2009 03:44:21 -0800
- To: "xproc-dev@w3.org" <xproc-dev@w3.org>
Hello,
I have a case where I wish to catch exceptions raised by an XSLT transform that prematurely stops due to a terminate="yes" message. I can quite happily catch that exception with a p:try step. However, if I then want to throw a new exception that passes the original error info, along with some additional context info, up to the next level I lose that error info. When I run the example below in Calabash (9.1.5) I just get an empty c:errors element in my result. It seems that either by taking the result of the previous p:insert step as the input to the p:error step, or declaring a message in-line, in both cases I do not get the expected c:error message in my result.
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step
xmlns:c="http://www.w3.org/ns/xproc-step"
xmlns:ex="http://www.example.com/"
xmlns:p="http://www.w3.org/ns/xproc"
exclude-inline-prefixes="c p"
name="rethrow-test"
xpath-version="2.0">
<p:input port="source" primary="true">
<p:inline exclude-inline-prefixes="c p">
<business id="B10000000">
<name>Foo</name>
</business>
</p:inline>
</p:input>
<p:output port="result" primary="true"/>
<p:serialization port="result" encoding="utf-8" indent="true"
media-type="application/xml" method="xml" omit-xml-declaration="false"/>
<p:declare-step name="transform" type="ex:transform">
<p:input port="source" primary="true"/>
<p:output port="result" primary="true"/>
<p:try>
<p:group>
<p:xslt name="exception">
<p:input port="stylesheet">
<p:inline>
<xsl:transform
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output encoding="UTF-8" indent="yes" media-type="application/xml" method="xml"/>
<xsl:template match="/">
<xsl:message terminate="yes">[XSLT] Transform failed!</xsl:message>
<xsl:copy-of select="*"/>
</xsl:template>
</xsl:transform>
</p:inline>
</p:input>
<p:input port="parameters">
<p:empty/>
</p:input>
</p:xslt>
</p:group>
<p:catch name="catch1">
<p:insert match="c:errors" position="last-child">
<p:input port="source">
<p:pipe port="error" step="catch1"/>
</p:input>
<p:input port="insertion">
<p:inline exclude-inline-prefixes="c ex p">
<c:error>[XProc] ex:transform failed.</c:error>
</p:inline>
</p:input>
</p:insert>
<p:error code="ex:TX001">
<p:input port="source"><p:inline exclude-inline-prefixes="c ex p">
<c:error>[XProc] Step ex:transform failed.</c:error>
</p:inline>
</p:input>
</p:error>
</p:catch>
</p:try>
</p:declare-step>
<p:try>
<p:group>
<ex:transform/>
</p:group>
<p:catch name="catch2">
<p:identity>
<p:input port="source">
<p:pipe port="error" step="catch2"/>
</p:input>
</p:identity>
</p:catch>
</p:try>
<p:wrap-sequence wrapper="test"/>
</p:declare-step>
Regards
Philip Fennell
Consultant
Mark Logic Corporation
www.marklogic.com
E-mail: philip.fennell@marklogic.com
Mobile: +44 (0)7824 830 866
Received on Wednesday, 2 December 2009 11:45:01 UTC