-
-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Templating and transform:transform: empty output on error #42
Comments
@dizzzz commented on Jul 27, 2018, 8:40 PM UTC: How is $xslt constructed ? |
@joewiz commented on Jul 27, 2018, 9:56 PM UTC: I have installed your .zip file in 4.3.1 and see what I would expect when I call http://localhost:8080/exist/apps/catch/view.html and view source - the following HTML and not an "empty file," as you described it:
|
@dariok commented on Jul 28, 2018, 3:40 PM UTC: joewiz: Indeed, app.xql in the zip contains "stream-transform()" from my testing (line 19). Change that to just "transform()" and you should observe the behaviour I described. dizzzz: from an XSLT file stored in the DB via doc(). See app.xql in my zip. |
@joewiz commented on Jul 30, 2018, 3:39 PM UTC: dariok Thanks for the pointer. I've confirmed your results, and I've tried to reduce the files you've provided into a single, self-contained query that demonstrates the problem. Basically, I took Does anyone have ideas for how best to proceed? xquery version "3.1";
declare namespace config = "http://exist-db.org/xquery/apps/config";
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare namespace wdb = "https://github.com/dariok/wdbplus/wdb";
declare option output:method "html5";
declare option output:media-type "text/html";
import module namespace console = "http://exist-db.org/xquery/console";
import module namespace templates = "http://exist-db.org/xquery/templates";
declare variable $doc :=
<TEI xmlns="http://www.tei-c.org/ns/1.0" xml:id="test">
<teiHeader/>
<text>
<body>
<div>
<p>asdfa</p>
</div>
</body>
</text>
</TEI>;
declare variable $xslt :=
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:template match="/">
<h1>Testing</h1>
<xsl:sequence select="doc('bogus')"/>
</xsl:template>
</xsl:stylesheet>;
declare function wdb:test($node as node(), $model as map(*), $transform-function as xs:string) {
let $params :=
<parameters>
<param name="exist:stop-on-warn" value="no" />
<param name="exist:stop-on-error" value="no" />
</parameters>
let $attrs :=
<attributes>
<attr name="http://saxon.sf.net/feature/recoveryPolicyName" value="recoverSilently" />
</attributes>
let $serialization-options := "expand-xincludes=no"
let $transform-params :=
[$doc, $xslt, $params, $attrs, $serialization-options]
(: [$doc, $xslt]:)
let $transform-arity := array:size($transform-params)
let $transform := function-lookup(xs:QName("transform:" || $transform-function), $transform-arity)
let $re :=
try {
apply($transform, $transform-params)
}
catch * {
let $t := console:log(
<report>
{$params}
{$attrs}
<error>{$err:code || ': ' || $err:description}</error>
<error>{$err:module || '@' || $err:line-number ||':'||$err:column-number}</error>
<additional>{$err:additional}</additional>
</report>
)
return
<h1>error</h1>
}
return
<div id="wdbContent">
{$re}
</div>
};
let $lookup :=
function($functionName as xs:string, $arity as xs:int) {
try {
function-lookup(xs:QName($functionName), $arity)
} catch * {
()
}
}
let $config := map { $templates:CONFIG_STOP_ON_ERROR : true() }
for $transform-function in ("transform", "stream-transform")
let $content :=
<html>
<head>
<title>test</title>
</head>
<body>
<div id="wdbContent" data-template="wdb:getContent" data-template-transform-function="{$transform-function}"/>
</body>
</html>
return
templates:apply($content, $lookup, (), $config) |
@adamretter commented on Jul 30, 2018, 4:24 PM UTC: joewiz do you think this could be another manifestation of this still open issue with templating: eXist-db/public-xar-repo#21? |
@duncdrum commented on Jan 13, 2019, 10:43 AM UTC: as this is a problem with the templating module moving this to its code repo. |
@dariok commented on Jul 27, 2018, 4:55 PM UTC:
What is the problem
doc()
on a file that does not exist, the output is an empty file:What did you expect
The output of the given HTML in case of an error.
additional observations:
wdb:getContent
with exactly the same parameters from eXide produces the expected output in case of an errorcatch
is processed correctly – I tried toconsole:log
before returning output, which worked, and forwarding handling to another function: there, too,console:log
worked but no output was producedtransform:stream-transform
returns the expected output in case of an error (but of course won't work correctly with the templating system)Describe how to reproduce or add a test
The attached .zip contains an example. Store in
/db/apps
and call$server/exist/apps/catch/view.html
.If the line with
doc()
is commented out in the XSLT, you get “Testing”; if it is active, you get an empty response. If you usestream-transform
instead oftransform
in app.xql, you get “error“ if thedoc()
line is active.catch.zip
Context information
Please always add the following information
root
tocontroller-config.xml
on the Ubuntu machine; this is not present under Windows.This issue was moved by duncdrum from eXist-db/exist#2074.
The text was updated successfully, but these errors were encountered: