【问题标题】:XQuery executes Java function with Saxon 9-HEXQuery 使用 Saxon 9-HE 执行 Java 函数
【发布时间】:2019-02-09 13:38:50
【问题描述】:

我尝试按照Saxon-HE Integrated Extension Functions | how and where?这里的答案执行一些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);
    }
}

在main方法中:

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

谢谢! :-)

【问题讨论】:

    标签: java xquery saxon


    【解决方案1】:

    终于!我设法让它工作。

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

    很遗憾,我们无法发送私人消息,好像有人对完整答案感兴趣我无法正确分享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      相关资源
      最近更新 更多