Intelligent object mapping

Overview

ModelMapper

Build Status Maven Central License JavaDoc

ModelMapper is an intelligent object mapping library that automatically maps objects to each other. It uses a convention based approach while providing a simple refactoring safe API for handling specific use cases.

Visit modelmapper.org to learn more.

Modules

In v2.0, ModelMapper provides modules for 3rd library integration you can easily register by modelMapper.registerModule(new TheModule()).

Related Projects

Contributing

Bug reports and feature requests are welcome via the issue tracker. Fixes and enhancements are also welcome via pull requests. If you're unsure about a contribution idea, feel free to contact me.

Comments
  • How do I map Inheritance?

    How do I map Inheritance?

    I have this classes:

    class Base {
       private Type type;
    }
    
    class A extends Base {
    }
    
    class B extends Base {
    }
    
    class C {
        private List<Base> bases;
    }
    

    And then I have the same structure for BaseDTO, ADTO, BDTO,and CDTO. When I convert from C to CDTO I want the A and B instances in bases to be converted to ADTO and BDTO respectively. Is there a way to do that through configuration?? Thanks for your time.

    Bug 
    opened by ulisesbocchio 26
  • Prevent Hibernate lazy loading

    Prevent Hibernate lazy loading

    Hi,

    Is there any way to avoid Lazy Loading launched by hibernate? With the dozer can create a CustomFieldMapper that manipulates these values​​, but found the ModelMapper much simpler

    public class MyCustomFieldMapper implements CustomFieldMapper 
    {
        public boolean mapField(Object source, Object destination, Object sourceFieldValue, ClassMap classMap, FieldMap fieldMapping) {       
    
            if (!(sourceFieldValue instanceof PersistentSet)) {
                return false;
            }
    
    
            if (((PersistentSet) sourceFieldValue).wasInitialized()) {
    
                return false;
            }
            destination = null;
            return true;
        }   
    }
    
    Question 
    opened by marcelolucio1982 23
  • Properties are not skipped

    Properties are not skipped

    In the last release 0.7.8 the same code working on v0.7.7 doesn't work.

    If I try to map a source object into a destination object with some not existing properties in source object, in the destination object the value is set to null even if I configurated to skip these properties

    opened by tavolate 21
  • Issues with spring-boot-devtools

    Issues with spring-boot-devtools

    Hi,

    There seems to be a problem when adding custom mappers and using spring boot dev tools.

    I have added my mapper like so:

    @Bean
    public ModelMapper beanMapper() {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.addMappings(subscriberRqToSubscriberDtoMapper);
        return modelMapper;
    }
    

    But when devtools restarts the spring context, I get the following:

    [restartedMain] WARN org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'legacyFunctionsController': Unsatisfied dependency expressed through field 'compositeSubscriptionService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'compositeSubscriptionService': Unsatisfied dependency expressed through field 'subscriptionService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'subscriptionService': Unsatisfied dependency expressed through field 'modelMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanMapper' defined in class path resource [com/rentalcars/email/subscription/config/BeanConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.modelmapper.ModelMapper]: Factory method 'beanMapper' threw exception; nested exception is org.modelmapper.ConfigurationException: ModelMapper configuration errors:
    
    1) Failed to configure mappings
    
    1 error
    [restartedMain] INFO com.rentalcars.events.firehose.impl.FirehoseAsync - Shutdown Async firehose
    [restartedMain] INFO com.rentalcars.events.firehose.impl.FirehoseSync - Shutdown sync firehose
    [restartedMain] INFO com.rentalcars.events.firehose.impl.FirehoseProxy - Shutdown firehose proxy
    [restartedMain] INFO com.rentalcars.events.EventManagerImpl - Shutdown EventManager
    [restartedMain] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
    [restartedMain] INFO org.apache.catalina.core.StandardService - Stopping service Tomcat
    [restartedMain] INFO org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer - 
    
    Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
    [restartedMain] ERROR org.springframework.boot.SpringApplication - Application startup failed
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'legacyFunctionsController': Unsatisfied dependency expressed through field 'compositeSubscriptionService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'compositeSubscriptionService': Unsatisfied dependency expressed through field 'subscriptionService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'subscriptionService': Unsatisfied dependency expressed through field 'modelMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanMapper' defined in class path resource [com/rentalcars/email/subscription/config/BeanConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.modelmapper.ModelMapper]: Factory method 'beanMapper' threw exception; nested exception is org.modelmapper.ConfigurationException: ModelMapper configuration errors:
    
    1) Failed to configure mappings
    
    1 error
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569)
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    	at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761)
    	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
    	at com.rentalcars.email.subscription.Application.main(Application.java:14)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'compositeSubscriptionService': Unsatisfied dependency expressed through field 'subscriptionService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'subscriptionService': Unsatisfied dependency expressed through field 'modelMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanMapper' defined in class path resource [com/rentalcars/email/subscription/config/BeanConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.modelmapper.ModelMapper]: Factory method 'beanMapper' threw exception; nested exception is org.modelmapper.ConfigurationException: ModelMapper configuration errors:
    
    1) Failed to configure mappings
    
    1 error
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569)
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    	... 24 more
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'subscriptionService': Unsatisfied dependency expressed through field 'modelMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanMapper' defined in class path resource [com/rentalcars/email/subscription/config/BeanConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.modelmapper.ModelMapper]: Factory method 'beanMapper' threw exception; nested exception is org.modelmapper.ConfigurationException: ModelMapper configuration errors:
    
    1) Failed to configure mappings
    
    1 error
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569)
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    	... 37 more
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanMapper' defined in class path resource [com/rentalcars/email/subscription/config/BeanConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.modelmapper.ModelMapper]: Factory method 'beanMapper' threw exception; nested exception is org.modelmapper.ConfigurationException: ModelMapper configuration errors:
    
    1) Failed to configure mappings
    
    1 error
    	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1023)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    	... 50 more
    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.modelmapper.ModelMapper]: Factory method 'beanMapper' threw exception; nested exception is org.modelmapper.ConfigurationException: ModelMapper configuration errors:
    
    1) Failed to configure mappings
    
    1 error
    	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
    	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
    	... 62 more
    Caused by: org.modelmapper.ConfigurationException: ModelMapper configuration errors:
    
    1) Failed to configure mappings
    
    1 error
    	at org.modelmapper.internal.Errors.throwConfigurationExceptionIfErrorsExist(Errors.java:241)
    	at org.modelmapper.internal.ExplicitMappingBuilder.build(ExplicitMappingBuilder.java:207)
    	at org.modelmapper.internal.TypeMapImpl.addMappings(TypeMapImpl.java:89)
    	at org.modelmapper.internal.TypeMapStore.getOrCreate(TypeMapStore.java:103)
    	at org.modelmapper.ModelMapper.addMappings(ModelMapper.java:93)
    	at com.rentalcars.email.subscription.config.BeanConfig.beanMapper(BeanConfig.java:25)
    	at com.rentalcars.email.subscription.config.BeanConfig$$EnhancerBySpringCGLIB$$ac2467ae.CGLIB$beanMapper$2(<generated>)
    	at com.rentalcars.email.subscription.config.BeanConfig$$EnhancerBySpringCGLIB$$ac2467ae$$FastClassBySpringCGLIB$$c50af4a5.invoke(<generated>)
    	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356)
    	at com.rentalcars.email.subscription.config.BeanConfig$$EnhancerBySpringCGLIB$$ac2467ae.beanMapper(<generated>)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
    	... 63 more
    Caused by: java.lang.ClassCastException: com.rentalcars.email.subscription.domain.dto.SubscriberDto$$EnhancerByModelMapper$$ed71a09 cannot be cast to com.rentalcars.email.subscription.domain.dto.SubscriberDto
    	at com.rentalcars.email.subscription.domain.mapper.SubscriberRqToSubscriberDtoMapper.configure(SubscriberRqToSubscriberDtoMapper.java:31)
    	at org.modelmapper.PropertyMap.configure(PropertyMap.java:383)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.modelmapper.internal.ExplicitMappingBuilder.build(ExplicitMappingBuilder.java:195)
    	... 77 more
    

    I've tried adding this to spring-devtools.properties:

    restart.include.modelmapper=/modelmapper-(.*).jar
    

    But that gives me loads of the following errors:

    [restartedMain] WARN org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'legacyFunctionsController': Unsatisfied dependency expressed through field 'compositeSubscriptionService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'compositeSubscriptionService': Unsatisfied dependency expressed through field 'subscriptionService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'subscriptionService': Unsatisfied dependency expressed through field 'modelMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanMapper' defined in class path resource [com/rentalcars/email/subscription/config/BeanConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.modelmapper.ModelMapper]: Factory method 'beanMapper' threw exception; nested exception is org.modelmapper.ConfigurationException: ModelMapper configuration errors:
    
    1) Failed to generate proxy class for com.rentalcars.email.subscription.domain.dto.SubscriberRq. Ensure that com.rentalcars.email.subscription.domain.dto.SubscriberRq has a non-private constructor.
    Caused by: org.modelmapper.internal.cglib.core.CodeGenerationException: java.lang.NoSuchMethodException-->com.rentalcars.email.subscription.domain.dto.SubscriberRq$$EnhancerByModelMapper$$d373e4d0.CGLIB$SET_THREAD_CALLBACKS([Lorg.modelmapper.internal.cglib.proxy.Callback;)
    	at org.modelmapper.internal.cglib.proxy.Enhancer$EnhancerFactoryData.<init>(Enhancer.java:423)
    	at org.modelmapper.internal.cglib.proxy.Enhancer.wrapCachedClass(Enhancer.java:709)
    	at org.modelmapper.internal.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:94)
    	at org.modelmapper.internal.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91)
    	at org.modelmapper.internal.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    	at org.modelmapper.internal.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
    	at org.modelmapper.internal.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
    	at org.modelmapper.internal.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116)
    	at org.modelmapper.internal.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:291)
    	at org.modelmapper.internal.cglib.proxy.Enhancer.createHelper(Enhancer.java:480)
    	at org.modelmapper.internal.cglib.proxy.Enhancer.createClass(Enhancer.java:337)
    	at org.modelmapper.internal.ProxyFactory.proxyClassFor(ProxyFactory.java:68)
    	at org.modelmapper.internal.ProxyFactory.proxyFor(ProxyFactory.java:83)
    	at org.modelmapper.internal.ExplicitMappingBuilder.createProxy(ExplicitMappingBuilder.java:294)
    	at org.modelmapper.internal.ExplicitMappingBuilder.createProxies(ExplicitMappingBuilder.java:247)
    	at org.modelmapper.internal.ExplicitMappingBuilder.visitPropertyMap(ExplicitMappingBuilder.java:230)
    	at org.modelmapper.PropertyMap.configure(PropertyMap.java:380)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.modelmapper.internal.ExplicitMappingBuilder.build(ExplicitMappingBuilder.java:195)
    	at org.modelmapper.internal.TypeMapImpl.addMappings(TypeMapImpl.java:89)
    	at org.modelmapper.internal.TypeMapStore.getOrCreate(TypeMapStore.java:103)
    	at org.modelmapper.ModelMapper.addMappings(ModelMapper.java:93)
    	at com.rentalcars.email.subscription.config.BeanConfig.beanMapper(BeanConfig.java:25)
    	at com.rentalcars.email.subscription.config.BeanConfig$$EnhancerBySpringCGLIB$$fac15065.CGLIB$beanMapper$1(<generated>)
    	at com.rentalcars.email.subscription.config.BeanConfig$$EnhancerBySpringCGLIB$$fac15065$$FastClassBySpringCGLIB$$b616fa5f.invoke(<generated>)
    	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356)
    	at com.rentalcars.email.subscription.config.BeanConfig$$EnhancerBySpringCGLIB$$fac15065.beanMapper(<generated>)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
    	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1023)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    	at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761)
    	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
    	at com.rentalcars.email.subscription.Application.main(Application.java:14)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
    Caused by: java.lang.NoSuchMethodException: com.rentalcars.email.subscription.domain.dto.SubscriberRq$$EnhancerByModelMapper$$d373e4d0.CGLIB$SET_THREAD_CALLBACKS([Lorg.modelmapper.internal.cglib.proxy.Callback;)
    	at java.lang.Class.getDeclaredMethod(Class.java:2130)
    	at org.modelmapper.internal.cglib.proxy.Enhancer.getCallbacksSetter(Enhancer.java:809)
    	at org.modelmapper.internal.cglib.proxy.Enhancer.access$000(Enhancer.java:63)
    	at org.modelmapper.internal.cglib.proxy.Enhancer$EnhancerFactoryData.<init>(Enhancer.java:414)
    	... 99 more
    
    2) Failed to configure mappings
    Caused by: org.modelmapper.internal.ErrorsException
    	at org.modelmapper.internal.Errors.toException(Errors.java:254)
    	at org.modelmapper.internal.ProxyFactory.proxyClassFor(ProxyFactory.java:70)
    	at org.modelmapper.internal.ProxyFactory.proxyFor(ProxyFactory.java:83)
    	at org.modelmapper.internal.ExplicitMappingBuilder.createProxy(ExplicitMappingBuilder.java:294)
    	at org.modelmapper.internal.ExplicitMappingBuilder.createProxies(ExplicitMappingBuilder.java:247)
    	at org.modelmapper.internal.ExplicitMappingBuilder.visitPropertyMap(ExplicitMappingBuilder.java:230)
    	at org.modelmapper.PropertyMap.configure(PropertyMap.java:380)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.modelmapper.internal.ExplicitMappingBuilder.build(ExplicitMappingBuilder.java:195)
    	at org.modelmapper.internal.TypeMapImpl.addMappings(TypeMapImpl.java:89)
    	at org.modelmapper.internal.TypeMapStore.getOrCreate(TypeMapStore.java:103)
    	at org.modelmapper.ModelMapper.addMappings(ModelMapper.java:93)
    	at com.rentalcars.email.subscription.config.BeanConfig.beanMapper(BeanConfig.java:25)
    	at com.rentalcars.email.subscription.config.BeanConfig$$EnhancerBySpringCGLIB$$fac15065.CGLIB$beanMapper$1(<generated>)
    	at com.rentalcars.email.subscription.config.BeanConfig$$EnhancerBySpringCGLIB$$fac15065$$FastClassBySpringCGLIB$$b616fa5f.invoke(<generated>)
    	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356)
    	at com.rentalcars.email.subscription.config.BeanConfig$$EnhancerBySpringCGLIB$$fac15065.beanMapper(<generated>)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
    	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1023)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1128)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:751)
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    	at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761)
    	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
    	at com.rentalcars.email.subscription.Application.main(Application.java:14)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
    
    2 errors
    [restartedMain] INFO com.rentalcars.events.firehose.impl.FirehoseAsync - Shutdown Async firehose
    [restartedMain] INFO com.rentalcars.events.firehose.impl.FirehoseSync - Shutdown sync firehose
    [restartedMain] INFO com.rentalcars.events.firehose.impl.FirehoseProxy - Shutdown firehose proxy
    [restartedMain] INFO com.rentalcars.events.EventManagerImpl - Shutdown EventManager
    [restartedMain] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
    [restartedMain] INFO org.apache.catalina.core.StandardService - Stopping service Tomcat
    [restartedMain] INFO org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer - 
    
    Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
    [restartedMain] ERROR org.springframework.boot.SpringApplication - Application startup failed
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'legacyFunctionsController': Unsatisfied dependency expressed through field 'compositeSubscriptionService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'compositeSubscriptionService': Unsatisfied dependency expressed through field 'subscriptionService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'subscriptionService': Unsatisfied dependency expressed through field 'modelMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanMapper' defined in class path resource [com/rentalcars/email/subscription/config/BeanConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.modelmapper.ModelMapper]: Factory method 'beanMapper' threw exception; nested exception is org.modelmapper.ConfigurationException: ModelMapper configuration errors:
    

    Is there a correct way to get the two working together?

    Cheers

    Bug 
    opened by jackpf 20
  • WARNING: Illegal reflective access using Lookup on org.modelmapper.internal.ProxyFactory to interface java.util.Set

    WARNING: Illegal reflective access using Lookup on org.modelmapper.internal.ProxyFactory to interface java.util.Set

    Hi, i have a warning in console when i convert Set to String separated by comma. How to fix it? ModelMapper version 2.3.1 Compiled with jdk 11 and jdk 10

    WARNING: Illegal reflective access using Lookup on org.modelmapper.internal.ProxyFactory (file:/C:/Users/dev/.m2/repository/org/modelmapper/modelmapper/2.3.0/modelmapper-2.3.0.jar) to interface java.util.Set

    class ClassWithSet {
    	private Set<Human> people;
    	// getter, setter
    }
    
    class ClassWithString {
    	private String names;
    	// getter, setter
    }
    
    class Human {
    	private String name;
    	private String surname;
    	// getter, setter
    }
    
    Converter<Set<Human>, String> setToStringComma =
                    source -> source.getSource().stream().map(Human::getName).collect(Collectors.joining(","));
    
    modelMapper.typeMap(ClassWithSet.class, ClassWithString.class)
                    .addMappings(mapper -> mapper.using(setToStringComma).map(ClassWithSet::getPeople, ClassWithString::setNames));
    
    Enhancement Good first contribution 
    opened by jrry 19
  • Error mapping models with jdk 11.0.11 update

    Error mapping models with jdk 11.0.11 update

    Yesterday oracle jdk 11.0.11 was released and mapping stopped working with the following error (model mapper version 2.3.9):

    ...
    Caused by: org.modelmapper.MappingException: ModelMapper mapping errors:
    
    1) Error mapping a.b.c.ModelA to a.b.c.ModelB
    
    1 error
    	at org.modelmapper.internal.Errors.throwMappingExceptionIfErrorsExist(Errors.java:380)
    	at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:81)
    	at org.modelmapper.ModelMapper.mapInternal(ModelMapper.java:573)
    	at org.modelmapper.ModelMapper.map(ModelMapper.java:495)
    	... 254 common frames omitted
    Caused by: java.lang.ClassCastException: null
    

    MM configuration:

    // ... here are some custom converters
    modelMapper.getConfiguration().setFieldMatchingEnabled(true).setMatchingStrategy(MatchingStrategies.STRICT).setFieldAccessLevel(
                Configuration.AccessLevel.PRIVATE).setUseOSGiClassLoaderBridging(true);
    

    Rolling back to jdk 11.0.10 resolved the issue. Tried updating the library to 2.4.0 but it made no changes.

    Bug 
    opened by Roman-Skripka 17
  • ModelMapper should support Builder Pattern

    ModelMapper should support Builder Pattern

    By default the ModelMapper passes values from a source bean to a target bean by getter and setter methods. However, if immutable DTOs, instead of POJOs, should be created ModelMapper should support the Builder pattern.

    For instance: We want to map from a mutable Source (e.g. Entity) to a immutable Target DTO

    ` class Source {

    private Long a;
    private String b;
    
    public Long getA() {
        return a;
    }
    public void setA(Long a) {
        this.a = a;
    }
    public String getB() {
        return b;
    }
    public void setB(String b) {
        this.b = b;
    }
    

    }

    class Target {

    private Long internalId;
    private String externalId;
    
    private Target(Builder builder) {
        this.internalId = builder.internalId;
        this.externalId = builder.externalId;
    }
    public Long getInternalId() {
        return internalId;
    }
    public String getExternalId() {
        return externalId;
    }
    
    public static Builder builder() {
        return new Builder();
    }
    
    public static final class Builder {
        private Long internalId;
        private String externalId;
    
        private Builder() {}
    
        public Builder withInternalId(Long internalId) {
            this.internalId = internalId;
            return this;
        }
    
        public Builder withExternalId(String externalId) {
            this.externalId = externalId;
            return this;
        }
    
        public Target build() {
            return new Target(this);
        }
    }
    

    } ` It should be possible to configure ModelMapper, so that the Target.Builder class is being used. Specific Mappings (Source.a -> Target.InternalId , Source.b -> Target.ExternalId) must be applied to the Builder pattern.

    Enhancement 
    opened by Vadus 17
  • ModelMapper mapper.skip() doesn't work for pojo objects with circular dependency

    ModelMapper mapper.skip() doesn't work for pojo objects with circular dependency

    I have two pojo objects: Husband, Wife which reference each other.

    Husband.java

    public class Husband {
       private String name;
       private int age;
       private String man;
       private Wife wife;
    
       // getter, setter, builder, constructor are removed for berevity
    }
    

    Wife.java

    public class Wife {
       private String name;
       private int age;
       private String woman;
       private Husband husband;
    
       // getter, setter, builder, constructor are removed for berevity
    }
    
    

    I've created simple typeMap rulings for both objects, where the referenced object is skipped.

    My test class:

    public class ModelTest {
    
    @Test
    public void test() {
        ModelMapper modelMapper = new ModelMapper();
        TypeMap<Wife, Wife> typeWife = modelMapper.createTypeMap(Wife.class, Wife.class);
        typeWife.addMappings(mapper -> {
            mapper.skip(Wife::setHusband);
        });
    
        TypeMap<Husband, Husband> typeHusband = modelMapper.createTypeMap(Husband.class, Husband.class);
        typeHusband.addMappings(mapper -> {
            mapper.skip(Husband::setWife);
        });
    
        Wife wife = Wife.builder().age(25).name("Sarah").woman("good woman").build();
        Husband husband = Husband.builder().age(28).name("Imtiaz").man("good man").build();
        wife.setHusband(husband);
        husband.setWife(wife);
    
        Husband updatedHusband = Husband.builder().age(28).name("Imtiaz Shakil").man("slightly good man").build();
        modelMapper.map(updatedHusband, husband);
        System.out.println(husband.toString());
        System.out.println(husband.getWife().toString());
        }
    
    }
    
    

    When mapping updatedHusband to husband, setWife() method is not skipped. But, if I remove typeWife mapping from modelMapper the code works fine.

    I'm using ModelMapper 1.1.3

    Thanks.

    Bug 
    opened by imtiazShakil 16
  • Occasionally model mapper, does not map value (Once in few times)

    Occasionally model mapper, does not map value (Once in few times)

    Please see example https://github.com/magdenkov/protobuf-modelmapper-problem

    Thank a lot! Or if you can give some idea where can be problem, i will try to create pull request

    Enhancement 
    opened by magdenkov 16
  • ModelMapper: Does not map nested collections of List

    ModelMapper: Does not map nested collections of List

    I have similar example like below:

    public class FirstObject {
        private List<SecondObject> myListOne;
        ...only getter method...
        ...no setter method for the list due to it is generated from wsdl 
    }
    public class SecondObject {
        private List<ThirdObject> myListTwo;
        ...only getter method...
        ...no setter method for the list due to it is generated from wsdl
    }
    public class ThirdObject {
        private String firstName;
        private String lastName;
        ...setters and getters...
    }
    
    FirstObject rq = new FirstObject();
    ...fills some data...
    
    ModelMapper modelMapper = new ModelMapper();
    FirstObjectDTO = modelMapper.map(rq, FirstObjectDTO.class);
    

    The main issue are setter methods for the lists. If you try with PropertyMap or even with Providers you have to use setter methods and I cannot make them manually because all objects will be regenerated from wsdl each time when I run mvn eclipse:eclipse command.

    In case that we have setter methods everything will work properly.

    Is there any solution how to make this with Converter??

    opened by ervinfetic 15
  • matches multiple source property hierarchies problem

    matches multiple source property hierarchies problem

    Hi, I'm using JPA(with Hibernate) and wish to convert some composite domain to view layer, So I'm using ModelMapper also.

    At first, I defined some domain and DTO classes.

    @Entity
    public class User {
        ...
        @Id
        String id;
    
        @OneToOne
        Preference preference;
        ...
    }
    
    @Entity
    public class Preference {
        ...
        @Id
        String id;
    
        @OneToOne
        User user;
    
        BigDecimal money;
        ...
    }
    
    public class UserDto {
        ...
        String id;
        BigDecimal preferenceMoney;
        ...
    }
    

    then, I've tried to mapping DTO object instance to domain object instance.

    UserDto userDto = new UserDto();
    userDto.setPreferenceMoney(1000.0);
    mapper.map(userDto, User.class);
    

    this code returns error

    1) The destination property User.setPreference()/Preference.setUser() matches multiple source property hierarchies:
    

    Skipping to set user to Preference class suppress this error, but when saving data to persist returned exception that preference object instance couldn't get user property. :(

    Is this an another case of circular reference problem? I've dig circular reference test cases, but I can't find a solution.

    opened by ACodeFarmer 15
  • Using a converter to map interface to concrete class doesn't seems to work with implicit mapping disabled

    Using a converter to map interface to concrete class doesn't seems to work with implicit mapping disabled

    Using Java 17 and ModelMapper 3.1.1 or 2.3.3, I have issue using a converter to map an interface implementation to a class.

    Here is my Source interface:

    public interface Source {
      int getId();
      String getName();
      boolean isDisabled();
    }
    

    Here is my Target class:

    public class Target {
    
      private int id;
      private String name;
      private boolean disabled;
    
      // This constructor shouldn't even be called since we rely on the all arguments constructor in the Converter
      public Target() {
      }
    
      public Target(int id, String name, boolean disabled) {
        this.id = id;
        this.name = name;
        this.disabled = disabled;
      }
    
      public int getId() {
        return id;
      }
    
      public void setId(int id) {
        this.id = id;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public boolean isDisabled() {
        return disabled;
      }
    
      public void setDisabled(boolean disabled) {
        this.disabled = disabled;
      }
    }
    

    My Converter:

    public class SourceTargetConverter extends AbstractConverter<Source, Target> {
      @Override
      protected Target convert(Source source) {
        return new Target(source.getId(), source.getName(), source.isDisabled());
      }
    }
    

    And how I use it:

        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setImplicitMappingEnabled(false);
    
        // Add a converter to map a Source implementation to Target
        mapper.addConverter(new SourceTargetConverter());
    
        Source source = new Source() {
          @Override
          public int getId() {
            return 42;
          }
    
          @Override
          public String getName() {
            return "hello";
          }
    
          @Override
          public boolean isDisabled() {
            return true;
          }
        };
    
        Target target = mapper.map(source, Target.class);
    
        Assertions.assertEquals(42, target.getId());
        Assertions.assertEquals("hello", target.getName());
        Assertions.assertEquals(true, target.isDisabled());
    

    All the assertions fail.

    Is there something wrong in my code?

    Here is a repository reproducing the issue: https://github.com/fistons/modelmapper-issue

    opened by fistons 0
  • ModelMapper Support for GraalVM Native Image

    ModelMapper Support for GraalVM Native Image

    Does ModelMapper support GraalVM Native Image building? If not, can you please share the plan as when it would? Thanks

    Have tried to build a native image using latest Graal and Spring Boot, running into multiple issues.

    cc: @chhsiao90

    opened by syedyusufh 2
  • Map/Skip based on a custom Condition over destination property fails always

    Map/Skip based on a custom Condition over destination property fails always

    Hi am using model mapper 3.1.1. I want to skip the value assignment of destination property only if it is not null. But when I provide the condition am always getting null pointer exception.

    @Configuration
    public class ModelMapperInitializer {
    
        @Bean
        public ModelMapper modelMapper() {
    
            Condition<SourceObject, DestinationObject> isNotNull = context -> context.getDestination().getDestProperty() != null;
            
            ModelMapper modelMapper = new ModelMapper();
            
            modelMapper.typeMap(SourceObject.class, DestinationObject.class).addMappings(mapper -> 
                 mapper.when(isNotNull).skip(SourceObject::getDestProperty, DestinationObject::setDestProperty));
            
            return modelMapper;
        }
    }
    

    Controller:

    @Autowired
    private ModelMapper modelMapper;
    modelMapper.map(sourceObj, destObj);
    

    The exception is always thrown here in the MappingEngineImpl class image

    Could anyone please help in fixing the issue.

    opened by senthilj94 0
  • Compatibility spring boot 3 native compilation

    Compatibility spring boot 3 native compilation

    The current version when I try to do a native build, produces the error that I attach.

    The problem seems to be due to the fact that it is not allowed to generate proxies at runtime, as the instantiation of ByteBuddy fails.

    I'm doing tests to save the proxies that are generated and register them as Reflection hints; Do you have any other ideas?

    error.txt

    opened by nexus061 0
  • How do I map an empty array in the source object?

    How do I map an empty array in the source object?

    If my source object has an empty array in it's hierarchy it doesn't get mapped (or is ignored maybe?). I created a program here to demonstrate: https://onecompiler.com/java/3yktwzjc3

    The output is:

    FooDTO before: FooDTO{name='My foo DTO', bar=BarDTO{name='My foo's bar', jars=[]}}

    Foo before: Foo{name='My Foo', bar=Bar{name='null', jars=[Jar{name='Jar 1'}, Jar{name='Jar 2'}]}}

    Foo after: Foo{name='My foo DTO', bar=Bar{name='My foo's bar', jars=[Jar{name='Jar 1'}, Jar{name='Jar 2'}]}}

    You can see I map FooDTO -> Foo. The mapping for everything works e.g. the name fields, but the empty 'jars' array in the FooDTO's bar object doesn't get mapped.

    Any ideas? Thanks

    opened by asmith2306 0
Owner
ModelMapper
Intelligent object mapping
ModelMapper
A declarative mapping library to simplify testable object mappings.

ReMap - A declarative object mapper Table of Contents Long story short About ReMap Great News Mapping operations Validation Features Limitations The m

REMONDIS IT Services GmbH & Co. KG 103 Dec 27, 2022
Simpler, better and faster Java bean mapping framework

Orika ! NEW We are pleased to announce the release of Orika 1.5.4 ! This version is available on Maven central repository What? Orika is a Java Bean m

null 1.2k Jan 6, 2023
Selma Java bean mapping that compiles

Selma Java bean mapping at compile time ! What is Selma ? S3lm4 say Selma, stands for Stupid Simple Statically Linked Mapper. In fact it is on one sid

Publicis Sapient Engineering 210 Nov 2, 2022
Dozer is a Java Bean to Java Bean mapper that recursively copies data from one object to another.

Dozer Active Contributors We are always looking for more help. The below is the current active list: Core @garethahealy @orange-buffalo ?? Protobuf @j

null 2k Jan 5, 2023
dOOv (Domain Object Oriented Validation) a fluent API for type-safe bean validation and mapping

dOOv (Domain Object Oriented Validation) dOOv is a fluent API for typesafe domain model validation and mapping. It uses annotations, code generation a

dOOv 77 Nov 20, 2022
A declarative mapping library to simplify testable object mappings.

ReMap - A declarative object mapper Table of Contents Long story short About ReMap Great News Mapping operations Validation Features Limitations The m

REMONDIS IT Services GmbH & Co. KG 103 Dec 27, 2022
Netflix, Inc. 809 Dec 28, 2022
Mars - Object Relational Mapping Framework for MongoDB (MongoDB ORM)

Mars Object Relational Mapping Framework for MongoDB 致自己 造自己的轮子,让别人去说 ; What is Mars Mars is a unified driver platform product developed by Shanghai J

null 35 Nov 17, 2022
HasorDB is a Full-featured database access tool, Providing object mapping,Richer type handling than Mybatis, Dynamic SQL

HasorDB is a Full-featured database access tool, Providing object mapping,Richer type handling than Mybatis, Dynamic SQL, stored procedures, more dialect 20+, nested transactions, multiple data sources, conditional constructors, INSERT strategies, multiple statements/multiple results. And compatible with Spring and MyBatis usage.

赵永春 17 Oct 27, 2022
An object mapping jetbrains plugin, it will automatically generate the get/set code between the two objects.

BeanMappingKey 简体中文 | English 一键生成两个实体类之间的字段映射代码,用于代替 BeanUtil 与 MapStruct 等工具。 使用指南 在 Java 开发的过程中,经常会使用众多包装型的对象如:BO、VO、DTO,它们之间往往只有两三个字段的差异, 而对它们进行相互

Rookie 60 Dec 14, 2022
dOOv (Domain Object Oriented Validation) a fluent API for type-safe bean validation and mapping

dOOv (Domain Object Oriented Validation) dOOv is a fluent API for typesafe domain model validation and mapping. It uses annotations, code generation a

dOOv 77 Nov 20, 2022
Reladomo is an enterprise grade object-relational mapping framework for Java.

Reladomo What is it? Reladomo is an object-relational mapping (ORM) framework for Java with the following enterprise features: Strongly typed compile-

Goldman Sachs 360 Nov 2, 2022
Hibernate's core Object/Relational Mapping functionality

Hibernate ORM is a library providing Object/Relational Mapping (ORM) support to applications, libraries, and frameworks. It also provides an implement

Hibernate 5.2k Jan 9, 2023
Hierarchical Temporal Memory implementation in Java - an official Community-Driven Java port of the Numenta Platform for Intelligent Computing (NuPIC).

htm.java Official Java™ version of... Hierarchical Temporal Memory (HTM) Community-supported & ported from the Numenta Platform for Intelligent Comput

Numenta 301 Dec 1, 2022
Intelligent Semantic Web ALC Generator Testing Reasoner

Intelligent Semantic Web ALC Generator Testing Reasoner

Gianluca De Lucia 2 Jan 13, 2022
Compilation of code scripts from the Fall 2021 semester of Intelligent Tunneling subteam.

VIP-Fall-2021 Compilation of code scripts from the Fall 2021 semester of Intelligent Tunneling subteam. Table of Contents Overview Data Normalization

Kruti Gupta 1 Feb 2, 2022
Code4Me provides automatic intelligent code completion based on large pre-trained language models

Code4Me Code4Me provides automatic intelligent code completion based on large pre-trained language models. Code4Me predicts statement (line) completio

Code4Me 38 Dec 5, 2022
Text Object Java Objects (TOJOs): an object representation of a multi-line structured text file like CSV

It's a simple manager of "records" in a text file of CSV, JSON, etc. format. It's something you would use when you don't want to run a full database,

Yegor Bugayenko 19 Dec 27, 2022
Simpler, better and faster Java bean mapping framework

Orika ! NEW We are pleased to announce the release of Orika 1.5.4 ! This version is available on Maven central repository What? Orika is a Java Bean m

null 1.2k Jan 6, 2023
Selma Java bean mapping that compiles

Selma Java bean mapping at compile time ! What is Selma ? S3lm4 say Selma, stands for Stupid Simple Statically Linked Mapper. In fact it is on one sid

Publicis Sapient Engineering 210 Nov 2, 2022