2014-11-11 2 views
3

Согласно документации на дозатор, односторонние поля отображаются только тогда, когда объект «a» сопоставляется с объектом «b». Если «b» отображается на «a», тогда поле не отображается.Тип поля для сортировки бульдозера = «односторонний» не работает должным образом

Но для нижнего кода «b» все еще отображается на «a».

<mapping > 
    <class-a>com.examples.source.Source</class-a> 
    <class-b>com.examples.destination.Destination</class-b> 
    <field type="one-way"> 
     <a set-method="setIRCCode" get-method="getIRCCode">ircCode</a> 
     <b set-method="setIrcCode" get-method="getIrcCode">ircCode</b> 
    </field> 
</mapping> 

package com.examples.source; 
public class Source { 
    protected String ircCode; 

    public String getIRCCode() { 
     return ircCode; 
    } 
    public void setIRCCode(String value) { 
     this.ircCode = value; 
    } 
} 

package com.examples.destination; 
public class Destination { 
    private String ircCode; 
    public String getIrcCode() { 
     return this.ircCode; 
    } 
    public void setIrcCode(String ircCode) { 
     this.ircCode = ircCode; 
    } 
} 

public class Mapping { 
    public static void main(String[] args) { 
     DozerBeanMapper mapper = new DozerBeanMapper(Arrays.asList(new String[]{"Dozer-Mapping.xml"})); 
     Destination destinationObj=new Destination(); 
     destinationObj.setIrcCode("B"); 
     Source srcObj= mapper.map(destinationObj, Source.class); 
     System.out.println("Reverse Mapping IRCCode= "+ srcObj.getIRCCode()); 
    } 
} 

Выход при работе над кодом:

Reverse Mapping IRCCode= B **(Unexpected and Wrong Result)** 

Ожидаемый результат:

Reverse Mapping IRCCode= null 

Я использую Бульдозер 5.4.0 версии.

ответ

0

Я попробовал приведенный ниже код, похожий на ваш пост, с 5.5.1 из бульдозера, и он обеспечивает ожидаемый результат как null.

Код:

public class A { 

    private String aName; 
    private String aPlace; 
    /** 
    * @return the aName 
    */ 
    public String getaName() { 
     return aName; 
    } 
    /** 
    * @param aName the aName to set 
    */ 
    public void setaName(String aName) { 
     this.aName = aName; 
    } 
    /** 
    * @return the aPlace 
    */ 
    public String getaPlace() { 
     return aPlace; 
    } 
    /** 
    * @param aPlace the aPlace to set 
    */ 
    public void setaPlace(String aPlace) { 
     this.aPlace = aPlace; 
    } 

} 

public class B { 
    private String bName; 
    private String bPlace; 
    /** 
    * @return the bName 
    */ 
    public String getbName() { 
     return bName; 
    } 
    /** 
    * @param bName the bName to set 
    */ 
    public void setbName(String bName) { 
     this.bName = bName; 
    } 
    /** 
    * @return the bPlace 
    */ 
    public String getbPlace() { 
     return bPlace; 
    } 
    /** 
    * @param bPlace the bPlace to set 
    */ 
    public void setbPlace(String bPlace) { 
     this.bPlace = bPlace; 
    } 
} 

бульдозер-отображение:

<mapping> 
    <class-a>com.test.A</class-a> 
    <class-b>com.test.B</class-b> 
    <field type="one-way"> 
     <a>aName</a> 
     <b>bName</b> 
    </field> 
    </mapping> 

Тест:

public static void main(String[] arg){ 
    List<String> myMappingFiles = new ArrayList<String>(1); 
    myMappingFiles.add("dozer-mapping.xml"); 

    DozerBeanMapper mapper = new DozerBeanMapper(); 
    mapper.setMappingFiles(myMappingFiles); 
    B obj=new B(); 
    obj.setbName("Test"); 
    A destObject = 
     mapper.map(obj, A.class); 
       System.out.println("B="+destObject.getaName()); 
} 

Выход:


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
B=null