2010-11-12 60 views
1

我有一组JAX-WS生成的类在另一个包中复制。现在我想通过使用Dozer在这些类之间进行映射。我现在的问题是基于JAX-WS不为集合类型生成setter。我不必致电set(List<Foo> foo),我必须致电getFoo().addAll(List<Foo>)。 如何配置Dozer(通过XML和API)来尊重它?Dozer和JAX-WS生成类的映射问题

回答

2

好吧,我想通了如何使用静态推土机xml配置做到这一点:

<?xml version="1.0" encoding="UTF-8"?> 
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://dozer.sourceforge.net 
     http://dozer.sourceforge.net/schema/beanmapping.xsd"> 
<mapping> 
    <class-a>foo.ArrayOfItem 
    </class-a> 
    <class-b>bar.ArrayOfItem</class-b> 
    <field> 
     <a>item</a> 
     <b set-method="getItem().addAll">item</b> 
     <b-hint>bar.Item</b-hint> 
    </field> 
</mapping> 
<mapping> 
    <class-a>foo.Item</class-a> 
    <class-b>bar.Item</class-b> 
</mapping> 

我缺少必要的<b-hint>bar.Item</b-hint>。 现在我只需要在通过API推土机运行时做到这一点...

这种失败java.lang.ClassCastException: foo.Item cannot be cast to bar.Item因为不知何故未应用提示:

BeanMappingBuilder mappingBuilder = new BeanMappingBuilder() { 

     @Override 
     protected void configure() { 
      mapping(
        "foo.ArrayOfItem", 
        "bar.ArrayOfItem").fields("item", "item", 
        new FieldsMappingOption() { 
         public void apply(
           FieldMappingBuilder fieldMappingBuilder) { 
          FieldDefinitionBuilder itemFieldDefinitionBuilder = fieldMappingBuilder 
            .b("item"); 
          itemFieldDefinitionBuilder 
            .theSetMethod("getItem().addAll"); 
         } 
        }).hintB(bar.Item.class); 
     } 
    }; 

这是如何工作的:

BeanMappingBuilder mappingBuilder = new BeanMappingBuilder() { 

     @Override 
     protected void configure() { 
      mapping(
        "foo.ArrayOfItem", 
        "bar.ArrayOfItem").fields("item", "item", 
        new FieldsMappingOption() { 
         public void apply(
           FieldMappingBuilder fieldMappingBuilder) { 
          FieldDefinitionBuilder itemFieldDefinitionBuilder = fieldMappingBuilder 
            .b("item"); 
          itemFieldDefinitionBuilder 
            .theSetMethod("getItem().addAll"); 
         } 
        }, FieldsMappingOptions.hintB(bar.Item.class)); 
     } 
    }; 
+1

您使用的是什么版本的推土机?据我所知,这不适用于最新的(5.3.2) – 2011-06-15 12:35:52