XML Schema definition
Flex 2 HotFix 2 includes an updated web services library that can cause backwards compatibility issues with certain applications. The information below details the updated serialization/de-serialization maps.
Serializing Web Service Data in Flex
This TechNote provides information about data mapping between SOAP-compliant web services and ActionScript objects in Adobe Flex SDK 2.0.1 hot fix 2 and Adobe LiveCycle Data Services ES, which uses hot fix The ActionScript APIs for serializing to and from ActionScript data types in a Flex application and XML Schema and SOAP data types is greatly improved in hot fix 2, but could affect backward compatibility in existing Flex applications.
For information about SOAP, see http://www.w3.org/TR/soap/.
For information about XML Schema, see http://www.w3.org/XML/Schema.
Encoding to XML Schema and SOAP from ActionScript 3
The following tables show the mappings from ActionScript 3 data types to XML Schema and SOAP data types.
Encoding ActionScript 3 complex types to XML Schema complex types
The following table shows the encoding mappings from ActionScript 3 types to XML Schema complex types:
|
Supported ActionScript 3 types |
Notes |
Top Level Elements |
||
xsd:element |
Object |
If input value is null, encoded output is set with xsi:nil attribute. |
xsd:element |
Object |
Input value is ignored and fixed value is used instead. |
xsd:element |
Object |
If input value is null, this default value is used instead. |
Local Elements |
||
xsd:element |
Object |
Input value is ignored and omitted from encoded output. |
xsd:element |
Object |
Input value is processed as a single entity. If the associated type is a SOAP-encoded Array, then Arrays or mx.collection.IList implementations pass through intact to be special cased by the SOAP encoder for that type. |
xsd:element |
Object |
Input value should be iterable (such as an Array or mx.collections.IList implementation), although non-iterable values are wrapped before processing. Individual items are encoded as separate entities according to the definition. |
xsd:element |
Object |
If input value is undefined or null, encoded output is omitted. |
Encoding ActionScript 3 types to XML Schema built-in types
The following table shows the encoding mappings from ActionScript 3 types to XML Schema built-in types:
XML Schema type | Supported ActionScript 3 types | Notes |
xsd:anyType xsd:anySimpleType |
Object | Boolean -> xsd:boolean ByteArray -> xsd:base64Binary Date -> xsd:dateTime int -> xsd:int Number -> xsd:double String -> xsd:string uint -> xsd:unsignedInt |
xsd:base64Binary | flash.utils.ByteArray | mx.utils.Base64Encoder is used (without line wrapping). |
xsd:boolean | Boolean Number Object |
Always encoded as true or false. Number == 1 then true, otherwise false. Object.toString() == "true" or "1" then true, otherwise false. |
xsd:byte xsd:unsignedByte |
Number String |
String first converted to Number. |
xsd:date | Date Number String |
Date UTC accessor methods are used. Number used to set Date.time. String assumed to be preformatted and encoded as is. |
xsd:dateTime | Date Number String |
Date UTC accessor methods are used. Number used to set Date.time. String assumed to be pre-formatted and encoded as is. |
xsd:decimal | Number String |
Number.toString() is used. Note that Infinity, -Infinity and NaN are invalid for this type. String first converted to Number. |
xsd:double | Number String |
Limited to range of Number. String first converted to Number. |
xsd:duration | Object | Object.toString() is called. |
xsd:float | Number String |
Limited to range of Number. String first converted to Number. |
xsd:gDay | Date Number String |
Date.getUTCDate() is used. Number used directly for day. String parsed as Number for day. |
xsd:gMonth | Date Number String |
Date.getUTCMonth() is used. Number used directly for month. String parsed as Number for month. |
xsd:gMonthDay | Date String |
Date.getUTCMonth() and Date.getUTCDate() are used. String parsed for month and day portions. |
xsd:gYear | Date Number String |
Date.getUTCFullYear() is used. Number used directly for year. String parsed as Number for year. |
xsd:gYearMonth | Date String |
Date.getUTCFullYear() and Date.getUTCMonth() are used. String parsed for year and month portions. |
xsd:hexBinary | flash.utils.ByteArray | mx.utils.HexEncoder is used. |
xsd:integer ...and derivatives: xsd:negativeInteger xsd:nonNegativeInteger xsd:positiveInteger xsd:nonPositiveInteger |
Number String |
Limited to range of Number. String first converted to Number. |
xsd:int xsd:unsignedInt |
Number String |
String first converted to Number. |
xsd:long xsd:unsignedLong |
Number String |
String first converted to Number. |
xsd:short xsd:unsignedShort |
Number String |
String first converted to Number. |
xsd:string ...and derivatives: xsd:ID xsd:IDREF xsd:IDREFS xsd:ENTITY xsd:ENTITIES xsd:language xsd:Name xsd:NCName xsd:NMTOKEN xsd:NMTOKENS xsd:normalizedString xsd:token |
Object | Object.toString() is invoked. |
xsd:time | Date Number String |
Date UTC accessor methods are used. Number used to set Date.time. String assumed to be preformatted and encoded as is. |
xsi:nil | null | If the corresponding XML Schema element definition has minOccurs > 0, a null value is encoded using xsi:nil; otherwise the element is omitted entirely. |
Encoding ActionScript 3 types to SOAP-encoded types
The following table shows the mapping from ActionScript 3 types to SOAP-encoded types:
SOAPENC type |
Supported ActionScript 3 types |
Comments |
soapenc:Array |
Array |
SOAP-encoded Arrays are special cased and are only supported with RPC-encoded style web services. |
soapenc:base64 |
flash.utils.ByteArray |
Encoded in the same manner as xsd:base64Binary. |
soapenc:* |
Object |
Any other SOAP-encoded type is processed as if it were in the XSD namespace based on the localName of the type's QName. |
Decoding XML Schema and SOAP to ActionScript 3
The following tables show the mappings from ActionScript 3 data types to XML Schema and SOAP data types.
Decoding XML Schema built-in types to ActionScript 3 types
The following table shows the decoding mappings from XML Schema built-in types to ActionScript 3 types:
XML Schema type | Decoded ActionScript 3 types | Notes |
xsd:anyType xsd:anySimpleType |
String Boolean Number |
If content is empty -> xsd:string If content cast to Number and value is NaN, or if content starts with "0" or "-0", or it content ends with "E": then, if content is "true" or "false" -> xsd:boolean otherwise -> xsd:string Otherwise content is a valid Number and thus -> xsd:double. |
xsd:base64Binary | flash.utils.ByteArray | mx.utils.Base64Decoder is used. |
xsd:boolean | Boolean | If content is "true" or "1" then true, otherwise false. |
xsd:date | Date | If no timezone information is present, local time is assumed. |
xsd:dateTime | Date | If no timezone information is present, local time is assumed. |
xsd:decimal | Number | Content is created via Number(content) and is thus limited to the range of Number. |
xsd:double | Number | Content is created via Number(content) and is thus limited to the range of Number. |
xsd:duration | String | The content is returned with whitespace collapsed. |
xsd:float | Number | Content is converted through Number(content) and is thus limited to the range of Number. |
xsd:gDay | uint | Content is converted through uint(content). |
xsd:gMonth | uint | Content is converted through uint(content). |
xsd:gMonthDay | String | The content is returned with whitespace collapsed. |
xsd:gYear | uint | Content is converted through uint(content). |
xsd:gYearMonth | String | The content is returned with whitespace collapsed. |
xsd:hexBinary | flash.utils.ByteArray | mx.utils.HexDecoder is used. |
xsd:integer ...and derivatives: xsd:byte xsd:int xsd:long xsd:negativeInteger xsd:nonNegativeInteger xsd:nonPositiveInteger xsd:positiveInteger xsd:short xsd:unsignedByte xsd:unsignedInt xsd:unsignedLong xsd:unsignedShort |
Number | Content is decoded via parseInt() |
xsd:string ...and derivatives: xsd:ID xsd:IDREF xsd:IDREFS xsd:ENTITY xsd:ENTITIES xsd:language xsd:Name xsd:NCName xsd:NMTOKEN xsd:NMTOKENS xsd:normalizedString xsd:token |
String | The raw content is simply returned as a String. |
xsd:time | Date | If no timezone information is present, local time is assumed. |
xsi:nil | null |
Decoding SOAP-Encoded types to ActionScript 3 types
The following table shows the decoding mappings from SOAP-encoded types to ActionScript 3 types:
SOAPENC type |
Decoded ActionScript type |
Notes |
soapenc:Array |
Array |
SOAP encoded Arrays are special cased. If makeObjectsBindable is true the result is wrapped in an ArrayCollection, otherwise a simple Array is returned. |
soapenc:base64 |
flash.utils.ByteArray |
Decoded in the same manner as xsd:base64Binary. |
soapenc:* |
Object |
Any other SOAP encoded type is processed as if it were in the XSD namespace based on the localName of the type's QName. |
Decoding custom types
The following table shows the decoding mappings from custom data types to ActionScript 3 data types:
Custom type |
Decoded ActionScript 3 type |
Notes |
Apache Map |
Object |
SOAP representation of java.util.Map. Keys must be representable as Strings. |
Apache Rowset |
Array of Objects |
|
ColdFusion QueryBean |
Array of Objects |
If makeObjectsBindable is true, the resulting Array is wrapped in an ArrayCollection. |
XML Schema element support
This section lists XML Schema structures that are partially supported or unsupported in this release.
Partially supported XML Schema structures
The following XML Schema structures or structure attributes are only partially implemented in this release:
<choice><all><union>
Unsupported XML Schema structures
The following XML Schema structures or structure attributes are ignored and are not supported in this release:
<attribute use="required"/> <elementsubstitutionGroup="..." unique="..." key="..." keyref="..." field="..." selector="..."/> <simpleType> <restriction><minExclusive> <minInclusive> <maxExclusiv> <maxInclusive> <totalDigits> <fractionDigits> <length> <minLength> <maxLength> <enumeration> <whiteSpace> <pattern> </restriction> </simpleType> <complexTypefinal="..." block="..." mixed="..." abstract="..."/> <any processContents="..."/><annotation>