2013-11-14 6 views
1

Как и в заголовке, я пытаюсь отобразить 2 класса, но один из классов имеет частную собственность с частным сеттером.Dozer Field - исключить одностороннюю приватную собственность, дающую ошибку

public Class A { 
private String propertyA; 
private String propertyB; 

ClassA(){ 
} 
public String getPropertyA() { 
    return propertyA; 
} 

public void setPropertyA(String propertyA) { 
    this.propertyA= propertyA; 
} 
public String getPropertyB() { 
    return propertyB; 
} 

public void setPropertyB(String propertyB) { 
    this.propertyB= propertyB; 
} 
} 


public Class B { 
private String propertyA; 
private String propertyB; 

ClassB (String propertyB){ 
    propertyB = propertyB; 
} 
public String getPropertyA() { 
    return propertyA; 
} 

public void setPropertyA(String propertyA) { 
    this.propertyA= propertyA; 
} 
public String getPropertyB() { 
    return propertyB; 
} 

void setPropertyB(String propertyB) { 
    this.propertyB= propertyB; 
} 
} 

Я хочу сопоставить объекты класса А до класса В и наоборот, с той лишь разницей, что propertyB не нужно, чтобы установить в отображение из класса А к В. Я попытался он имеет следующую конфигурацию:

<mapping> 
    <class-a map-null="false">classA</class-a> 
    <class-b>classB</class-b> 
    <field> 
     <a get-method="getPropertyA" set-method="setPropertyA">propertyA</a> 
<b get-method="getPropertyA" set-method="setPropertyA">propertyA</b> 
    </field> 
    <field-exclude type="one-way"> 
     <a get-method="getPropertyB" set-method="setPropertyB">propertyB</a> 
     <b get-method="getPropertyB">propertyB</b> 
    </field-exclude> 
</mapping> 

Это дает мне исключение: свойство propertyB для класса classB не может быть записано. Это было мое намерение с частной собственностью, но что бы я ни делал, исключение остается. Я попытался добавить сопоставление полей с типом = «односторонним», но это дает мне то же исключение. Есть ли способ сделать это с помощью Dozer?

ответ

0

Я думаю, что вы ищете, это добавить is-accessible="true" в ваше определение propertyB для classB. Это сообщает Dozer, что он должен получить доступ к атрибуту напрямую, а не через getter или setter.

Вам не нужно указывать все геттеры и сеттеры, если они следуют стандарту компонента. Кроме того, если поле сопоставляет оба способа со стандартом компонента, вам не нужно указывать его вообще. Это означает, что XML должен иметь возможность выглядеть примерно так:

<mapping> 
    <class-a map-null="false">classA</class-a> 
    <class-b>classB</class-b> 
    <field-exclude type="one-way"> 
     <a>propertyB</a> 
     <b is-accessible="true">propertyB</b> 
    </field-exclude> 
</mapping>