mule数据映射器中的一对多映射

时间:2015-01-11 15:48:22

标签: mule

enter image description here我有一个输入xml,它只有一个Telephone子元素,

<ContactMethod>
                <Telephone type="fax">
                    <Number>String</Number>
                    <Extension>String</Extension>
                </Telephone>
</ContactMethod>

但我的输出XML有多个Telephone子元素

<ContactMethod>
                    <Telephone type="fax">
                        <Number>String</Number>
                        <Extension>String</Extension>
                    </Telephone>
                    <Telephone type="fax">
                        <Number>String</Number>
                        <Extension>String</Extension>
                    </Telephone>
    </ContactMethod>

我想从输入元素Number映射到输出Number以及Extension元素。

我无法更改架构,因为它是全局使用的。

我没有看到使用Element Mapping映射的任何选项。

我尝试将Rule添加到ContactMethod元素,但没有运气。

...

上面我就是我问的例子。我需要datamapper中的一对多映射构思。

参见附图,这是我的实际要求。查看源和目标中的Disclosure/CandidateDisclosure元素

我的源代码是XML,目标是JSON,但我需要的实际逻辑类似于所有结构..

1 个答案:

答案 0 :(得分:0)

我正在维护一个使用DataMapper并面临同样问题的项目。为了解决这个问题,我在DataMapper之后添加了Java Transformer(你可以使用Groovy或其他脚本语言)来对一对多关系进行分组。

以下是伪代码:

 provide empty telpMap

 foreach telpXml which is extracted from src/payload {
     key = telpXml.get("@type");
     if (telpMap.containsKey(key)) {
         List number = telpMap.get(key).get("Number");
         number.addAll(telpXml.get("Number"));
         List extension = telpMap.get(key).get("Extension");
         extension.addAll(telpXml.get("Extension"));
     } else {
         telpMap.put(key, telpXml);
     }
 }

 return telpMap.values();