我试图用推土机4.1到地图之间的课程。我有一个源类,看起来是这样的:

    public class initRequest{
     protected String id;
     protected String[] details
}

我有一个目的地类,看起来是这样的:

public class initResponse{
       protected String id;
       protected DetailsObject detObj;
}

public class DetailsObject{
 protected List<String>  details;
}

所以基本上,我想要串的细节列于填充到名单的详细信息的对象。

我已经尝试映这样的:

<mapping wildcard="true" >
  <class-a>initRequest</class-a>
  <class-b>initResponse</class-b>   
  <field>
    <a is-accessible="true">details</a>
    <b is-accessible="true">detObj.details</b>
  </field>
</mapping>

但我得到这个错误:

Exception in thread "main" net.sf.dozer.util.mapping.MappingException: java.lang.NoSuchFieldException: detObj.details
    at net.sf.dozer.util.mapping.util.MappingUtils.throwMappingException(MappingUtils.java:91)
    at net.sf.dozer.util.mapping.propertydescriptor.FieldPropertyDescriptor.<init>(FieldPropertyDescriptor.java:43)
    at net.sf.dozer.util.mapping.propertydescriptor.PropertyDescriptorFactory.getPropertyDescriptor(PropertyDescriptorFactory.java:53)
    at net.sf.dozer.util.mapping.fieldmap.FieldMap.getDestPropertyDescriptor(FieldMap.java:370)
    at net.sf.dozer.util.mapping.fieldmap.FieldMap.getDestFieldType(FieldMap.java:103)
    at net.sf.dozer.util.mapping.util.MappingsParser.processMappings(MappingsParser.java:95)
    at net.sf.dozer.util.mapping.util.CustomMappingsLoader.load(CustomMappingsLoader.java:77)
    at net.sf.dozer.util.mapping.DozerBeanMapper.loadCustomMappings(DozerBeanMapper.java:149)
    at net.sf.dozer.util.mapping.DozerBeanMapper.getMappingProcessor(DozerBeanMapper.java:132)
    at net.sf.dozer.util.mapping.DozerBeanMapper.map(DozerBeanMapper.java:94)

我怎么可以这使得它的工作原理?

有帮助吗?

解决方案 2

问题解决了...

  • 是-入店允许一个对象进行更新,而不管接入剂和存在的吸气/者(必要对象产生的使用修订)

  • "点"表示深深的映射工作访问嵌套的对象

结合这两个特征是,这并不是工作在推土机(也许它不会在一个较新的版本)

解决方案...修改划这样的,深深的映射是不是必需的。这不是我理想的解决方案,但其比编写一个自定义转换器,为每个对象

其他提示

这对我的作品。我使用5.2.1版

 <mapping wildcard="true" >
      <class-a>initRequest</class-a>
      <class-b>initResponse</class-b>   
      <field>
        <a>details</a>
        <b is-accessible="true">detObj.details</b>
      </field>
    </mapping>

注意,“是 - accessable”不需要。希望它帮助

在JAXB的情况下,使用可以下载和使用该插件用于生成setter方法。请参阅此链接了解更多详情,请 https://jaxb2-commons.dev。 java.net/collection-setter-injector/

我猜想,访问者(的getter / setter)丢失。 顺便说一句,我认为你还需要为DetailsObject提供一个空的构造,从而可以推土机它实例化

<b is-accessible="true">detObj.details</b>

应替换

<b is-accessible="true">DetailsObject.details</b>

虽然它似乎你cannnot使用“是可访问”和点符号一起的另一种方法是打破你深深映射成更小的映射。

我们遇到了这种情况与JAX-WS生成的代码。您有没有setter方法,并在我们的情况进行了深入嵌套的列表。我们通过简单地打破了深大映射成更小的映射,说:“走了”我们对我们想要什么样的方式找到我们的解决方案。我想在我的博客这里要说明这一点:

http://btarlton.blogspot.com/ 2014/08 /推土机深孔nestinga-不同-approach.html

但诀窍是刚刚会走路的小映射对象树和使用是可访问=“真”在必要的时候,没有setter和使用“本”为属性的名称,以保持通过源一起访问列表。

希望这有助于!

要总结这是你的问题如下选项 1)使用JAXB撑着,以使设置器通过纳温讨论 2)使用是可访问的用于这样的性质

我相信使用第一种方法不必要的暴露对集合/列表,你可以用空设置它们的风险制定者。

我们决定启用此类字段(以整个类和不)是可访问的,以避免任何的副作用。

我已经讨论了溶液在推土机映射类电平是可访问的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top