【问题标题】:SAXON - XPST0017: Cannot find a matching 1-argument function namedSAXON - XPST0017:找不到匹配的 1 参数函数,名为
【发布时间】:2018-08-22 09:10:36
【问题描述】:

我有一个简单的 jar 测试程序,我用它来解析带有 xquery 文件的 xml。 问题是在 xquery 文件中我声明了一个 java 命名空间:

declare namespace java="java:MyString";

然后出于测试目的,我只有一个静态方法 toString(Object o)。

当我在 Eclipse 之外执行它时(当我手动设置类文件夹时,它正确管理了类路径)我在标题中得到错误:

> C:\>java -jar XQueryJava.jar
> -xq XQuery\test.xq -xml XQuery\test.xml Error on line 9 of XQuery\test.xml:   XPST0017: Cannot find a matching 1-argument
> function named {java:MyString}toString() ; SystemID: XQuery\test.xml;
> Line#: 9; Column#: -1 net.sf.saxon.trans.StaticError: Cannot find a
> matching 1-argument function named {java:MyString}toString()
>         at net.sf.saxon.query.UnboundFunctionLibrary.bindUnboundFunctionCalls(UnboundFunctionLibrary.java:114)
>         at net.sf.saxon.query.StaticQueryContext.bindUnboundFunctionCalls(StaticQueryContext.java:1479)
>         at net.sf.saxon.query.QueryParser.makeXQueryExpression(QueryParser.java:106)
>         at net.sf.saxon.query.StaticQueryContext.compileQuery(StaticQueryContext.java:472)
>         at net.sf.saxon.query.StaticQueryContext.compileQuery(StaticQueryContext.java:502)
>         at xpath.AffichageXPath.execute(AffichageXPath.java:91)
>         at xpath.AffichageXPath.main(AffichageXPath.java:49)

我尝试使用“-cp”和我将 .class 文件放入的文件夹:

java --class-path XQuery\class -jar XQueryJava.jar -xq XQuery\test.xq -xml XQuery\test.xml

但还是同样的问题。

如果我将类文件与 jar 放在同一个文件夹中,一切都很好。 为什么它不能与 CP 论点一起使用?我还以为是重点...

有什么想法吗?

谢谢。

【问题讨论】:

    标签: java saxon


    【解决方案1】:

    首先堆栈跟踪显示您正在使用

    调用处理器
    net.sf.saxon.query.StaticQueryContext.compileQuery
    

    这是一个相当低级的入口点,在这个级别有很多方法会出错。我建议你使用 s9api 接口 (XQueryCompiler.compile())。

    在没有启用 Saxon-PE/EE 的情况下运行时很容易出错。对自反扩展函数的调用至少需要 Saxon-PE,它还需要存在许可证文件。检查 Saxon 配置是 ProfessionalConfiguration 还是 EnterpriseConfiguration。

    使用命令行上的 -TJ 选项或 API 中的等效配置属性 (FeatureKeys.TRACE_EXTERNAL_FUNCTIONS) 可以更好地诊断为什么找不到函数。

    最后,请注意,在 Java 命令行上使用 -jar 意味着忽略类路径:所有内容都必须从 JAR 文件本身加载。这使得获取许可证文件和任何外部库类变得相当困难,因此最好避免。

    【讨论】:

    • 上帝...你不能加载 jar 和外部类/jar 吗? :-|因此,除非所有类都与 jar 位于同一文件夹中,否则无法运行像 xquery 那样动态加载外部类的 jar...
    • 您需要的类不必都在同一个文件夹中,但它们都必须在类路径中。
    • 好吧,我最终让它工作了我不知道到底是怎么做到的......我只是做了 10 次同样的事情,现在它使用这种方式工作:java -cp ".\*;classes\*" xpath.AffichageXPath -xq "XQuery\test.xq" -xml "XQuery\test.xml"我尝试了一个 JAR 和一个类文件夹中的 CLASS 并且两者都使用当前文件夹中的主 jar。我仍然不明白为什么他们“禁止”使用 -jar 和 -cp...
    猜你喜欢
    • 1970-01-01
    • 2023-03-02
    • 2010-10-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多