All my classes are JavaBeans(TM) in this example with all the usual getter, setters and default constructor.
To sidestep the deep mapping issues above, I tried to install my own converters.
private static class CreditSecurityContractualCashflowPropertyMap
extends PropertyMap<CreditSecurityContractualCashflow, CreditSecurityContractualCashflowDto>
{
@Override
protected void configure()
{
super.configure();
final Converter<CreditSecurityContractualCashflow, Long> longConverter = new AbstractConverter<CreditSecurityContractualCashflow, Long>() {
@Override
protected Long convert(CreditSecurityContractualCashflow source)
{
return source.getParentEntityIdentity() != null ? source.getParentEntityIdentity().getId() : null;
}
};
final Converter<CreditSecurityContractualCashflow, Guid> guidConverter = new AbstractConverter<CreditSecurityContractualCashflow, Guid>() {
@Override
protected Guid convert(CreditSecurityContractualCashflow source)
{
return source.getParentEntityIdentity() != null ? source.getParentEntityIdentity().getVersionGuid() : null;
}
};
using(longConverter).map(source).setCreditSecurityId(/* Long date type */ null);
using(guidConverter).map(source).setCreditSecurityTemporalId(/* Guid data type */ null);
}
}
org.modelmapper.MappingException: ModelMapper mapping errors:
1) Error mapping com.trafigura.cashsettlement.model.CreditSecurityContractualCashflow to com.trafigura.cashsettlement.api.dto.contractual.CreditSecurityContractualCashflowDto
1 error
at org.modelmapper.internal.Errors.throwMappingExceptionIfErrorsExist(Errors.java:374)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:69)
at org.modelmapper.ModelMapper.mapInternal(ModelMapper.java:497)
at org.modelmapper.ModelMapper.map(ModelMapper.java:340)
at com.trafigura.cashsettlement.api.mapping.ObjectMapper.map(ObjectMapper.java:48)
at com.trafigura.cashsettlement.api.mapping.ContractualCashflowDtoMappingTest.credit_security(ContractualCashflowDtoMappingTest.java:218)
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:606)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:758)
at org.testng.TestRunner.run(TestRunner.java:613)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1170)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1095)
at org.testng.TestNG.run(TestNG.java:1007)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:109)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:202)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:173)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:125)
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:606)
at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:121)
Caused by: org.modelmapper.MappingException: ModelMapper mapping errors:
1) Failed to set value '1' on com.trafigura.cashsettlement.api.dto.contractual.CreditSecurityContractualCashflowDto.setCreditSecurityTemporalId()
1 error
at org.modelmapper.internal.Errors.toMappingException(Errors.java:258)
at org.modelmapper.internal.PropertyInfoImpl$MethodMutator.setValue(PropertyInfoImpl.java:118)
at org.modelmapper.internal.MappingEngineImpl.setDestinationValue(MappingEngineImpl.java:249)
at org.modelmapper.internal.MappingEngineImpl.propertyMap(MappingEngineImpl.java:180)
at org.modelmapper.internal.MappingEngineImpl.typeMap(MappingEngineImpl.java:131)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:92)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:60)
... 34 more
Caused by: java.lang.IllegalArgumentException: argument type mismatch
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:606)
at org.modelmapper.internal.PropertyInfoImpl$MethodMutator.setValue(PropertyInfoImpl.java:116)
... 39 more
Am I doing anything wrong here or is this a bug with the latest version? I didn't notice these kind of issues in version 0.6.5.