自定义转换器,以在dozer中映射XMLGregorianCalendarImpl时避免IllegalAccessException异常

时间:2015-06-12 14:32:53

标签: dozer

最初我得到了以下异常:我正在使用推土机5.4。我在类路径中有xerces jar文件。我是推土机的新手,所以非常感谢任何帮助。

org.dozer.MappingException:java.lang.IllegalAccessException:类org.dozer.util.ReflectionUtils无法使用修饰符" public&#34访问org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl类的成员;

我从本网站的其他帖子中读到,上述解决方案是为XmlGregorianCalender编写自定义转换器。

以下是自定义转换器的代码。目前正在调用convertFrom方法,并且所有传递的值都为null。

自定义转换器:

import javax.xml.datatype.XMLGregorianCalendar;

import org.dozer.DozerConverter;

公共类XMLGregorianCalendarCustomConvertor扩展 DozerConverter {

public XMLGregorianCalendarCustomConvertor() {
    super(XMLGregorianCalendar.class, XMLGregorianCalendar.class);
    // TODO Auto-generated constructor stub
}

@Override
public XMLGregorianCalendar convertTo(XMLGregorianCalendar source,
        XMLGregorianCalendar destination) {
    if (source == null) {
        return null;
        }
    else{
        return source;
    }
}

@Override
public XMLGregorianCalendar convertFrom(XMLGregorianCalendar source,
        XMLGregorianCalendar destination) {
    if(destination == null){

        return null;
    }
    else{
        return destination;
    }
}

}

映射xml

 <configuration>
     <custom-converters> 
        <converter type="com.code.user.XMLGregorianCalendarCustomConvertor"  >
             <class-a>javax.xml.datatype.XMLGregorianCalendar</class-a>
              <class-b>javax.xml.datatype.XMLGregorianCalendar</class-b>
         </converter>
    </custom-converters>     
 </configuration>

2 个答案:

答案 0 :(得分:0)

如何通过引用复制它?如果它是你的选择,你可以这样做:

<configuration>
    <copy-by-references>
      <copy-by-reference>
        javax.xml.datatype.XMLGregorianCalendar
      </copy-by-reference>
    </copy-by-references>
  </configuration>

答案 1 :(得分:0)

问题是该类:

org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl
不是以下内容的公共实现:
javax.xml.datatype.XMLGregorianCalendar

解决方案是简单地将is-accessible =“ true”属性添加到Dozer转换器配置中的目标类中,如下所示:

Mapping.xml

<configuration>
     <custom-converters> 
        <converter type="com.code.user.XMLGregorianCalendarCustomConvertor"  >
             <class-a>javax.xml.datatype.XMLGregorianCalendar</class-a>
              <class-b is-accessible="true">javax.xml.datatype.XMLGregorianCalendar</class-b>
         </converter>
    </custom-converters>     
 </configuration>

希望它会帮助任何人!

相关问题