1

我试图从这里Saxon-HE Integrated Extension Functions |中遵循答案。如何以及在哪里?执行一些 java 方法并返回一个字符串,这与示例相同。

不同之处在于我运行的是 XQuery 而不是 XSLT。

问题是运行 XQuery 时出现错误,提示未定义命名空间。

问题是我可以对 XQuery 使用 XSLT 技巧吗?

现在的代码:在具体方法中:

TransformerFactory factory = TransformerFactory.newInstance();
TransformerFactoryImpl tFactoryImpl = (TransformerFactoryImpl) factory;
config = tFactoryImpl.getConfiguration();

用于设置处理器的方法:

public void addFunctionLibrary(JavaSaxonLib tsj) {
    Processor processor = (Processor) config.getProcessor();
    ExtensionFunction javaCall = tsj;
    processor.registerExtensionFunction(javaCall);
}

测试 ExtensionFunction 的类:

public class JavaSaxonLib implements ExtensionFunction {

    String namespace = "";
    String nsURL = "";

    public JavaSaxonLib(String namespace, String nsURL) {
        this.namespace = namespace;
        this.nsURL = nsURL;
    }

    @Override
    public QName getName() {
        return new QName(nsURL, namespace);
    }

    @Override
    public SequenceType getResultType() {
        return SequenceType.makeSequenceType(ItemType.STRING, OccurrenceIndicator.ONE);
    }

    @Override
    public SequenceType[] getArgumentTypes() {
        return new SequenceType[] {};
    }

    @Override
    public XdmValue call(XdmValue[] arguments) throws SaxonApiException {
        String result = "Saxon is being extended correctly.";
        return new XdmAtomicValue(result);
    }
}

在主要方法中:

JavaSaxonLib jsl = new JavaSaxonLib(namespace, nsURL);
saxMan.addFunctionLibrary(jsl);

谢谢 !:-)

4

1 回答 1

0

最后 !我设法让它工作。

棘手的部分是修改 xquery 以欺骗 Saxon 9-HE 以使用 ExtensionFunction 和 Classloader 执行 java 方法。

太糟糕了,我们无法发送私人消息,好像有人对完整答案感兴趣,我无法正确分享。

于 2018-09-04T15:07:00.330 回答