数据编织Pojo到Pojo映射

时间:2015-08-31 08:42:14

标签: mule mule-component dataweave

我正在尝试按照下面的方式对Pojo进行Pojo转换(每个Pojo都有一个对象列表) - 输出被转换但是正在跳过一个对象 - 下面的示例代码。

public class Pojo1 implements Serializable {

 private List<Foo> fooList =new ArrayList<Foo>(1);

 public Pojo1() {
 }

 public List<Foo> getFooList() {
     return fooList ;
 }

 public void setFooList(List<Foo> fooList) {
     this.fooList= fooList;
 }

}

公共类Pojo2实现了Serializable {

    private List<Bar> barList =new ArrayList<Bar>(1);

    public Pojo2() {
    }

    public List<Bar> getBarList() {
        return barList ;
    }

    public void setBarList(List<Bar> barList) {
        this.barList= barList;
    }

}

DataWeave转换如下 - 这个工作正常,但是List中只有一个对象被转换,我错过了第二个。

   barList: [{
   ( 
       payload.fooList map {
           item1:$.item1                
       }
   )
   } as :object {
        class :"com.fooClass"
   }]
   } as :object {
       class : "com.barClass"
   }

提前致谢!

1 个答案:

答案 0 :(得分:2)

尝试

{
  barList: in1.fooList map {
    item1: $.item1
  } as :object {class : "com.fooClass"}
} as :object {class : "com.barClass"}

注意:as :object {class : "com.fooClass"}应该是可选的,因为可以推断

问题似乎是您定义的array只有one object,并用以下结果填充该对象:

payload.fooList map {
  item1:$.item1                
}

这是一个对象数组:

[
  {
    item1: "value1"
  },
  {
    item1: "value2"
  }
]

用对象填充对象后,它最终会像:

{
  item1: "value1",
  item1: "value2",
  item1: ...
}

因此,您正在使用具有大量重复字段(具有不同值)的对象填充数组,并且当写入该输出时(因为它是java),这些字段中的每一个仅获得一个值。