You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wink.apache.org by "Gerhard Petracek (JIRA)" <ji...@apache.org> on 2013/07/13 22:14:09 UTC

[jira] [Closed] (WINK-243) Unable to inject fields once ResourceInstance is initialized

     [ https://issues.apache.org/jira/browse/WINK-243?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gerhard Petracek closed WINK-243.
---------------------------------

    
> Unable to inject fields once ResourceInstance is initialized
> ------------------------------------------------------------
>
>                 Key: WINK-243
>                 URL: https://issues.apache.org/jira/browse/WINK-243
>             Project: Wink
>          Issue Type: Bug
>          Components: Server
>    Affects Versions: 1.0
>         Environment: Wink 1.0 / JRE 1.6
>            Reporter: bharath chinnadurai
>            Assignee: Bryant Luk
>             Fix For: 1.1
>
>         Attachments: WINK-243.patch
>
>
> Unable to inject fields once ResourceInstance is initialized. 
> I get a handle to the the resource instance which is about to be invoked using UriInfo.getMatchedResources,  which will initialize a new ResourceInstance using ObjectFactory which would in-turn inject all fields/methods to the resource instance and the resource instance is returned back. After this process any sort of field injection to the context is not getting reflected in the resource instance. This is because in ResourceInstance.getInstanceMethod,
> {code:title=ResourceInstance.java|borderStyle=solid}
> ...
>     public Object getInstance(RuntimeContext context) {
>         if (instance != null) {
>             return instance;
>         }
>         instance = record.getObjectFactory().getInstance(context);
>         return instance;
>     }
> ...
> {code} 
> As we see if the instance is not null the instance is returned as it is.
> A probable fix could be to call wink common's CreationUtils.injectFields() to re-inject the fields which would inject any field that was set to the context after the resource class was initialized. The code above would look like,
> {code:title=ResourceInstance.java|borderStyle=solid}
> ...
> public Object getInstance(RuntimeContext context) {
>         if (instance != null) {
>         	try {
> 			CreationUtils.injectFields(instance, record.getMetadata(), context);
> 		}  catch (Exception e) {
> 			throw new ObjectCreationException(e);
> 		}
>             return instance;
>         }
>         instance = record.getObjectFactory().getInstance(context);
>         return instance;
>     }
> ...
> {code} 
> However this would re-inject fields that was already injected to the instance before while creation of the instance. If that can be lived with, this could possibly be a patch for this bug.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira