当前位置: 首页 > 知识库问答 >
问题:

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

林正平
2023-03-14

最初,我得到以下例外:我使用的是推土机5.4。我的类路径中有xerces jar文件。我是推土机新手,非常感谢您的帮助。

org.dozer.MappingException:java.lang.IllegalAccessException:类org.dozer.util.反射Utils不能访问类org.apache.xerces.jaxp.datatype.成员XMLGregorianCalendarImpl与修饰符"public"

我从这个站点的其他帖子中读到,上面的解决方案是为XmlGregorianCalender编写一个自定义转换器。

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

 import javax.xml.datatype.XMLGregorianCalendar;
    
    import org.dozer.DozerConverter;
    
    public class XMLGregorianCalendarCustomConvertor extends
    DozerConverter<XMLGregorianCalendar, XMLGregorianCalendar>{
    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;
        }
    }

}
<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个答案

盖雪峰
2023-03-14

问题是类:

org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl
javax.xml.datatype.XMLGregorianCalendar

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

映射。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>

希望它能帮助任何人!

耿俊
2023-03-14

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

<configuration>
    <copy-by-references>
      <copy-by-reference>
        javax.xml.datatype.XMLGregorianCalendar
      </copy-by-reference>
    </copy-by-references>
  </configuration>
 类似资料:
  • 我正在尝试使用DozerJava API使用自定义转换器映射两个Java类。有没有办法在Java中配置类级自定义转换器?现在,我必须在XML中添加配置: 感谢您的帮助!

  • 我已经使用推土机现场级映射实现了带有静态自定义转换器参数的自定义转换器。但在我的情况下,自定义转换器参数将随时更改,我需要动态传递它们。 XML字段级推土机映射:

  • 我正在使用ApacheCXF、Spring和JAX-RS构建一个REST web服务,当输入JSON验证失败时,我需要在其中发送自定义异常。 我没有使用业务逻辑,而是尝试使用CXF、JAX-RS的现成bean验证功能。 Bean验证工作正常,但是,它总是抛出500个异常,这是不太有用的。根据留档,它是org.apache.cxf.jaxrs.validation.ValidationExcepti

  • 不幸的是,我不断得到以下异常: 原因:org.springframework.data.mapping.propertyreferenceException:在org.springframework.data.mapping.propertypath.create(propertypath.java:75)在org.springframework.data.mapping.propertypath

  • 我有两个需要映射的继承层次结构。一个层次结构是国内的,另一个是野生的。我有抽象的Domestic动物和具体的DomesticCat和DomesticDog扩展它。在第二个层次结构中,我有抽象的Wild动物和具体的WildCat和WildDog扩展它。我还有另外两个类,分别是WildAnimalFeeder具有Wild动物的成员对象和DomesticAnimalFeeder具有DomesticAni

  • 我使用ModelMapper将模型转换为DTO。我有一堆空值的默认转换器,它们已经在映射器级别注册,如下所示: 当转换的两侧的属性名称相同时,这可以很好地处理简单映射。转换器用于按预期处理空值。 现在,如果我需要使用不同的属性名称进行更复杂的转换。map(getter,setter)在类型映射上,不再调用全局转换器。我不想在配置typemap时丢弃全局转换器。 我怎样才能解决这个问题? 下面是使用