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.

Reply via email to