我调用 DSS 服务并接收回 XML,然后使用迭代器调解器迭代 XML 中的标记。在迭代器内部,我使用丰富的中介器向 XML 添加一些 XML 节点,但每次循环或离开迭代器时,更改都消失了,即使在最后一个循环中,返回的 XML 也不会保留任何更改。
2 回答
迭代调解器的作用类似于克隆调解器。不同之处在于它将初始消息拆分为几个片段(它不会复制初始消息)
如果您选择在迭代调解器之后继续父调解(属性 continueParent 设置为 true),您会看到初始消息(在迭代发生之前您正在调解的消息)
如果要更改初始消息的内容,必须在 iterate 或 clone 之外使用enrich/XSLT/javascript
我知道这是一篇旧文章,但我一直在尝试使用迭代器来更改消息有效负载结构,但我发现这不是它的设计目的。
迭代器设计用于基于 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 中介器中的键。