使用 apache camel transformer EIP 将模块导入 xquery

我正在使用 Java 开发一个简单的代码算法,我想知道在计算时间复杂度? :之间可能存在差异。if-else我认为它们都具有相同的时间复杂度,但我不确定......


例如:


if (number == num) {

    count += 1;

}

else {

    count -= 1;

}


count += (number == num) ? 1 : -1;

如果你能告诉我它们之间的区别,真的谢谢你:-)我有一个非常简单的骆驼路线,除了使用的 xquery,这就是为什么我将它提取到一个单独的文件中。在我的骆驼路线中,我使用 Transformer EIP 调用 xquery:


.transform().xquery("resource:classpath:xquery/myCoolXQuery.xquery",String.class)

XQuery 本身工作正常,但由于一些功能更改,我现在想导入另一个 XQuery 模块,我想将其用作具有一些帮助功能的“库”,因为我有很多可以使用它们的 XQuery 文件。


所以我在 XQuery 中所做的是:


xquery version "3.0" encoding "UTF-8";


declare namespace fn = 'http://www.w3.org/2005/xpath-functions';


(: Library of really helpful functions :)

import module namespace lib = "http://handofnod.com/xquery-lib" at "classpath:xquery/lib.xquery";

题:

如何配置StandardModuleURIResolver能够从类路径加载导入模块的 Apache Camel ?


到目前为止的调查/问题

NullpointerException不幸的是,apache camel 现在在以下位置抛出一个StandardModuleURIResolver:


if ("classpath".equals(absoluteURI.getScheme())) {

    String path = absoluteURI.getPath();

    is = this.config.getDynamicLoader().getResourceAsStream(path);

那是因为absoluteURI(是"classpath:xquery/lib.xquery")无法正确转换并且变量path是NULL(这几乎是代码味道,但现在不是我的事)。


absoluteURI无法转换,因为中net.sf.saxon.query.XQueryParser没有设置值this.env.getStaticBaseURI()。


所以我在调试期间尝试将staticBaseURI值设置为,classpath但随后StandardModuleURIResolver也返回一个absoluteURI具有NULL值的值,getPath()从而导致相同的NullPointerException.


所以现在我不知道如何将Transformer-EIP与 XQuery 一起使用,XQuery 使用模块导入来实现某些辅助函数。


另一种可能的解决方案

另一种可能的解决方案是不使用 Apache Camel 中实现的 Transformer-EIP,而是使用 ,ToDefinition因为可以通过 URL 参数定义自定义Saxon 配置,该参数可以使用覆盖ModuleURIResolver,这样就没有问题了。


另外,我当然可以使用自定义Processor实现来实现我想要的,但这不是使用为 EIP 提供实现的 Camel 的重点。


如果我可以在我的 XQuery 中使用带有模块导入的Transformer-EIP ,那就太好了。

项目设置是:

  • 弹簧引导 2.1.0.RELEASE

  • 阿帕奇骆驼 2.22.2

  • 使用 Maven 构建

最后一个问题

谁能帮我吗?


慕容708150
浏览 102回答 1
1回答

慕尼黑的夜晚无繁华

由于我的问题似乎没有答案,因此我进行了越来越深入的调试,实际上似乎不可能以任何方式使用 XQuery 配置 Transformer-EIP。此外,我无法找到任何方法从类路径加载导入的 xquery 模块,所以我更改了代码,现在我通过 XQueryEndpoint 调用我的 xquery,它提供对自定义配置的支持:.to("xquery:/xquery/myCoolXQuery.xquery?configuration=#saxonConfig&resultsFormat=String")这样我的路线就可以了。但是如果能够使用 就好了,transform()因为代码会更容易理解。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java