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

Andreas Veithen resolved AXIS2-4235.
------------------------------------

    Resolution: Won't Fix

In 18 months, nobody came up with an explanation why we would need to support 
non static inner classes in this context. Since static inner classes work well, 
I think we can close this issue as "Won't Fix".

> DefaultObjectSupplier cannot attach inner classes to the proper enclosing 
> class instance
> ----------------------------------------------------------------------------------------
>
>                 Key: AXIS2-4235
>                 URL: https://issues.apache.org/jira/browse/AXIS2-4235
>             Project: Axis2
>          Issue Type: Bug
>          Components: adb, kernel
>    Affects Versions: 1.5, 1.4.1, 1.4
>            Reporter: Detelin Yordanov
>            Assignee: Andreas Veithen
>
> Тhe default implementation of the ObjectSupplier interface is not capable of 
> creating inner classes and attaching them to an already created parent 
> instance. For example, suppose we have the following class hierarchy:
> class Parent {
>   String name;
>   get/setName() { .. }
>  
>   class Inner {
>       String innerName;
>    }
> }
> Transformed into XML, thiis should look sth. like:
> <Parent>
>    <name>ParentName</name>
>    <Inner>
>        <innerName>InnerName</innerName>
>    </Inner>
> </Parent>
> When ADB is parsing this, it will first invoke the ObjectSupplier requesting 
> an instance of Parent.class, the created instance will be populated, setting 
> its
> name to "ParentName".
> Then, ADB will proceed to create the Inner class instance, however now it 
> will not use the already created Parent, but will create a new one (see 
> DefaultObjectSupplier#getObject(..)). Thus the Inner class instance will have 
> an internal reference to a newly initialized Parent instance, rather than to 
> the already initialized and populated Parent instance. This means that the 
> Inner class will see the Parent's name field as null, instead as "ParentName".
> A possible, but not backward compatible solution would be to extend the 
> ObjectSupplier interface (or create a new interface) adding a new method:
> public Object getObject(Object parentObj, Class clazz)
> The method should use the provided parentObj instance if the given "clazz" is 
> an inner class and "parentObj" is an instance of its enclosing class.
> The other change would be to modify the ADB BeanUtil and pass the 
> corresponding parent instance on each call to the ObjectSupplier.
> If this solution is acceptable, I could provide a patch.
> Regards,
>    Detelin
>    

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to