2015-06-25 3 views
1

I've был triyng скопировать карту (String, ProposalViewBean) на другую карту (String, Proposal)бульдозера скопировать карты на другую карту

Я создал пользовательский конвертер:

public class ProposalsDozerConverter extends DozerConverter <HashMap<String,Proposal>, HashMap<String,ProposalViewBean>> { 

    @Resource(name="mapper") 
    private Mapper mapper; 


    public ProposalsDozerConverter(Class<HashMap<String, Proposal>> prototypeA, 
                 Class<HashMap<String, ProposalViewBean>> prototypeB) { 

     super(prototypeA, prototypeB); 

    } 

    @Override 
    public HashMap<String, Proposal> convertFrom(HashMap<String, ProposalViewBean> proposalsViewBean, HashMap<String, Proposal> proposals) { 

     System.out.println("convertFrom"); 

     /*if (proposals == null){ 
      proposals = new TreeHashMap<String, Proposal>(); 
     }*/ 

     for (Map.Entry<String, ProposalViewBean> entry : proposalsViewBean.entrySet()){ 
      Proposal p = mapper.map(entry.getValue(), Proposal.class); 
      proposals.put(entry.getKey(), p); 
     } 

     return proposals; 
    } 

    @Override 
    public HashMap<String, ProposalViewBean> convertTo(HashMap<String, Proposal> proposals, HashMap<String, ProposalViewBean> proposalsViewBean) { 

     System.out.println("convertTo"); 

     /*if (proposalsViewBean == null){ 
      proposalsViewBean = new TreeMap<String, ProposalViewBean>(); 
     }*/ 

     for (Map.Entry<String, Proposal> entry : proposals.entrySet()){ 
      ProposalViewBean p = mapper.map(entry.getValue(), ProposalViewBean.class); 
      proposalsViewBean.put(entry.getKey(), p); 
     } 

     return proposalsViewBean; 
    } 

Тогда я сконфигурировано в XML:

<configuration> 
    <custom-converters> 
     <converter type="com.hsbc.hbbr.frb.converters.ProposalsDozerConverter"> 
      <class-a>java.util.HashMap</class-a> 
      <class-b>java.util.HashMap</class-b> 
     </converter> 
    </custom-converters> 
</configuration> 

<mapping> 
    <class-a>com.hsbc.hbbr.frb.viewbean.ConsumerLoanViewBean</class-a> 
    <class-b>com.hsbc.hbbr.frb.model.ConsumerLoan</class-b> 
    <field custom-converter="com.hsbc.hbbr.frb.converters.ProposalsDozerConverter"> 
     <a>proposals</a> 
     <b>proposals</b> 
     <a-hint>com.hsbc.hbbr.frb.viewbean.ProposalViewBean</a-hint> 
     <b-hint>com.hsbc.hbbr.frb.model.Proposal</b-hint> 
    </field> 
</mapping> 

Когда я попытался преобразовать я ловлю эту ошибку:

Caused by: java.lang.InstantiationException: com.hsbc.hbbr.frb.converters.ProposalsDozerConverter 
at java.lang.Class.newInstance(Class.java:359) 

Я не собираюсь это исправлять. Кто-нибудь столкнулся с этой проблемой?

+0

Похоже, что заказ не соответствует взгляду на XML и код Java. Попробуйте сделать класс ConsumerLoan-a и посмотреть, что это делает. – ColinMc

+0

Привет @ColinMc Я нашел решение. Были некоторые ошибки в моем коде и XML. –

ответ

0

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

<mapping> 
     <class-a>com.hsbc.hbbr.frb.viewbean.ConsumerLoanViewBean</class-a> 
     <class-b>com.hsbc.hbbr.frb.model.ConsumerLoan</class-b> 
     <field custom-converter="com.hsbc.hbbr.frb.converters.ProposalsDozerConverter"> 
      <a>proposals</a> 
      <b>proposals</b> 
      <a-hint>java.util.HashMap</a-hint> 
      <b-hint>java.util.HashMap</b-hint> 
     </field> 
    </mapping> 

Моей целью была копия карты на другую карту, не копировать объект в карте.

После того как я проверил мой конвертер, тогда я понял, что пружина не послал экземпляр Mapper:

@Resource(name="mapper") 
private Mapper mapper; 

Это было причиной исключения. Чтобы получить экземпляр Mapper, мне нужно было реализовать интерфейс MapperAware.Implement this Interface Dozer вводит экземпляр Mapper. я должен был изменить конструктор класса:

public ProposalsDozerConverter() { 
     super(((Class<HashMap<String,Proposal>>) (Class<?>) HashMap.class), (Class<HashMap<String,ProposalViewBean>>) (Class<?>) HashMap.class ); 
    } 

Поскольку сырье типа сотрет в время выполнения. Поэтому Дозер не знает, какой объект находится внутри Карты. Мой последний код:

public class ProposalsDozerConverter extends DozerConverter <HashMap<String,Proposal>, HashMap<String,ProposalViewBean>> 
                           implements MapperAware { 
    private Mapper mapper; 

    public ProposalsDozerConverter() { 
     super(((Class<HashMap<String,Proposal>>) (Class<?>) HashMap.class), (Class<HashMap<String,ProposalViewBean>>) (Class<?>) HashMap.class ); 
    } 

    @Override 
    public HashMap<String, Proposal> convertFrom(HashMap<String, ProposalViewBean> proposalsViewBean, HashMap<String, Proposal> proposals) { 

     for (Map.Entry<String, ProposalViewBean> entry : proposalsViewBean.entrySet()){ 
      Proposal p = mapper.map(entry.getValue(), Proposal.class); 
      proposals.put(entry.getKey(), p); 
     } 

     return proposals; 
    } 

    @Override 
    public HashMap<String, ProposalViewBean> convertTo(HashMap<String, Proposal> proposals, HashMap<String, ProposalViewBean> proposalsViewBean) { 

     for (Map.Entry<String, Proposal> entry : proposals.entrySet()){ 
      ProposalViewBean p = mapper.map(entry.getValue(), ProposalViewBean.class); 
      proposalsViewBean.put(entry.getKey(), p); 
     } 

     return proposalsViewBean; 
    } 

    @Override 
    public void setMapper(Mapper mapper) { 
     this.mapper = mapper; 
    } 
} 
Смежные вопросы