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


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.
-
You can reply to this email to add a comment to the issue online.

Reply via email to