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