2015-05-18 5 views
1

Использование Dozer 5.4.0 для выполнения сопоставлений и работы в ExceptionException из абстрактного класса DozerConverter. Вот мой класс, по большей части ... BTW - попробовал как List, так и Map, а также HashMap и ArrayList - не ожидая разницы и не разочаровавшись !!InstantiationException с использованием Dozer

public class DozerJAXBElementConverter extends DozerConverter<ArrayList<JAXBElement<String>>, HashMap<String, String>> { 

    public DozerJAXBElementConverter(Class<ArrayList<JAXBElement<String>>> prototypeA, Class<HashMap<String, String>> prototypeB) { 
     super(prototypeA, prototypeB); 
    } 

    @Override 
    public ArrayList<JAXBElement<String>> convertFrom(HashMap<String, String> sourceStringMap, ArrayList<JAXBElement<String>> destJaxbList) { 

    //Nothign to convert? 
    if(sourceStringMap == null || sourceStringMap.isEmpty()) return null; 
    //Instantiate list if not already 
    if(destJaxbList == null) destJaxbList = new ArrayList<JAXBElement<String>>(); 
    //convert 
    Iterator<Entry<String, String>> setIterator = sourceStringMap.entrySet().iterator(); 
    while(setIterator.hasNext()){ 
     Entry<String,String> e = setIterator.next(); 
     if(e != null){ 
      destJaxbList.add(new JAXBElement<String>(new QName(e.getKey(), DozerJAXBElementConverter.NAMESPACE), String.class, e.getValue())); 
     } 
    } 
    return destJaxbList; 
} 


@Override 
public HashMap<String, String> convertTo(ArrayList<JAXBElement<String>> sourceJaxbList, HashMap<String, String> destStringMap) { 
    //Nothing to convert? 
    if(sourceJaxbList == null || sourceJaxbList.isEmpty()) return null; 

    //Instantiate list if not already 
    if(destStringMap == null) destStringMap = new HashMap<String,String>(); 

    //convert 
    Iterator<JAXBElement<String>> i = sourceJaxbList.iterator(); 
    while(i.hasNext()){ 
     JAXBElement<String> element = i.next(); 
     if(element != null){ 
      destStringMap.put(element.getName().toString(), element.getValue()); 
     } 
    } 
    return destStringMap; 
} 

}}

я реализую соответствующие методы, все компилирует и я получаю следующее traceat выполнения - любая помощь:

org.dozer.MappingException: java.lang.InstantiationException: gov.dhs.cbp.ctpat.pip.translate.DozerJAXBElementConverter 
    at org.dozer.util.MappingUtils.throwMappingException(MappingUtils.java:82) ~[dozer-5.4.0.jar:?] 
    at org.dozer.util.ReflectionUtils.newInstance(ReflectionUtils.java:360) ~[dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.mapUsingCustomConverter(MappingProcessor.java:971) ~[dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:345) ~[dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.mapField(MappingProcessor.java:288) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.map(MappingProcessor.java:248) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.map(MappingProcessor.java:197) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:495) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:446) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:342) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.mapField(MappingProcessor.java:288) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.map(MappingProcessor.java:248) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.map(MappingProcessor.java:197) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.map(MappingProcessor.java:187) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.map(MappingProcessor.java:124) [dozer-5.4.0.jar:?] 
    at org.dozer.MappingProcessor.map(MappingProcessor.java:119) [dozer-5.4.0.jar:?] 
    at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:120) [dozer-5.4.0.jar:?] 
+0

Я предполагаю, что это проблема отражения ... но не очень хорошо разбиралась в этой теме в более поздних версиях JDK - я использую 1.7.65 – MrMcCools

ответ

1

Я упрощено до:

public class DozerJAXBElementConverter extends DozerConverter<List, Map> { 

    public DozerJAXBElementConverter(Class<List> prototypeA, Class<Map> prototypeB) { 
     super(prototypeA, prototypeB); 
    } 

    public DozerJAXBElementConverter(){ 
     super(List.class, Map.class); 
    } 

, чтобы заставить его работать - не знаю, почему оригинальный имплантат не работал ...

+0

Только что столкнулась с той же проблемой, и добавив, что эти два конструктора разрешили ее для меня ... не совсем уверен, почему, но Дозер сейчас счастлив. –

Смежные вопросы