【问题标题】:How to add custom XML tag to Apache Camel configuration如何将自定义 XML 标记添加到 Apache Camel 配置
【发布时间】:2014-07-02 14:58:24
【问题描述】:

我需要实现这样的东西:

<from uri="direct:pewpew" />
<doMegaWork status="Busy" message="Don't push on me!">
<to uri="direct:next"/>

我仍然没有在 Google 上找到同样的问题(更不用说解决方案了)。也许有人知道怎么做?

【问题讨论】:

  • 出于好奇:扩展 Camel XML 语言背后的要求是什么?
  • 我无法回答您的问题,因为我也没有在 camel.apache.org 上找到有关此的一些信息。其实我需要类似jsp自定义标签的东西。
  • 你什么也找不到,因为这是一件奇怪的事情。这就是为什么我要问你的要求是什么。也许我们可以指出如何在不扩展 Camel XML 语言的情况下满足您的要求。也许this link 也有帮助?
  • 说实话,这是我的任务。如果这个问题没有很好的解决方案 - 我会尝试规避它。感谢您的帮助!

标签: xml apache-camel custom-tags


【解决方案1】:

Camel(尚)不支持自定义标签和/或命名空间(也许永远不会支持?)。

我看到以下不同的解决方案来封装可重用的处理步骤:

  • 编写单独的可重用路由。我想这是最简单的解决方案,也是标准的方法。
  • 编写封装整个处理的处理器/bean/服务。
  • 使用Camel context 组件在您的路由中包含完整的上下文。首先,向注册表添加 Camel 上下文:

    registry.bind("accounts", myAccountContext);
    

    然后你在你的路线中使用上下文:

    <from uri="accounts:invoice"/>
    
  • 按照here的描述编写一个组件。

【讨论】:

  • 如果要添加新定义怎么办?类似于“选择”组件...
【解决方案2】:

Camel 是一种特定领域的语言 - “简洁的应用程序消息交换语言”。

我们的想法不是使用自定义语言元素来扩展它,而是在核心中集中处理。这个想法是通过处理器、组件、bean 等来扩展它。

原因与您不使用关键字扩展 Java 的原因非常相似,例如 megawork{ ... }。关键字或 XML 标签是核心语言的一部分。

除此之外,引入自定义元素在技术上可能相当复杂,因为 XML DSL 是模式的一部分,必须使用扩展等进行更新。

也就是说,您始终可以 fork Camel 并构建自己的一组 DSL 方法,但您必须自己维护该副本。除非 DSL 条目不适合一般情况,并且回馈给 Camel 社区(并由其批准)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2017-04-01
    • 1970-01-01
    • 2017-12-30
    相关资源
    最近更新 更多