Coder Social home page Coder Social logo

Comments (6)

elaatifi avatar elaatifi commented on May 26, 2024

Hello,

This is how it's supposed to work. Once the MaperFacade has been initialized no more configuration can be done (except class-maps but it's not recommended, and may disappear in the future also)

So be sure to pre-configure all mapping rules in the configuration time.

from orika.

boss94 avatar boss94 commented on May 26, 2024

Ohh, thanks for the quick answer! But I was using Ken Blair's idea to instantiate all the custom converters and mappers on Spring applicationContext's initialization...and that doesn't work anymore!
And I am not able to register CustomConverters on a field level neither, getting the same error...

Is there a way to make Orika instantiate the mapperFacade after Spring's ApplicationContext has started?

from orika.

elaatifi avatar elaatifi commented on May 26, 2024

In fact the implementation may miss something, the only problem I can see is that the default constructor is called first which do the initialization of MapperFacade, so the only thing you have to do is to add a constructor in which you call

super(false); // to delay the initialization

And change post bean initialization do the actual MapperFacade initialization, by changing the setApplicationContext method like this:

@Override
public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
    addAllSpringBeans(applicationContext);
}

from orika.

boss94 avatar boss94 commented on May 26, 2024

First, thanks a lot for your time.
I can't see a change between your version of the setApplicationContext() method and mine! :(

So, I tried your solution (disabling the init from the constructor) :

    public OrikaBeanMapper() {
        super(false);         
    }

but I still had to initialize the local factory befiore setting the mapperFacade, and since both factory and facade are set in configurableMapper.init()...the only place to do this is still in the overridden configure() method where I don't have access to the applicationContext!

So I came up with the following solution, which works. Please share your toughts and/or a better/cleaner solution ;) :

private MapperFactory factory;
//referencing the ApplicationContext in the class
private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
        this.init();//configurableMapper.init()
    }

    @Override
    protected void configure(final MapperFactory factory) {
        this.factory = factory;
        addAllSpringBeans();//needs the factory to be set
        addConverter(new PassThroughConverter(org.joda.time.DateTime.class));
    }

Thanks again for your help.

from orika.

elaatifi avatar elaatifi commented on May 26, 2024

Yes! Sorry I forget to modify the snippet in my comment :)
You're solution is good !

from orika.

boss94 avatar boss94 commented on May 26, 2024

Thanks :)

from orika.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.