[
https://issues.apache.org/jira/browse/FLEX-27476?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13655458#comment-13655458
]
Justin Mclean commented on FLEX-27476:
--------------------------------------
Still an issue in Apache Flex 4.9.1
> XMLEncoder.isSimpleValue() method fails to detect decoded simpleContent
> objects correctly
> -----------------------------------------------------------------------------------------
>
> Key: FLEX-27476
> URL: https://issues.apache.org/jira/browse/FLEX-27476
> Project: Apache Flex
> Issue Type: Bug
> Components: RPC: General
> Affects Versions: Adobe Flex SDK 4.1 (Release)
> Environment: Affected OS(s): All OS Platforms
> Affected OS(s): All OS Platforms
> Language Found: English
> Reporter: Adobe JIRA
> Labels: easyfix, easytest
>
> Steps to reproduce:
> 1. Decode and then re-encode an XML file containing an element with
> <xs:simpleContent/> using XMLDecoder and XMLEncoder.
> The re-encoded XML should match the original source XML.
> (See code example at bottom of description)
>
> Actual Results:
> <simple xsi:nil="true" id="foo"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
>
> Expected Results:
> <simple id="foo"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">bar</simple>
>
>
> Workaround (if any):
>
> XMLDecoder uses mx.rpc.xml.SimpleContent internally to decode simple content
> into a dynamic object that behaves like a String (by overriding the valueOf
> and toString methods)
> XMLEncoder.isSimpleValue incorrectly evaluates these objects to false. This
> can be fixed by checking the type against value.valueOf() rather than just
> the value
> public function isSimpleValue(value:*):Boolean
> {
> value:* = value.valueOf();//this is change required
> if (value is String || value is Number || value is Boolean
> || value is Date || value is int || value is uint
> || value is ByteArray)
> {
> return true;
> }
> return false;
> }
> Example Source:
> <?xml version="1.0" encoding="utf-8"?>
> <s:Application
> xmlns:fx="http://ns.adobe.com/mxml/2009"
> xmlns:mx="library://ns.adobe.com/flex/mx"
> xmlns:s="library://ns.adobe.com/flex/spark"
> creationComplete="application1_creationCompleteHandler(event)"
> minWidth="955" minHeight="600">
> <fx:Script>
> <![CDATA[
> import mx.events.FlexEvent;
> import mx.rpc.xml.Schema;
> import mx.rpc.xml.SchemaManager;
> import mx.rpc.xml.XMLDecoder;
> import mx.rpc.xml.XMLEncoder;
> protected function
> application1_creationCompleteHandler(event:FlexEvent):void
> {
> var schema:Schema = new Schema(xsd);
> var manager:SchemaManager = new SchemaManager();
> manager.addSchema(schema);
> var decoder:XMLDecoder = new XMLDecoder();
> decoder.schemaManager = manager;
> var qName:QName = new QName("", "simple");
> var data:Object = decoder.decode(xml, qName);
> var encoder:XMLEncoder = new XMLEncoder();
> encoder.schemaManager = manager;
> var newXML:XML = encoder.encode(data, qName)[0];
> trace(newXML.toXMLString());
> }
> ]]
> >
> </fx:Script>
> <fx:Declarations>
> <fx:XML xmlns="" id="xsd">
> <xs:schema
>
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> elementFormDefault="qualified">
> <xs:element name="simple">
> <xs:complexType>
> <xs:simpleContent>
> <xs:extension
> base="xs:string">
> <xs:attribute
> name="id" type="xs:string" />
> </xs:extension>
> </xs:simpleContent>
> </xs:complexType>
> </xs:element>
> </xs:schema>
> </fx:XML>
> <fx:XML xmlns="" id="xml">
> <simple id="foo">bar</simple>
> </fx:XML>
> </fx:Declarations>
> </s:Application>
>
--
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