For posterity's sake: I ended up solving this by creating a separate context holder class which implemented ApplicationContextAware and had a static method which would return the application context. I ended up just calling that static method to get my spring loaded application context and then I used that to retrieve the relevant controller beans.
Super simple solution to a problem that plagued me for a few days :) On Monday, February 20, 2017 at 10:28:53 AM UTC-8, Abdullah Mourad wrote: > > Thanks, Tony! > > Thanks to your tip, I was able to use my own ControllerFactory by setting > controllerFactoryClass in inflector.yaml. I also made it implement > ApplicationContextAware and wired in my ApplicationContext successfully. > However, Inflector also tries to instantiate my controllerFacotry in > Configuration.java: > > controllerFactory = Class.forName(controllerFactoryClass).asSubclass( > ControllerFactory.class).newInstance(); > > This creates a new instance of my ControllerFactory which obviously > doesn't have my ApplicationContext. > > I tried browsing through the springboot sample code to understand how the > spring instance is wired into swagger, but it is not clear to me what is > going on. At this point I want to understand how to get Swagger to use the > same instance that I am creating via spring. > > > On Thursday, February 16, 2017 at 9:05:28 AM UTC-8, tony tam wrote: >> >> I believe you can implement your own ControllerFactory to do this. See >> here: >> >> >> https://github.com/swagger-api/swagger-inflector/blob/master/src/main/java/io/swagger/inflector/config/ControllerFactory.java >> >> On Feb 15, 2017, at 5:16 PM, Abdullah Mourad <[email protected]> wrote: >> >> To clarify, my initial instance that is created by spring is created >> correctly, but it appears that inflector creates a new instance for each >> operation - In this case my controller has 2 operations, so I end up with 3 >> separate instances of my controller. The 2 non-spring created instances do >> not have the proper fields initialized (as expected since they are not >> created via spring). >> >> On Wednesday, February 15, 2017 at 5:14:16 PM UTC-8, Abdullah Mourad >> wrote: >>> >>> I am using codegen to generate my controllers and inflector to route to >>> them. I would like to use Spring to populate some managers in my >>> controllers but inflector creates a new instance of the controller each >>> time and those don't get the managers injected properly. Is there any way >>> around this? Is it possible to use a single instance of my controller? >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Swagger" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> >> >> -- You received this message because you are subscribed to the Google Groups "Swagger" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
