【发布时间】:2016-02-04 16:23:34
【问题描述】:
我调用 DSS 服务并接收回 XML,然后使用迭代器中介器迭代 XML 中的标记。在迭代器内部,我使用丰富的中介器向 XML 添加一些 XML 节点,但每次循环或离开迭代器时,更改都消失了,即使在最后一个循环中,返回的 XML 也不会保留任何更改。
【问题讨论】:
标签: xml wso2 wso2esb wso2dss wso2developerstudio
我调用 DSS 服务并接收回 XML,然后使用迭代器中介器迭代 XML 中的标记。在迭代器内部,我使用丰富的中介器向 XML 添加一些 XML 节点,但每次循环或离开迭代器时,更改都消失了,即使在最后一个循环中,返回的 XML 也不会保留任何更改。
【问题讨论】:
标签: xml wso2 wso2esb wso2dss wso2developerstudio
迭代调解器的作用类似于克隆调解器。不同之处在于它将初始消息拆分为几个片段(它不会复制初始消息)
如果您选择在迭代调解器之后继续父调解(属性 continueParent 设置为 true),您会看到初始消息(在迭代发生之前您正在调解的消息)
如果要更改初始消息的内容,必须在迭代或克隆外使用enrich/XSLT/javascript
【讨论】:
我知道这是一篇旧帖子,但我一直在尝试使用迭代器来更改消息负载结构,但我发现它并不是它的设计目的。
迭代器设计用于根据 XPATH 表达式将消息克隆为更小的消息。在目标序列中,您可以对消息做任何您喜欢的事情——这通常是调用另一个 Web 服务。但是这个消息或多或少地局限于迭代器操作的上下文。一旦迭代器完成了它定义的目标序列,它就会废弃该消息,如果您表示希望在迭代完成后继续使用父序列,WSO2 将默认选择旧的消息上下文。
我知道你在想什么——“该死的,我必须学习一些新东西”。这就是为什么到目前为止我大多忽略 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 中介器中的键。
【讨论】: