Json 在Saxon 9.8中导入XSLT样式表URI

Json 在Saxon 9.8中导入XSLT样式表URI,json,xml,xslt,xpath,saxon,Json,Xml,Xslt,Xpath,Saxon,我需要帮助找到以下问题的解决方法,并希望在出现错误的情况下将其公诸于众: 我目前正在使用json文档($url)访问web api,并直接在xslt样式表上使用它 e、 g.json文档('https://localhost:8443/api/endpoint) 一切都很好,没问题 当我使用它将xslt导入到另一个样式表时,事情就发生了变化 xslt解析器似乎试图通过在classpath: 根据规范 如果URI是相对URI引用,那么它是相对于静态上下文中的>static base URI属性进

我需要帮助找到以下问题的解决方法,并希望在出现错误的情况下将其公诸于众:

我目前正在使用
json文档($url)
访问web api,并直接在xslt样式表上使用它

e、 g.
json文档('https://localhost:8443/api/endpoint)

一切都很好,没问题

当我使用它将xslt导入到另一个样式表时,事情就发生了变化

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

根据规范

如果URI是相对URI引用,那么它是相对于静态上下文中的>static base URI属性进行解析的

这显然不是我遇到的行为

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


我目前使用的是Saxon HE 9.8.0-5

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

不过我认为你是对的。Saxon特殊情况类路径:URI,因为它们是非标准的,并且没有被java.net.URI类正确处理,如果基URI以“classpath:”开头,那么它就在提供的URI前面加上“classpath:”,而不首先检查提供的URI是否是相对的

您可以在以下位置跟踪此问题:


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

不过我认为你是对的。Saxon特殊情况类路径:URI,因为它们是非标准的,并且没有被java.net.URI类正确处理,如果基URI以“classpath:”开头,那么它就在提供的URI前面加上“classpath:”,而不首先检查提供的URI是否是相对的

您可以在以下位置跟踪此问题:


是整个堆栈跟踪,包括所有“由”引起的部分吗?Hi@JimGarrison I更新了堆栈跟踪,为问题添加了一些上下文。我试图寻找“classpath:”前面的代码,函数调用
parse json(未解析文本($uri))
将我带到了这里。罪魁祸首似乎在
UnparsedTextFunction
absoluteURI=ResolveURI.makeAbsolute(href,baseURI)的第98行
在XSLT代码中使用的是什么?为什么不
?@MartinHonnen如果我有一个外部模板库,我会的。但该资源作为Spring引导应用程序的一部分打包在JAR中。在这种情况下,您的建议可能吗?我不太熟悉如何解析此类URL,我想您必须等到Saxonica的Michael Kay回答您的问题。这是整个堆栈跟踪,包括所有“由”引起的部分吗?Hi@JimGarrison我更新了堆栈跟踪,为问题添加了一些上下文。我试图寻找“classpath:”前面的代码,函数调用
parse json(未解析文本($uri))
将我带到了这里。罪魁祸首似乎在
UnparsedTextFunction
absoluteURI=ResolveURI.makeAbsolute(href,baseURI)的第98行
在XSLT代码中使用的是什么?为什么不
?@MartinHonnen如果我有一个外部模板库,我会的。但该资源作为Spring引导应用程序的一部分打包在JAR中。在这种情况下,您的建议可能吗?我不太熟悉如何解析此类URL,我想您必须等到Saxonica的Michael Kay回答您的问题。
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]