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/05/12 05:55:15 UTC

[jira] [Commented] (FLEX-27476) XMLEncoder.isSimpleValue() method fails to detect decoded simpleContent objects correctly

    [ 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