[
https://issues.apache.org/jira/browse/WINK-243?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12803161#action_12803161
]
bharath chinnadurai commented on WINK-243:
------------------------------------------
Hi Bryant,
Apologies for my delayed reply.
I tested your patch and it worked fine as expected.
As per your fix, The actual instance of the interface type is injected if the
resource is not initialized and a proxy instance is injected if the resource is
already initialized.
I see an inconsistency here. For discussion purpose, lets take the below two
cases.
Case 1: Field injected before resource initialization - Actual instance of the
field is injected
Case 2: Field injected after resource initialization - Proxy instance of the
field is injected
In case 1, i would be able to type cast the injected field to its actual type
In case 2, i would get a ClassCastException if attempted to type cast.
Can this be avoided some how?
> 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
> 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.
-
You can reply to this email to add a comment to the issue online.