You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flex.apache.org by "Justin Mclean (JIRA)" <ji...@apache.org> on 2013/04/18 00:03:15 UTC

[jira] [Commented] (FLEX-33500) XMLEncoder fails to encode WSDL simpleType union

    [ https://issues.apache.org/jira/browse/FLEX-33500?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13634499#comment-13634499 ] 

Justin Mclean commented on FLEX-33500:
--------------------------------------

Both frameworks/projects/rpc/src/mx/rpc/xml/XMLDecoder.as and frameworks/projects/rpc/src/mx/rpc/xml/XMLEncoder.as patched and checked into develop branch.
                
> XMLEncoder fails to encode WSDL simpleType union
> ------------------------------------------------
>
>                 Key: FLEX-33500
>                 URL: https://issues.apache.org/jira/browse/FLEX-33500
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: RPC: General, RPC: WebService
>    Affects Versions: Adobe Flex SDK 3.3 (Release)
>            Reporter: Maurits Lourens
>            Assignee: Justin Mclean
>              Labels: easyfix
>
> The XMLEncoder can not encode simpleTypes with a definitionChild Union. 
> Steps to reproduce: 
> 1. Create a WSDL with a request containing a simpleType, with a union child, like this:
> <simpleType name="dateTimeOrEmpty">
> 	<union memberTypes="dateTime tns:emptyString"/>
> </simpleType>
> 2. Create a sample project which uses this call to do send a date to the server.
> Expected behavior: the dateTime should be send to the server.
> Actual behavior: the dateTime object is always empty (not nill). 
> The cause of this bug can be found inside the XMLEncoder. Around line 1340 you will find the function encodeSimpleType:
> public function encodeSimpleType(definition:XML, parent:XML, name:QName, value:*, restriction:XML = null):void
>     {
>         var definitionChild:XML = getSingleElementFromNode(definition,
>                             constants.restrictionQName,
>                             constants.listQName,
>                             constants.unionQName);
>         if (definitionChild.name() == constants.restrictionQName)
>         {    
>             // <restriction>
>             encodeSimpleRestriction(definitionChild, parent, name, value);
>         }
>         else if (definitionChild.name() == constants.listQName)
>         {
>             // <list>
>             encodeSimpleList(definitionChild, parent, name, value, restriction);
>         }
>         else if (definitionChild.name() == constants.listQName)
>         {
>             // <union>
>             encodeSimpleUnion(definitionChild, parent, name, value, restriction);
>         }
>     }
> If you look at this function, you see that the last else if statement is exactly the same as the previous, so you will never execute the code inside this statement, which is needed to encode union simpleTypes. To fix this, you should change it to something like this:
>  else if (definitionChild.name() == constants.unionQName)
>  {
>        // <union>
>        encodeSimpleUnion(definitionChild, parent, name, value, restriction);
>  }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira