我刚刚意识到我的记录器在负责生成epub的函数的情况下非常活跃。问题是它按预期工作。因此,我想知道这里发生了什么。
错误:
java:org.exist.xquery.XPathException, exerr:ERROR The actual return type does not match the sequence type declared in the function's signature: epub-util:render-epub(node()+, xs:string) xs:base64Binary. Expected cardinality: exactly one, got 0.
... epub适当地提供给客户。
对于exerr:ERROR
,我检查了$EXIST_HOME/webapp/WEB-INF/logs/exist.log
中的常规日志。没有发现相关错误。
疑似功能:
declare function epub-util:render-epub($entries as node()+, $name as xs:string) as xs:base64Binary {
let $zip-file := compression:zip($entries, true())
let $archiveName := $name
return
response:stream-binary($zip-file, 'application/epub+zip', lower-case(replace($archiveName, ' ', '-')) || '.epub')
};
我在Ubuntu Server 14.04上运行eXist,eXist-db是3.0.RC1。
答案 0 :(得分:2)
根据response:stream-binary()
的eXist-db函数文档,此函数返回item()
,而不是xs:base64binary
。用item()
替换返回类型应该可以解决错误。
答案 1 :(得分:2)
if (text) {
sendTextMessage(sender, 'Response 1');
res.sendStatus(200);
} else {
queryDB(
sendTextMessage(sender, 'Response 2');
res.sendStatus(200);
)
}
是一个非常特殊的函数,它本质上直接将字节写入 servlet 输出流,因此它只能在REST接口中使用。
它只能将字节流写入HTTP代理,例如,你的网络浏览器。无法将此数据存储在变量中。
我同意,即使response:stream-binary()
不是一件好事,它应该是item()
,但不存在。
将此表达式作为xquery脚本中的最后一个函数调用的常见用例。我们在JFreechart库中使用的类似构造。