2014-03-12 27 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