【问题标题】:Replace node text with Mule & groovy用 Mule & groovy 替换节点文本
【发布时间】:2018-12-04 22:14:21
【问题描述】:

我正在尝试使用 Mule 中的 groovy 脚本转换器替换节点的文本值。

我首先使用 XML 到 DOM 转换器,然后我使用以下

<scripting:transformer name="replacePassword">
        <scripting:script engine="Groovy"><![CDATA[import org.dom4j.*
import groovy.xml.DOMBuilder
import groovy.xml.dom.DOMCategory

Node passwordElement = message.payload.getRootElement().selectSingleNode("//*[local-name()=\'Password\']")
passwordElement.setTextContent("xxxxxxxxxxxxx")
return message.payload
]]></scripting:script>
    </scripting:transformer>

但这似乎是抛出以下异常

根异常堆栈跟踪:groovy.lang.MissingMethodException:否 方法的签名: org.dom4j.tree.DefaultElement.setTextContent() 是 适用于参数类型:(java.lan g.String) 值: [xxxxxxxxxxxx]

我对 groovy 不太熟悉,我的脚本是否正确?

谢谢

【问题讨论】:

    标签: groovy mule


    【解决方案1】:

    只需查看org.dom4j.tree.DefaultElement 的文档

    没有setTextContent() 方法...但是有setText() 方法

    【讨论】:

    • 顺便说一句,node.text = 'xxx' 实际上在 groovy 中调用了node.setText('xxx'),所以这绝对是相同的方法。
    【解决方案2】:

    最后用这个,这将得到一个节点并替换文本值

     <scripting:transformer name="replacePassword">
                <scripting:script engine="Groovy"><![CDATA[
                node = message.payload.getRootElement().selectSingleNode('//*[local-name()=\'Password\'][1]');
                node.text = 'xxxxxxx';
                return message.payload;]]></scripting:script>
            </scripting:transformer>
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2018-03-25
      • 2010-12-02
      • 2017-10-23
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多