Saxon 9.8中导入的XSLT样式表URI

时间:2017-11-08 04:08:08

标签: json xml xslt xpath saxon

我需要帮助找到以下问题的解决方法,并希望在发生错误时将其解决:

我目前正在使用json-doc($url)访问网络API并直接在xslt样式表上使用它。

e.g。 json-doc('https://localhost:8443/api/endpoint')

一切都很好,没问题。

当我使用它时,将xslt导入另一个样式表,那就是事情发生时。

<xsl:import href="classpath:childthatbreaks.xslt" />

net.sf.saxon.trans.XPathException: Unable to load the resource 
[classpath:https://localhost:8443/api/endpoint] using the thread context class loader or the current class's class loader
at net.sf.saxon.lib.StandardUnparsedTextResolver.resolve(StandardUnparsedTextResolver.java:184) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.functions.UnparsedTextFunction.readFile(UnparsedTextFunction.java:76) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.functions.UnparsedText.evalUnparsedText(UnparsedText.java:89) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.functions.UnparsedText.call(UnparsedText.java:43) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.functions.UnparsedText.call(UnparsedText.java:29) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.FunctionCall.iterate(FunctionCall.java:547) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.CardinalityChecker.evaluateItem(CardinalityChecker.java:280) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.parser.Evaluator$3.evaluate(Evaluator.java:73) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.parser.Evaluator$3.evaluate(Evaluator.java:70) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.SystemFunctionCall.evaluateArguments(SystemFunctionCall.java:434) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.FunctionCall.iterate(FunctionCall.java:545) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.instruct.CopyOf.processLeavingTail(CopyOf.java:557) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.instruct.Choose.processLeavingTail(Choose.java:880) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:699) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:687) ~[Saxon-HE-9.8.0-5.jar:na]
at net.sf.saxon.expr.instruct.NamedTemplate.expand(NamedTemplate.java:262) ~[Saxon-HE-9.8.0-5.jar:na]

似乎xslt解析器试图通过预先classpath:

从已经绝对的URI中构建绝对URI

根据规范,

  

如果URI是相对URI引用,则相对于静态上下文中的&gt;静态基URI属性进行解析。

这显然不是我遇到的行为。

将函数调用放在最顶层的样式表中不是一个选项,因为我们计划将其用作标准实用程序样式表/库。

我目前正在使用Saxon-HE 9.8.0-5

1 个答案:

答案 0 :(得分:0)

显示的堆栈跟踪来自unparsed-text()函数的调用:因为json-doc()是作为合成unparsed-text() => parse-json()实现的。

我认为你是对的。 Saxon特例类路径:URI,因为它们是非标准的,并且java.net.URI类没有正确处理,如果基URI以“classpath:”开头,那么它将“classpath:”添加到提供的URI而不用首先检查提供的URI是否相对。

您可以在

跟踪此问题

https://saxonica.plan.io/issues/3518