2014-03-12 70 views
1

我有一個推土機映射,通過參數自定義轉換器返回用戶。這是應該的,但現在這個用戶應該轉換爲官方。推土機 - 在轉換器後調用映射器

我試圖通過讓轉換器返回用戶並使另一個推土機xml文件將用戶轉換爲官方來做到這一點。我將這個xml文件添加到了dozerfactory,但它似乎沒有被調用。

我得到:「Exepected Official,actual:User」。我怎麼能讓userToOfficial.xml文件被調用?

首先推土機文件:

<mapping> 
<class-a>be.someClass</class-a> 
<class-b>be.anotherClassWithOfficial</class-b> 


<field custom-converter-id="OfficialConverter"> 
    <a>someString</a> 
    <b>official</b> 
</field> 

嘗試添加,但不工作:

<b-hint>be.Official</b-hint> 

第二推土機文件(應該轉換器之後被調用,但不):

<mapping> 
<class-a>be.User</class-a> 
<class-b>be.Official</class-b> 
<field> 
    <a>mail</a> 
    <b>email</b> 
</field> 

轉換器:

public class OfficialConverter implements CustomConverter { 

/** The ldap local. */ 
private UserLocal userLocal; 

@Override 
public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, 
     Class <?> destinationClass, Class <?> sourceClass) { 
    if (sourceFieldValue == null) { 
     return null; 
    } 
    if (sourceFieldValue instanceof String) { 
     User user= userLocal 
       .getUserByLogin((String) sourceFieldValue); 
     return user; 

    } 
    return null; 
} 

public UserLocal getUserLocal() { 
    return userLocal; 
} 


public void setUserLocal(UserLocal userLocal) { 
    this.userLocal= userLocal; 
} 

}

+0

無法正確回答您的問題。轉換器似乎返回一個'用戶',以及第一個和第二個推土機如何相關。你可以修改你的問題以提供清晰的圖片嗎? – sakura

+0

@sakura「這個應該可以,但是現在這個用戶應該轉換成官員。」用戶必須轉換爲官方 - >第二個推土機文件。 – GregD

+0

然後,不用介紹一個新的推土機文件,爲什麼不修改您的customconverter以返回一個官員。我現在看到它返回一個用戶。 – sakura

回答

0

根據您的customconverter,看來你是從映射到StringUser現在不是User,你想要的Offical的對象。對?並且您希望使用推土機將此UserOffical自動轉換。對?如果是,那麼您需要使用mapper.map()方法在自定義轉換器中調用新的推土機。你當前的用例不會自動調用它。

+0

剛剛有相同的想法,它的工作原理。 – GregD