1
我有一组JAX-WS生成的类在另一个包中复制。现在我想通过使用Dozer在这些类之间进行映射。我现在的问题是基于JAX-WS不为集合类型生成setter。我不必致电set(List<Foo> foo)
,我必须致电getFoo().addAll(List<Foo>)
。 如何配置Dozer(通过XML和API)来尊重它?Dozer和JAX-WS生成类的映射问题
我有一组JAX-WS生成的类在另一个包中复制。现在我想通过使用Dozer在这些类之间进行映射。我现在的问题是基于JAX-WS不为集合类型生成setter。我不必致电set(List<Foo> foo)
,我必须致电getFoo().addAll(List<Foo>)
。 如何配置Dozer(通过XML和API)来尊重它?Dozer和JAX-WS生成类的映射问题
好吧,我想通了如何使用静态推土机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));
}
};
您使用的是什么版本的推土机?据我所知,这不适用于最新的(5.3.2) – 2011-06-15 12:35:52