【问题标题】:Camel xquery endpoint with OSGi bundle uri带有 OSGi 捆绑 uri 的骆驼 xquery 端点
【发布时间】:2012-09-20 14:35:35
【问题描述】:

我有一个启动 Camel (2.10.0) 上下文的 OSGi 包(部署到 Karaf 2.2.4)。 Camel 上下文的路由构建器有一些 xquery 端点 URI,例如

"xquery:classpath:Dir1/Dir2/example.xq"

当上下文尝试解析该 URI 时,它失败了,因为 Camel 包与 .xq 文件所在的类路径不同。所以,我创建了一个 url 扩展函数,它变成了

"xquery:classpath:..."

进入

"xquery:bundle://42.0:6/..."

因为我在处理ClassPathScanningCandidateComponentProvider(Spring 3.1.1)时在我的项目早期处理了捆绑 URI 和 OsgiBundleResourcePatternResolver。不幸的是,我似乎找不到办法让 Camel 的 XQueryComponent 使用我的 OsgiBundleResourcePatternResolver

  1. 我这样做是否正确?有没有更简单的方法来做到这一点?
  2. 如果是,我如何确保XQueryComponent 可以理解bundle: URI?
  3. 另外,我是否可以确保任何骆驼组件都可以理解bundle: URI?

【问题讨论】:

    标签: spring osgi xquery apache-camel apache-karaf


    【解决方案1】:

    如果您的应用程序具有带有上述 xquery 端点的 Camel 路由,则需要导入 xq 文件所在的包,例如表示“Dir1.Dir2”的包。

    所以在具有 OSGi 导入|导出的 META-INF/MANIFEST.MF 中。您应该有该给定包的导入。

    并回答你的 3 个子弹

    1. 不,见上文
    2. 您需要扩展此组件并为“捆绑包”添加您自己的逻辑
    3. 不,不是,因为您需要向 camel-core/camel-core-osgi 添加逻辑。

    此外,应用程序的捆绑包 ID 可以更改,因此不建议通过其 ID 来引用捆绑包。并且您不能分配捆绑 id,这是由 osgi 容器自行分配的。

    【讨论】:

    • 虽然 Camel 包是独立的,但 Camel context 及其路由构建器与 .xq 文件位于同一个包中。我写了我的问题,假设这是访问 .xq 文件的骆驼捆绑包的问题,​​但你的回答让我相信这不是问题。如果 routebuilder 和 .xq 在同一个包中,他们不应该已经能够看到彼此吗?
    【解决方案2】:

    感谢克劳斯的回答,我才意识到我的 .xq 文件不在其 .jar 的正确目录中。

    Dir1 位于其 .jar 文件的根目录中。虽然在非 OSGi Web 容器中运行应用程序运行良好,但 Karaf 似乎对资源应该在我的 .war 文件中的位置更加严格。我将 .xq 文件移至 WEB-INF/classes/Dir1/...,现在当代码使用 xquery:classpath:Dir1/Dir2/example.xq 时不再接收 FileNotFoundExceptions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多