推土机深度属性映射的映射

时间:2014-11-08 04:41:55

标签: xml dozer

我是Dozer的新手并拥有这三个类

class PersonEntity {
    Set<AddressEntity> addresses; 
}

class Person {
    AddressList addresses;
}

class AddressList {
    List<Address> address;
}

有没有办法为此编写推土机映射?

这是我到目前为止所拥有的

<mapping>
    <class-a>domain.entity.AddressEntity</class-a>
    <class-b bean-factory="org.dozer.factory.JAXBBeanFactory">
        com.rackspace.customer.Address
    </class-b>

    <field>
        <a get-method="isPrimary">isPrimary</a>
        <b set-method="setPrimary">primary</b>
    </field>
</mapping>

<mapping>
    <class-a>domain.entity.PersonEntity</class-a>
    <class-b bean-factory="org.dozer.factory.JAXBBeanFactory">com.rackspace.customer.Contact</class-b>

    <field>
        <a>userId</a>
        <b>username</b>
    </field>

    <field custom-converter="domain.converter.PersonNumberAdapter">
        <a>personNumber</a>
        <b>contactNumber</b>
    </field>

    <field>
        <a>addresses</a>
        <b>addresses.address</b>
        <a-hint>domain.entity.AddressEntity</a-hint>
        <b-hint>com.rackspace.customer.Address</b-hint>
    </field>
</mapping>

如何告诉第二个映射器重用现有映射器将AddressEntity转换为Address,反之亦然? 这不起作用,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

<b is-accessible="true">addresses.address</b>

Ok经过一个小时的调试后我发现它试图访问我的setter方法来设置值,因为我的JAXB对象没有任何setter,它失败了。

一旦我添加了is-accessible to true,它就像魅力一样。

来自Dozer FAQ

在映射字段时是否会调用getter和setter方法?

是。您可以通过显式指定is-accessible =&#34; true&#34;来绕过此默认行为。对于任何映射。如果指定了is-accessible,则直接访问字段(包括私有字段)并绕过getter / setter方法。除非您正在处理不包含任何getter或setter方法的非正统数据对象,否则不建议您设置is-accessible =&#34; true&#34 ;.