java - 推土机 - 测绘集合

标签 java jaxb dozer

我有一个类似于以下两个类的场景:

public class Person {
    private String name;
    private Set<Person> familyMembers;
    //constructors & getters and setters
}

Person 类是我的源类。我正在尝试使用 Dover 将此类映射到以下目标类:

public class PersonPrime {
    private String personName;
    private FamilyMembers familyMembers;
    //constructors & getters and setters
}

public class FamilyMembers {
    private List<PersonPrime> familyMembers;
    //constructors & getters and setters
}

我的实际场景中的目标类是由 JAXB 生成的(使用我创建的 XSD)。 XSD 是规定的,我无法真正更改它们,因此无法更改目标类。目前,我可以在映射 XML 文件中映射基元,但无法映射集合。

知道如何使用 Dozer 将 Person 的对象映射到 PersonPrime 类型的对象吗?

最佳答案

默认情况下,JaxB 不会为“FamilyMembers”类型中的集合生成 setter。当 Dozer 尝试调用不存在的 setter 时,这将导致 Dozer 内部深处出现空指针异常(Dozer 5.4.0 中的 org.dozer.util.ReflectionUtils.java:323)。为了避免这种情况,您需要在集合字段上设置 is-accessible true ,这将导致它直接设置 familyMembers.familyMembers 字段。因此,以下修改后的映射应该起作用:

<mapping>
  <class-a>Person</class-a>
  <class-b>PersonPrime</class-b>
  <field>
    <a>name</a>
    <b>personName</b>
  </field>
  <field>
    <a>familyMembers</a>
    <b is-accessible="true">familyMembers.familyMembers</b>
  </field>
</mapping>

关于java - 推土机 - 测绘集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23215406/

相关文章:

java - 使用单独的元素和其他列表中的元素填充 java 列表的最佳方法是什么?

java - 在Java中打印三角形

JAXB:如何将派生对象作为基本类型的 XML 元素返回?

java - 服务器无法识别 HTTP header ' SOAPAction ' 的值

java - Dozer:将字段映射到函数输出

java - 使用 Dozer 转换嵌套集合

java - Dozer 将 java.lang.Date(作为 Map 字段)映射到 XMLGregorianCalendar

java - 有更快的 "Map"吗?

java - 是否可以有一个只允许基于键的值类型的映射?

java - JAXB 如何猜测列表的模式类型?