【问题标题】:Dozer issue: No read or write method found for field (status) in class推土机问题:找不到类中字段(状态)的读取或写入方法
【发布时间】:2016-05-18 09:30:39
【问题描述】:

这是我在 dozermap.xml 文件中的映射:

<mapping type="one-way">
      <class-a>com.models.ClassA</class-a>
      <class-b>com.models.ClassB</class-b>
        <field custom-converter="com.models.helpers.CustomConverterDemo">
            <a>status</a>
            <b>status</b>
        </field>
        <field-exclude type="one-way">
            <a>createdOn</a>
            <b>createdOn</b>
        </field-exclude>
</mapping>

映射工作正常,仅当我尝试运行 junit 测试时才会发生此错误。

堆栈跟踪:

org.dozer.MappingException: No read or write method found for field (status) in class (class com.models.TestModel)
at org.dozer.propertydescriptor.GetterSetterPropertyDescriptor.determinePropertyType(GetterSetterPropertyDescriptor.java:319)
at org.dozer.propertydescriptor.GetterSetterPropertyDescriptor.getPropertyType(GetterSetterPropertyDescriptor.java:76)
at org.dozer.fieldmap.FieldMap.getDestFieldType(FieldMap.java:117)
at org.dozer.util.MappingUtils.applyGlobalCopyByReference(MappingUtils.java:212)
at org.dozer.loader.MappingsParser.processMappings(MappingsParser.java:168)
at org.dozer.loader.CustomMappingsLoader.load(CustomMappingsLoader.java:49)
at org.dozer.DozerBeanMapper.loadCustomMappings(DozerBeanMapper.java:213)
at org.dozer.DozerBeanMapper.initMappings(DozerBeanMapper.java:315)
at org.dozer.DozerBeanMapper.getMappingProcessor(DozerBeanMapper.java:192)
at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:120)
at com.helpers.GeneralHelper.mapDomainModelToKey(GeneralHelper.java:226)
at com.helpers.GeneralHelper.updateKeys(GeneralHelper.java:130)
at com.helpers.GeneralHelperTest.addKeys(GeneralHelperTest.java:295)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)

【问题讨论】:

  • 请添加足够的信息,包括所涉及的类和日志。
  • 好的,所以我提供了一些关于这个问题的更多细节

标签: java mapping dozer


【解决方案1】:

从日志消息来看,您似乎没有com.models.TestModel 类的映射。您可以在测试资源中添加相关映射,也可以在您的测试类设置中完成。推土机docs 有一些例子。

【讨论】:

  • 我为什么要在 junit 测试中添加另一个 xml 文件?它应该与现有的一起使用。而且我确实有 Testmodel 类的映射。
  • 以上映射文件不显示 TestModel 映射。运行测试时,您能否确保包含 TestModel 的映射位于类路径中?还要确保您在 TestModel 类中有相关的 setter 方法。
猜你喜欢
  • 2018-10-02
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
相关资源
最近更新 更多