【发布时间】:2012-04-03 14:56:19
【问题描述】:
我定义了一个 xml 映射:
<mapping>
<class-a>java.util.HashMap</class-a>
<class-b>com.example.MyClass</class-b>
<field>
<a key="myDateField">this</a>
<b>myXMLGregorianCalendarField</b>
</field>
</mapping>
此处键 myDateField 的值包含 java.lang.Date class 的实例。
字段 com.example.MyClass#myXMLGregorianCalendarField 需要 javax.xml.datatype.XMLGregorianCalendar 的实例。
这个映射总是抛出异常:
MapId: null
Type: null
Source parent class: java.util.HashMap
Source field name: this
Source field type: class java.util.Date
Source field value: Thu Jan 01 03:00:00 MSK 1970
Dest parent class: com.example.MyClass
Dest field name: myXMLGregorianCalendarField
Dest field type: javax.xml.datatype.XMLGregorianCalendar
org.dozer.MappingException: Illegal object type for the method 'setMyXMLGregorianCalendarField'.
Expected types:
javax.xml.datatype.XMLGregorianCalendar
Actual types:
java.util.Date
如何使这种转换正常进行?
注意 长时间的调试表明,对于地图和“非地图”,原始转换器的调用方式不同。那么第二个问题来了:为什么?
【问题讨论】:
-
您是说当
Date不是地图字段时转换有效吗? -
是的,你没看错。当
Date不是Map字段时,转换工作得很好。