Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SAXON-XPST0017:找不到名为_Java_Saxon - Fatal编程技术网

Java SAXON-XPST0017:找不到名为

Java SAXON-XPST0017:找不到名为,java,saxon,Java,Saxon,我有一个简单的jar测试程序,用于用xquery文件解析xml。 问题是我在xquery文件中声明了一个java名称空间: declare namespace java="java:MyString"; 然后为了测试的目的,我有一个静态方法toString(objecto) 当我在Eclipse之外执行它时(当我手动设置类文件夹时,他正确地管理了类路径),我在标题中得到了错误: > C:\>java -jar XQueryJava.jar > -xq XQuery\test.

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

declare namespace java="java:MyString";
然后为了测试的目的,我有一个静态方法toString(objecto)

当我在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参数一起工作?我以为这就是重点

有什么想法吗


谢谢。

首先,堆栈跟踪显示您正在使用调用处理器

net.sf.saxon.query.StaticQueryContext.compileQuery
这是一个相当低层次的切入点,在这个层次上有很多方法会出错。我建议您使用s9api接口(
XQueryCompiler.compile()

很容易出错的一件事是在没有启用Saxon PE/EE的情况下运行。对自反扩展函数的调用至少需要Saxon PE,它还需要一个许可证文件。检查Saxon配置是否为专业配置或企业配置

使用命令行上的-TJ选项或API中的等效配置属性(
FeatureKeys.TRACE\u EXTERNAL\u FUNCTIONS
)可以更好地诊断它找不到函数的原因


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

God。。。无法加载jar和外部类/jar?:-|因此,不可能像xquery那样运行一个动态加载外部类的jar,除非所有类都与jar位于同一文件夹中……您需要的类不必都位于同一文件夹中,但它们都必须位于类路径上。好吧,我最终使它工作了,我不知道具体如何。。。我刚刚做了10次同样的事情,现在它是这样工作的:
java-cp.\*;classes\*”xpath.AffichageXPath-xq“XQuery\test.xq”-xml“XQuery\test.xml”
我尝试了classes文件夹中的一个JAR和一个类,它们都在处理当前文件夹中的主JAR。我仍然不明白为什么他们“禁止”使用-jar和-cp。。。