【发布时间】:2017-11-08 04:08:07
【问题描述】:
我需要帮助以找到解决以下问题的方法,并希望在出现错误时将其揭露:
我目前正在使用json-doc($url) 来访问 Web api 并直接在 xslt 样式表上使用它。
例如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 引用,则它是相对于静态上下文中的 >static 基本 URI 属性解析的。
这显然不是我遇到的行为。
将函数调用放在最顶部的样式表中不是一种选择,因为我们计划将其用作标准实用程序样式表/库。
我目前正在使用 Saxon-HE 9.8.0-5
【问题讨论】:
-
这是整个堆栈跟踪,包括所有“引起”部分吗?
-
嗨@JimGarrison 我更新了堆栈跟踪,为问题提供了一些背景信息。我试图寻找“classpath:”前面的代码,而函数调用
parse-json(unparsed-text($uri))把我带到了这里。看来罪魁祸首在UnparsedTextFunctionabsoluteURI = ResolveURI.makeAbsolute(href, baseURI);的第98行 -
您在 XSLT 代码中使用的是
<xsl:import href="classpath:childthatbreaks.xslt" />吗?为什么不<xsl:import href="childthatbreaks.xslt" />? -
@MartinHonnen 如果我有一个外部模板存储库,我会这样做。但是此资源作为 Spring Boot 应用程序的一部分打包在 JAR 中。您的建议在这种情况下可行吗?
-
我不太熟悉应该如何解析此类 URL,我想您必须等到 Saxonica 的 Michael Kay 回答您的问题。