Joris Timmerman created FLEX-63:
-----------------------------------

             Summary: SOAPDecoder: polymorphism problem
                 Key: FLEX-63
                 URL: https://issues.apache.org/jira/browse/FLEX-63
             Project: Apache Flex
          Issue Type: Bug
            Reporter: Joris Timmerman
            Assignee: Bertrand Delacretaz



Usecase:
--------------
The server specifies a base-class as the return type of a method in the WSDL 
with the intention of sending sub-classes of that type in the response of this 
method.
The actual type of the response object is defined in the xsi:type="" argument 
in the response xml.

Problem:
-------------
The SOAPDecoder returns an instance of the base class, instead of the specified 
sub-class.

In the SOAPDecoder, the method decodeType() is overriden from the XMLDecoder 
(line 765).
The first step in this method is a lookup of the actual type of the object it 
needs to decode, thanks to this, it actually uses the correct WSDL template to 
decode against.
The parent object however, the object which we're decoding properties of, is 
instantiated in the XMLDecoder.
Because the XMLDecoder doesn't look up the actual type, an instance of the 
base-class is created.

Solution:
-------------
1. In the SoapDecoder, override the XMLDecoders decode()-method.
2. Look up the xsi:type in the response xml, if none found use the type set in 
the wsdl.

Patch:
----------
Project: RPC
Class: SOAPDecoder

Insert code:
override public function decode(xml:*, name:QName=null, type:QName=null, 
definition:XML=null):* {
        var xsiType:QName = getXSIType(xml);
        return super.decode(xml, name, (xsiType != null) ? xsiType : type, 
definition);
}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to