exist
exist copied to clipboard
[BUG] Different errors using collection() in xslt.
Describe the bug
Try to use collection() in XSLT. Different attempts produce different errors. See examples.
It is definitely related to #351.
- with
xmldb:exist://it throwsjava.io.IOException: Resource /db/test is a collection.. A xmlParser error. - without
xmldb:exist://it throwXSL transform reports fatal error: Relative URI passed to document() function (/db/test); but no base URI is available.resolve-uri('','/db/test')doesn't help. - Calling
collection(<catalogfile.xml>)doesn't work like suggested in https://www.saxonica.com/documentation10/#!sourcedocs/collections.
Further investigation reveals that the problem existed like "forever": https://markmail.org/message/l6rfv6hw5ojxbt7v#query:+page:1+mid:l6rfv6hw5ojxbt7v+state:results
Expected behavior
Expect access to the XML tree created by collection().
Either as in exist-db or as in Saxon, for example, via a catalogue structure.
To Reproduce
Example 1 - absolute URI with xmldb:exist/
let $dummyColl := xmldb:create-collection('/db','test'),
$store-dummy := xmldb:store($dummyColl, 'test.xml', <test/>),
$stylesheet :=
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="2.0">
<xsl:variable name="coll" select="collection('xmldb:exist:///db/test')"/>
<xsl:template match="/">
<result>
<xsl:value-of select="node-name($coll/*)"/>
</result>
</xsl:template>
</xsl:stylesheet>
return
transform:transform(doc($store-dummy), $stylesheet, ())
Example 2 - without xmldb:exist://
<xsl:variable name="coll" select="collection('/db/test')"/>
Errors
Example 1 - error log
(XSLTErrorsListener.java [fatalError]:90) - XSL transform reports fatal error: I/O error reported by XML parser processing null: Resource /db/test is a collection.
net.sf.saxon.trans.XPathException: I/O error reported by XML parser processing null: Resource /db/test is a collection.
at net.sf.saxon.event.Sender.sendSAXSource(Sender.java:463) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.event.Sender.send(Sender.java:167) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.Configuration.buildDocumentTree(Configuration.java:4241) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.resource.CatalogCollection.catalogContents(CatalogCollection.java:139) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.resource.CatalogCollection.getResourceURIs(CatalogCollection.java:53) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.resource.CatalogCollection.getResources(CatalogCollection.java:61) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.functions.CollectionFn.getSequenceIterator(CollectionFn.java:137) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.functions.CollectionFn.call(CollectionFn.java:239) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.FunctionCall.iterate(FunctionCall.java:532) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.GlobalVariable.getSelectValue(GlobalVariable.java:670) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.GlobalVariable.actuallyEvaluate(GlobalVariable.java:753) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.GlobalVariable.evaluateVariable(GlobalVariable.java:722) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.GlobalVariableReference.evaluateVariable(GlobalVariableReference.java:125) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.VariableReference.iterate(VariableReference.java:552) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.ItemChecker.iterate(ItemChecker.java:227) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.SlashExpression.iterate(SlashExpression.java:925) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.sort.DocumentSorter.iterate(DocumentSorter.java:260) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.CardinalityChecker.evaluateItem(CardinalityChecker.java:276) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.functions.ScalarSystemFunction$1.evaluateItem(ScalarSystemFunction.java:80) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.functions.ScalarSystemFunction$1.evaluateItem(ScalarSystemFunction.java:76) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.AtomicSequenceConverter.evaluateItem(AtomicSequenceConverter.java:354) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.AtomicSequenceConverter.evaluateItem(AtomicSequenceConverter.java:28) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.Expression.evaluateAsString(Expression.java:916) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.SimpleNodeConstructor.processLeavingTail(SimpleNodeConstructor.java:218) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.ValueOf.processLeavingTail(ValueOf.java:290) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.Instruction.process(Instruction.java:132) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:353) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:300) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.TemplateRule.applyLeavingTail(TemplateRule.java:352) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.trans.Mode.applyTemplates(Mode.java:533) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.trans.XsltController.applyTemplates(XsltController.java:746) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.s9api.AbstractXsltTransformer.applyTemplatesToSource(AbstractXsltTransformer.java:347) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:349) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.jaxp.TransformerImpl.transform(TransformerImpl.java:71) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.jaxp.TransformerHandlerImpl.endDocument(TransformerHandlerImpl.java:173) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.util.serializer.ReceiverToSAX.endDocument(ReceiverToSAX.java:81) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.storage.serializers.XIncludeFilter.endDocument(XIncludeFilter.java:157) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.storage.serializers.Serializer.toSAX(Serializer.java:965) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.functions.transform.Transform.eval(Transform.java:229) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.BasicFunction.eval(BasicFunction.java:73) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:62) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.LetExpr.eval(LetExpr.java:110) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.LetExpr.eval(LetExpr.java:110) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.LetExpr.eval(LetExpr.java:110) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.PathExpr.eval(PathExpr.java:279) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.XQuery.execute(XQuery.java:373) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.XQuery.execute(XQuery.java:295) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.http.servlets.XQueryServlet.process(XQueryServlet.java:485) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.http.servlets.XQueryServlet.doPost(XQueryServlet.java:181) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1459) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:618) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:167) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:81) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:50) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.http.urlrewrite.XQueryURLRewrite.doRewrite(XQueryURLRewrite.java:523) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:340) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:228) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:713) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:400) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:645) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:392) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [exist.uber.jar:5.4.0-SNAPSHOT]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_275]
Caused by: java.io.IOException: Resource /db/test is a collection.
at org.exist.protocolhandler.embedded.EmbeddedInputStream.openStream(EmbeddedInputStream.java:119) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.protocolhandler.embedded.EmbeddedInputStream.lambda$0(EmbeddedInputStream.java:92) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at com.evolvedbinary.j8fu.lazy.LazyValE.get(LazyValE.java:70) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.protocolhandler.embedded.EmbeddedInputStream.read(EmbeddedInputStream.java:235) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.apache.xerces.impl.XMLEntityManager$RewindableInputStream.readAndBuffer(Unknown Source) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.event.Sender.sendSAXSource(Sender.java:435) ~[exist.uber.jar:5.4.0-SNAPSHOT]
... 116 more
Example 2 - error log
15 May 2023 17:47:35,925 [qtp1652393238-2727] WARN (XSLTErrorsListener.java [fatalError]:90) - XSL transform reports fatal error: Relative URI passed to document() function (/db/test); but no base URI is available
net.sf.saxon.trans.XPathException: Relative URI passed to document() function (/db/test); but no base URI is available
at net.sf.saxon.functions.DocumentFn.resolveURI(DocumentFn.java:400) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.resource.CatalogCollection.catalogContents(CatalogCollection.java:135) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.resource.CatalogCollection.getResourceURIs(CatalogCollection.java:53) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.resource.CatalogCollection.getResources(CatalogCollection.java:61) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.functions.CollectionFn.getSequenceIterator(CollectionFn.java:137) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.functions.CollectionFn.call(CollectionFn.java:239) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.FunctionCall.iterate(FunctionCall.java:532) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.GlobalVariable.getSelectValue(GlobalVariable.java:670) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.GlobalVariable.actuallyEvaluate(GlobalVariable.java:753) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.GlobalVariable.evaluateVariable(GlobalVariable.java:722) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.GlobalVariableReference.evaluateVariable(GlobalVariableReference.java:125) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.VariableReference.iterate(VariableReference.java:552) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.AdjacentTextNodeMerger.iterate(AdjacentTextNodeMerger.java:229) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.Atomizer.iterate(Atomizer.java:351) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.AtomicSequenceConverter.iterate(AtomicSequenceConverter.java:297) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.parser.Evaluator$7.evaluate(Evaluator.java:239) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.SystemFunctionCall.evaluateArguments(SystemFunctionCall.java:446) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.FunctionCall.iterate(FunctionCall.java:530) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.Expression.evaluateItem(Expression.java:851) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.Expression.evaluateAsString(Expression.java:916) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.SimpleNodeConstructor.processLeavingTail(SimpleNodeConstructor.java:218) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.ValueOf.processLeavingTail(ValueOf.java:290) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.Instruction.process(Instruction.java:132) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:353) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:300) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.expr.instruct.TemplateRule.applyLeavingTail(TemplateRule.java:352) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.trans.Mode.applyTemplates(Mode.java:533) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.trans.XsltController.applyTemplates(XsltController.java:746) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.s9api.AbstractXsltTransformer.applyTemplatesToSource(AbstractXsltTransformer.java:347) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:349) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.jaxp.TransformerImpl.transform(TransformerImpl.java:71) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at net.sf.saxon.jaxp.TransformerHandlerImpl.endDocument(TransformerHandlerImpl.java:173) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.util.serializer.ReceiverToSAX.endDocument(ReceiverToSAX.java:81) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.storage.serializers.XIncludeFilter.endDocument(XIncludeFilter.java:157) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.storage.serializers.Serializer.toSAX(Serializer.java:965) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.functions.transform.Transform.eval(Transform.java:229) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.BasicFunction.eval(BasicFunction.java:73) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:62) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.LetExpr.eval(LetExpr.java:110) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.LetExpr.eval(LetExpr.java:110) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.LetExpr.eval(LetExpr.java:110) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.LetExpr.eval(LetExpr.java:110) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.PathExpr.eval(PathExpr.java:279) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.XQuery.execute(XQuery.java:373) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.xquery.XQuery.execute(XQuery.java:295) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.http.servlets.XQueryServlet.process(XQueryServlet.java:485) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.http.servlets.XQueryServlet.doPost(XQueryServlet.java:181) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1459) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:618) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:167) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:81) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:50) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.http.urlrewrite.XQueryURLRewrite.doRewrite(XQueryURLRewrite.java:523) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:340) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:228) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:713) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:400) ~[exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:645) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:392) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [exist.uber.jar:5.4.0-SNAPSHOT]
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [exist.uber.jar:5.4.0-SNAPSHOT]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_275]
Possible Workaround
As I understand it, Saxon's XSL handling of the function collection('xmldb:exist:///db/test/catalog.xml') is that it calls the individual file paths in the catalogue to the files and calls a doc() in a function for each.
The workaround "reproduces" this by calling uri-collection('xmldb:exist:///db/test/catalog.xml') and iterating over the generated sequence and calling doc().
Not really elegant and fast, because it is not possible to filter beforehand (e.g. with xPath conditions), but has to open each file to examine it.
Therefore, it may be necessary to store content retrieved from collections in temporary helper files. Since the parameterisation of nodes is also not possible. (see https://stackoverflow.com/questions/40694551/passing-a-node-as-parameter-to-a-xsl-stylesheet)
xquery version "3.1";
declare function local:make-catalog($col-path as xs:string*) as item() {
<collection stable="true" xml:base="xmldb:exist://">
{
for $doc in collection($col-path)/*
return
<doc href="{document-uri(root($doc))}"/>
}
</collection>
};
let $dummyColl := xmldb:create-collection('/db','test'),
$store-dummy := xmldb:store($dummyColl, 'test.xml', <test/>),
$catalog := xmldb:store("/db/test","catalog.xml",local:make-catalog('/db/test')),
$stylesheet :=
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="2.0">
<xsl:variable name="coll" select="uri-collection('xmldb:exist:///db/test/catalog.xml')"/>
<xsl:template match="/">
<result>
<xsl:value-of select="for $d in $coll return node-name(doc($d)/*)"/>
<!-- OR -->
<xsl:for-each select="$coll">
<xsl:value-of select="node-name(doc(.)/*)"/>
</xsl:for-each>
</result>
</xsl:template>
</xsl:stylesheet>
return
transform:transform(doc($store-dummy), $stylesheet, ())
Context
- Build: [eXist-5.4.0]
- OS: Ubuntu 22.04.2 LTS
- Java: 1.8.0_275
Additional context
- How is eXist-db installed? docker
Related to: https://github.com/eXist-db/exist/issues/3820 Related to: https://github.com/eXist-db/exist/issues/4517 Related to: https://github.com/eXist-db/exist/issues/4242