【问题标题】:WSO2 ESB enrich mediator inside an iterator mediatorWSO2 ESB 在迭代器中介器中丰富中介器
【发布时间】:2016-02-04 16:23:34
【问题描述】:

我调用 DSS 服务并接收回 XML,然后使用迭代器中介器迭代 XML 中的标记。在迭代器内部,我使用丰富的中介器向 XML 添加一些 XML 节点,但每次循环或离开迭代器时,更改都消失了,即使在最后一个循环中,返回的 XML 也不会保留任何更改。

【问题讨论】:

    标签: xml wso2 wso2esb wso2dss wso2developerstudio


    【解决方案1】:

    迭代调解器的作用类似于克隆调解器。不同之处在于它将初始消息拆分为几个片段(它不会复制初始消息)

    如果您选择在迭代调解器之后继续父调解(属性 continueParent 设置为 true),您会看到初始消息(在迭代发生之前您正在调解的消息)

    如果要更改初始消息的内容,必须在迭代或克隆外使用enrich/XSLT/javascript

    【讨论】:

    • 有没有办法使用丰富的中介将值从迭代器内部复制到它外部的属性?
    • 您使用 MessageContext 的副本(包含消息有效负载、属性等)并且无法在父中介中访问此副本:您为什么不考虑其他方式应用你的转变? XSLT 或 JavaScript 有什么问题?
    • 我现在已经通过在它后面放置一个聚合器调解器来解决这个问题,谢谢您的帮助
    • @user3758298 你能详细说明你的聚合解决方案吗?
    【解决方案2】:

    我知道这是一篇旧帖子,但我一直在尝试使用迭代器来更改消息负载结构,但我发现它并不是它的设计目的。

    迭代器设计用于根据 XPATH 表达式将消息克隆为更小的消息。在目标序列中,您可以对消息做任何您喜欢的事情——这通常是调用另一个 Web 服务。但是这个消息或多或少地局限于迭代器操作的上下文。一旦迭代器完成了它定义的目标序列,它就会废弃该消息,如果您表示希望在迭代完成后继续使用父序列,WSO2 将默认选择旧的消息上下文。

    XSLT 救援

    我知道你在想什么——“该死的,我必须学习一些新东西”。这就是为什么到目前为止我大多忽略 XSLT 的原因——我想我可以用 Synapse 配置语言做所有事情。但是 XSLT 确实是个炸弹,我建议您查看 W3Schools 上的教程,看看您能做什么:http://www.w3schools.com/xsl/

    XSLT 的强大之处在于,您可以在模板中使用 for-each 表达式:http://www.w3schools.com/xsl/xsl_for_each.asp

    作为该表达式的参数,您可以指定一些 XPATH(就像迭代调解器一样),但它实际上会构造消息。

    要在 ESB 中使用 XSLT,只需添加一个带有 XSLT 样式表的本地 XML 条目,然后引用 XSLT 中介器中的键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2012-08-31
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      相关资源
      最近更新 更多