Failed to get value from java.util.Date.getHours()

1,106 views
Skip to first unread message

Luis Cruz

unread,
Mar 21, 2013, 8:46:12 PM3/21/13
to model...@googlegroups.com
I get the exception below, in some cases of java.sql.Date to
java.util.Date mapping: It seems to be related the existence of an
explicit mapping of sql and java date properties with a matching name.
If I don't explicitly map them, or the properties' names don't match,
the error doesn't seem to happen.

The generated mappings seem different in both cases. It maps the
whole sql date to java date when it works:

PropertyMapping[SqlDate.date -> JavaDate.date]

And it tries to map the dates field by field when it doesn't:

PropertyMapping[SqlDate.date -> JavaDate.date]
PropertyMapping[SqlDate.date.date -> JavaDate.date.date]
PropertyMapping[SqlDate.date.hours -> JavaDate.date.hours]
PropertyMapping[SqlDate.date.minutes -> JavaDate.date.minutes]
PropertyMapping[SqlDate.date.month -> JavaDate.date.month]
PropertyMapping[SqlDate.date.seconds -> JavaDate.date.seconds]
PropertyMapping[SqlDate.date.time -> JavaDate.date.time]
PropertyMapping[SqlDate.date.year -> JavaDate.date.year]

I'm attaching some code reproducing the problem.

Regards,

Luis





Exception in thread "main" org.modelmapper.MappingException:
ModelMapper mapping errors:

1) Error mapping SqlDateTest$SqlDate to SqlDateTest$JavaDate

1 error
at org.modelmapper.internal.Errors.throwMappingExceptionIfErrorsExist(Errors.java:344)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:79)
at org.modelmapper.ModelMapper.map(ModelMapper.java:202)
at SqlDateTest.test(SqlDateTest.java:70)
at SqlDateTest.main(SqlDateTest.java:80)
Caused by: org.modelmapper.MappingException: ModelMapper mapping errors:

1) Failed to get value from java.util.Date.getHours()

1 error
at org.modelmapper.internal.Errors.toMappingException(Errors.java:242)
at org.modelmapper.internal.PropertyInfoImpl$MethodAccessor.getValue(PropertyInfoImpl.java:107)
at org.modelmapper.internal.MappingEngineImpl.resolveSourceValue(MappingEngineImpl.java:187)
at org.modelmapper.internal.MappingEngineImpl.propertyMap(MappingEngineImpl.java:154)
at org.modelmapper.internal.MappingEngineImpl.typeMap(MappingEngineImpl.java:136)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:101)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:70)
... 3 more
Caused by: java.lang.reflect.InvocationTargetException
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:601)
at org.modelmapper.internal.PropertyInfoImpl$MethodAccessor.getValue(PropertyInfoImpl.java:102)
... 8 more
Caused by: java.lang.IllegalArgumentException
at java.sql.Date.getHours(Date.java:182)
... 13 more
SqlDateTest.java

Jonathan Halterman

unread,
Mar 23, 2013, 11:59:55 PM3/23/13
to model...@googlegroups.com
Hi Luis,

This looks like an issue where mappings are being created for child properties (date, month, year) when it isn't necessary. In the case of java.sql.Date this causes a problem since java.sql.Date.getHours() getMinutes() and getSeconds() throw exceptions. I've filed an issue to track this and should have a fix shortly.

Cheers,
Jonathan

Jonathan L

unread,
Mar 28, 2014, 1:41:37 PM3/28/14
to model...@googlegroups.com
I know this thread is about a year old but it seems to be the only one out there where "Failed to get value from java.util.Date.getHours()" is reported.

In my use case, I'm mapping a java.util.Date from one type to another. Pretty straight forward.

map().setValueDate(source.getContractualValueDate());

At runtime, I see the following exception:

Caused by: org.modelmapper.MappingException: ModelMapper mapping errors:

1) Failed to get value from java.util.Date.getHours()

1 error
at org.modelmapper.internal.Errors.toMappingException(Errors.java:256) ~[modelmapper-0.6.3.jar:na]
at org.modelmapper.internal.PropertyInfoImpl$MethodAccessor.getValue(PropertyInfoImpl.java:100) ~[modelmapper-0.6.3.jar:na]
at org.modelmapper.internal.MappingEngineImpl.resolveSourceValue(MappingEngineImpl.java:198) ~[modelmapper-0.6.3.jar:na]
at org.modelmapper.internal.MappingEngineImpl.propertyMap(MappingEngineImpl.java:165) ~[modelmapper-0.6.3.jar:na]
at org.modelmapper.internal.MappingEngineImpl.typeMap(MappingEngineImpl.java:141) ~[modelmapper-0.6.3.jar:na]
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:102) ~[modelmapper-0.6.3.jar:na]
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:70) ~[modelmapper-0.6.3.jar:na]
... 60 common frames omitted
Caused by: java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_51]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_51]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_51]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_51]
at org.modelmapper.internal.PropertyInfoImpl$MethodAccessor.getValue(PropertyInfoImpl.java:95) ~[modelmapper-0.6.3.jar:na]
... 65 common frames omitted
Caused by: java.lang.IllegalArgumentException: null
at java.sql.Date.getHours(Date.java:182) ~[na:1.7.0_51]
... 70 common frames omitted

Has anyone else encountered this? I thought that in this case where the source and destination are the same i.e java.util.Date ->  java.util.Date, there isn't any need for a specialised conversion.

Regards
Jonathan L

Jonathan L

unread,
Mar 31, 2014, 4:00:10 AM3/31/14
to model...@googlegroups.com
On further investigation, it appears that the problem is the same as what Luis saw. Although my method signatures specifies java.util.Date, Hibernate rehydrates my classes using java.sql.Date.

+1 for a fix 

Many thanks
Jonathan

Jonathan Halterman

unread,
Jun 6, 2014, 5:44:12 PM6/6/14
to model...@googlegroups.com
This issue is fixed and will be in the next release which will be out within a few days.

Cheers,
Jonathan
Reply all
Reply to author
Forward
0 new messages