home *** CD-ROM | disk | FTP | other *** search
Text File | 2009-05-06 | 42.0 KB | 1,207 lines |
- package mx.rpc.xml
- {
- import flash.utils.ByteArray;
- import mx.utils.Base64Decoder;
- import mx.utils.Base64Encoder;
- import mx.utils.HexDecoder;
- import mx.utils.HexEncoder;
-
- public class SchemaMarshaller
- {
- public static var byteArrayAsBase64Binary:Boolean = true;
-
- public static var whitespaceReplacePattern:RegExp = /[\t\r\n]/g;
-
- public static var whitespaceCollapsePattern:RegExp = /[ \t\r\n]+/g;
-
- public static var whitespaceTrimPattern:RegExp = /^[ ]+|[ ]+$/g;
-
- public static const FLOAT_MAX_VALUE:Number = (Math.pow(2,24) - 1) * Math.pow(2,104);
-
- public static const FLOAT_MIN_VALUE:Number = Math.pow(2,-149);
-
- public static const LONG_MAX_VALUE:Number = 9223372036854776000;
-
- public static const LONG_MIN_VALUE:Number = -9223372036854776000;
-
- public static const SHORT_MAX_VALUE:Number = 32767;
-
- public static const SHORT_MIN_VALUE:Number = -32768;
-
- public static const BYTE_MAX_VALUE:Number = 127;
-
- public static const BYTE_MIN_VALUE:Number = -128;
-
- public static const ULONG_MAX_VALUE:Number = 18446744073709552000;
-
- public static const USHORT_MAX_VALUE:Number = 65535;
-
- public static const UBYTE_MAX_VALUE:Number = 255;
-
- private var unmarshallers:Object;
-
- private var constants:SchemaConstants;
-
- private var datatypes:SchemaDatatypes;
-
- private var marshallers:Object;
-
- private var _validating:Boolean;
-
- public function SchemaMarshaller(param1:SchemaConstants, param2:SchemaDatatypes)
- {
- super();
- this.constants = param1;
- this.datatypes = param2;
- registerMarshallers();
- }
-
- public static function guessSimpleType(param1:*) : *
- {
- var _loc2_:String = "string";
- if(param1 is uint)
- {
- _loc2_ = "unsignedInt";
- }
- else if(param1 is int)
- {
- _loc2_ = "int";
- }
- else if(param1 is Number)
- {
- _loc2_ = "double";
- }
- else if(param1 is Boolean)
- {
- _loc2_ = "boolean";
- }
- else if(param1 is String)
- {
- _loc2_ = "string";
- }
- else if(param1 is ByteArray)
- {
- if(byteArrayAsBase64Binary)
- {
- _loc2_ = "base64Binary";
- }
- else
- {
- _loc2_ = "hexBinary";
- }
- }
- else if(param1 is Date)
- {
- _loc2_ = "dateTime";
- }
- return _loc2_;
- }
-
- private static function whitespaceCollapse(param1:*) : String
- {
- if(param1 == null)
- {
- return null;
- }
- var _loc2_:String = param1.toString();
- _loc2_ = _loc2_.replace(whitespaceCollapsePattern," ");
- return _loc2_.replace(whitespaceTrimPattern,"");
- }
-
- private static function specialNumber(param1:Number) : String
- {
- if(param1 == Number.NEGATIVE_INFINITY)
- {
- return "-INF";
- }
- if(param1 == Number.POSITIVE_INFINITY)
- {
- return "INF";
- }
- if(isNaN(param1))
- {
- return "NaN";
- }
- return null;
- }
-
- private static function whitespaceReplace(param1:*) : String
- {
- if(param1 == null)
- {
- return null;
- }
- var _loc2_:String = param1.toString();
- return _loc2_.replace(whitespaceReplacePattern," ");
- }
-
- public function unmarshallBoolean(param1:*, param2:QName = null, param3:XML = null) : Boolean
- {
- if(param1 == null)
- {
- return false;
- }
- var _loc4_:String = whitespaceCollapse(param1).toLowerCase();
- if(_loc4_ == "true" || _loc4_ == "1")
- {
- return true;
- }
- return false;
- }
-
- public function marshallDuration(param1:*, param2:QName = null, param3:XML = null) : String
- {
- return whitespaceCollapse(param1);
- }
-
- private function registerMarshallers() : void
- {
- marshallers = {};
- marshallers[datatypes.booleanQName.localName] = marshallBoolean;
- marshallers[datatypes.anyTypeQName.localName] = marshallAny;
- marshallers[datatypes.anySimpleTypeQName.localName] = marshallAny;
- marshallers[datatypes.anyAtomicTypeQName.localName] = marshallAny;
- marshallers[datatypes.stringQName.localName] = marshallString;
- marshallers[datatypes.booleanQName.localName] = marshallBoolean;
- marshallers[datatypes.decimalQName.localName] = marshallDecimal;
- marshallers[datatypes.precisionDecimal.localName] = marshallDecimal;
- marshallers[datatypes.floatQName.localName] = marshallFloat;
- marshallers[datatypes.doubleQName.localName] = marshallDouble;
- marshallers[datatypes.durationQName.localName] = marshallDuration;
- marshallers[datatypes.dateTimeQName.localName] = marshallDatetime;
- marshallers[datatypes.timeQName.localName] = marshallDatetime;
- marshallers[datatypes.dateQName.localName] = marshallDatetime;
- marshallers[datatypes.gYearMonthQName.localName] = marshallGregorian;
- marshallers[datatypes.gYearQName.localName] = marshallGregorian;
- marshallers[datatypes.gMonthDayQName.localName] = marshallGregorian;
- marshallers[datatypes.gDayQName.localName] = marshallGregorian;
- marshallers[datatypes.gMonthQName.localName] = marshallGregorian;
- marshallers[datatypes.hexBinaryQName.localName] = marshallHexBinary;
- marshallers[datatypes.base64BinaryQName.localName] = marshallBase64Binary;
- marshallers[datatypes.anyURIQName.localName] = marshallString;
- marshallers[datatypes.QNameQName.localName] = marshallString;
- marshallers[datatypes.NOTATIONQName.localName] = marshallString;
- marshallers[datatypes.normalizedStringQName.localName] = marshallString;
- marshallers[datatypes.tokenQName.localName] = marshallString;
- marshallers[datatypes.languageQName.localName] = marshallString;
- marshallers[datatypes.NMTOKENQName.localName] = marshallString;
- marshallers[datatypes.NMTOKENSQName.localName] = marshallString;
- marshallers[datatypes.NameQName.localName] = marshallString;
- marshallers[datatypes.NCNameQName.localName] = marshallString;
- marshallers[datatypes.IDQName.localName] = marshallString;
- marshallers[datatypes.IDREF.localName] = marshallString;
- marshallers[datatypes.IDREFS.localName] = marshallString;
- marshallers[datatypes.ENTITY.localName] = marshallString;
- marshallers[datatypes.ENTITIES.localName] = marshallString;
- marshallers[datatypes.integerQName.localName] = marshallInteger;
- marshallers[datatypes.nonPositiveIntegerQName.localName] = marshallInteger;
- marshallers[datatypes.negativeIntegerQName.localName] = marshallInteger;
- marshallers[datatypes.longQName.localName] = marshallInteger;
- marshallers[datatypes.intQName.localName] = marshallInteger;
- marshallers[datatypes.shortQName.localName] = marshallInteger;
- marshallers[datatypes.byteQName.localName] = marshallInteger;
- marshallers[datatypes.nonNegativeIntegerQName.localName] = marshallInteger;
- marshallers[datatypes.unsignedLongQName.localName] = marshallInteger;
- marshallers[datatypes.unsignedIntQName.localName] = marshallInteger;
- marshallers[datatypes.unsignedShortQName.localName] = marshallInteger;
- marshallers[datatypes.unsignedByteQName.localName] = marshallInteger;
- marshallers[datatypes.positiveIntegerQName.localName] = marshallInteger;
- marshallers[datatypes.yearMonthDurationQName.localName] = marshallDatetime;
- marshallers[datatypes.dayTimeDurationQName.localName] = marshallDatetime;
- if(datatypes.timeInstantQName != null)
- {
- marshallers[datatypes.timeInstantQName.localName] = marshallDatetime;
- }
- unmarshallers = {};
- unmarshallers[datatypes.booleanQName.localName] = unmarshallBoolean;
- unmarshallers[datatypes.anyTypeQName.localName] = unmarshallAny;
- unmarshallers[datatypes.anySimpleTypeQName.localName] = unmarshallAny;
- unmarshallers[datatypes.anyAtomicTypeQName.localName] = unmarshallAny;
- unmarshallers[datatypes.stringQName.localName] = unmarshallString;
- unmarshallers[datatypes.booleanQName.localName] = unmarshallBoolean;
- unmarshallers[datatypes.decimalQName.localName] = unmarshallDecimal;
- unmarshallers[datatypes.precisionDecimal.localName] = unmarshallDecimal;
- unmarshallers[datatypes.floatQName.localName] = unmarshallFloat;
- unmarshallers[datatypes.doubleQName.localName] = unmarshallDouble;
- unmarshallers[datatypes.durationQName.localName] = unmarshallDuration;
- unmarshallers[datatypes.dateTimeQName.localName] = unmarshallDatetime;
- unmarshallers[datatypes.timeQName.localName] = unmarshallDatetime;
- unmarshallers[datatypes.dateQName.localName] = unmarshallDate;
- unmarshallers[datatypes.gYearMonthQName.localName] = unmarshallGregorian;
- unmarshallers[datatypes.gYearQName.localName] = unmarshallGregorian;
- unmarshallers[datatypes.gMonthDayQName.localName] = unmarshallGregorian;
- unmarshallers[datatypes.gDayQName.localName] = unmarshallGregorian;
- unmarshallers[datatypes.gMonthQName.localName] = unmarshallGregorian;
- unmarshallers[datatypes.hexBinaryQName.localName] = unmarshallHexBinary;
- unmarshallers[datatypes.base64BinaryQName.localName] = unmarshallBase64Binary;
- unmarshallers[datatypes.anyURIQName.localName] = unmarshallString;
- unmarshallers[datatypes.QNameQName.localName] = unmarshallString;
- unmarshallers[datatypes.NOTATIONQName.localName] = unmarshallString;
- unmarshallers[datatypes.normalizedStringQName.localName] = unmarshallString;
- unmarshallers[datatypes.tokenQName.localName] = unmarshallString;
- unmarshallers[datatypes.languageQName.localName] = unmarshallString;
- unmarshallers[datatypes.NMTOKENQName.localName] = unmarshallString;
- unmarshallers[datatypes.NMTOKENSQName.localName] = unmarshallString;
- unmarshallers[datatypes.NameQName.localName] = unmarshallString;
- unmarshallers[datatypes.NCNameQName.localName] = unmarshallString;
- unmarshallers[datatypes.IDQName.localName] = unmarshallString;
- unmarshallers[datatypes.IDREF.localName] = unmarshallString;
- unmarshallers[datatypes.IDREFS.localName] = unmarshallString;
- unmarshallers[datatypes.ENTITY.localName] = unmarshallString;
- unmarshallers[datatypes.ENTITIES.localName] = unmarshallString;
- unmarshallers[datatypes.integerQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.nonPositiveIntegerQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.negativeIntegerQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.longQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.intQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.shortQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.byteQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.nonNegativeIntegerQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.unsignedLongQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.unsignedIntQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.unsignedShortQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.unsignedByteQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.positiveIntegerQName.localName] = unmarshallInteger;
- unmarshallers[datatypes.yearMonthDurationQName.localName] = unmarshallDatetime;
- unmarshallers[datatypes.dayTimeDurationQName.localName] = unmarshallDatetime;
- if(datatypes.timeInstantQName != null)
- {
- unmarshallers[datatypes.timeInstantQName.localName] = unmarshallDatetime;
- }
- }
-
- public function unmarshallAny(param1:*, param2:QName = null, param3:XML = null) : *
- {
- var _loc4_:* = undefined;
- var _loc5_:Function = null;
- var _loc7_:String = null;
- if(param1 === undefined)
- {
- return undefined;
- }
- if(param1 == null)
- {
- return null;
- }
- var _loc6_:String = whitespaceCollapse(param1);
- if(_loc6_ == "")
- {
- _loc5_ = unmarshallers[datatypes.stringQName.localName];
- }
- else if(isNaN(Number(_loc6_)) || _loc6_.charAt(0) == "0" || _loc6_.charAt(0) == "-" && _loc6_.charAt(1) == "0" || _loc6_.charAt(_loc6_.length - 1) == "E")
- {
- _loc7_ = _loc6_.toLowerCase();
- if(_loc7_ == "true" || _loc7_ == "false")
- {
- _loc5_ = unmarshallers[datatypes.booleanQName.localName];
- }
- else
- {
- _loc5_ = unmarshallers[datatypes.stringQName.localName];
- }
- }
- else
- {
- _loc5_ = unmarshallers[datatypes.doubleQName.localName];
- }
- return _loc5_(param1,param2,param3);
- }
-
- public function marshallDouble(param1:*, param2:QName = null, param3:XML = null) : String
- {
- var _loc4_:String = null;
- var _loc5_:Number = Number(param1);
- _loc4_ = specialNumber(_loc5_);
- if(_loc4_ == null)
- {
- _loc4_ = _loc5_.toString();
- }
- return _loc4_;
- }
-
- public function unmarshallDatetime(param1:*, param2:QName = null, param3:XML = null) : Object
- {
- var _loc4_:Date = null;
- var _loc6_:String = null;
- var _loc7_:String = null;
- var _loc8_:Boolean = false;
- var _loc9_:Boolean = false;
- var _loc10_:int = 0;
- var _loc17_:int = 0;
- var _loc18_:Number = NaN;
- var _loc20_:int = 0;
- var _loc21_:int = 0;
- var _loc22_:uint = 0;
- var _loc23_:uint = 0;
- var _loc24_:uint = 0;
- var _loc25_:Date = null;
- if(param1 == null)
- {
- return null;
- }
- var _loc5_:String = whitespaceCollapse(param1);
- var _loc11_:int = int(_loc5_.indexOf("T"));
- if(_loc11_ != -1)
- {
- _loc6_ = _loc5_.substring(0,_loc11_);
- _loc7_ = _loc5_.substring(_loc11_ + 1);
- }
- else
- {
- _loc7_ = _loc5_;
- }
- var _loc12_:int = int(_loc7_.substring(0,2));
- var _loc13_:int = int(_loc7_.substring(3,5));
- var _loc14_:int = int(_loc7_.indexOf(".",6));
- var _loc15_:int = int(_loc7_.substring(6,8));
- var _loc16_:int = int(_loc7_.indexOf("Z",8));
- if(_loc16_ == -1)
- {
- _loc16_ = int(_loc7_.indexOf("+",8));
- if(_loc16_ != -1)
- {
- _loc17_ = 1;
- }
- else
- {
- _loc16_ = int(_loc7_.indexOf("-",8));
- if(_loc16_ != -1)
- {
- _loc17_ = -1;
- }
- }
- if(_loc16_ != -1)
- {
- _loc10_ = _loc16_ + 1;
- _loc20_ = int(_loc7_.substring(_loc10_,_loc10_ + 2));
- _loc10_ += 3;
- _loc21_ = int(_loc7_.substring(_loc10_,_loc10_ + 2));
- _loc18_ = _loc20_ * 3600000 + _loc21_ * 60000;
- _loc8_ = true;
- _loc9_ = true;
- }
- }
- else
- {
- _loc8_ = true;
- }
- var _loc19_:int = 0;
- if(_loc14_ != -1)
- {
- if(_loc8_)
- {
- _loc19_ = int(_loc7_.substring(_loc14_ + 1,_loc16_));
- }
- else
- {
- _loc19_ = int(_loc7_.substring(_loc14_ + 1));
- }
- }
- if(_loc6_ != null)
- {
- _loc10_ = int(_loc6_.indexOf("-",1));
- _loc22_ = uint(_loc6_.substring(0,_loc10_++));
- _loc23_ = uint(_loc6_.substring(_loc10_,_loc10_ + 2));
- _loc10_ += 3;
- _loc24_ = uint(_loc6_.substring(_loc10_,_loc10_ + 2));
- if(_loc8_)
- {
- _loc4_ = new Date(Date.UTC(_loc22_,_loc23_ - 1,_loc24_));
- }
- else
- {
- _loc4_ = new Date(_loc22_,_loc23_ - 1,_loc24_);
- }
- }
- else if(_loc8_)
- {
- _loc25_ = new Date();
- _loc4_ = new Date(Date.UTC(_loc25_.fullYearUTC,_loc25_.monthUTC,_loc25_.dateUTC));
- }
- else
- {
- _loc4_ = new Date();
- }
- if(_loc8_)
- {
- _loc4_.setUTCHours(_loc12_,_loc13_,_loc15_,_loc19_);
- if(_loc9_)
- {
- if(_loc17_ > 0)
- {
- _loc4_.time -= _loc18_;
- }
- else
- {
- _loc4_.time += _loc18_;
- }
- }
- }
- else
- {
- _loc4_.setHours(_loc12_,_loc13_,_loc15_,_loc19_);
- }
- return _loc4_;
- }
-
- public function marshall(param1:*, param2:QName = null, param3:XML = null) : *
- {
- var _loc5_:* = undefined;
- if(param2 == null)
- {
- param2 = datatypes.anyTypeQName;
- }
- var _loc4_:Function = marshallers[param2.localName];
- if(_loc4_ != null)
- {
- return _loc4_(param1,param2,param3);
- }
- throw new TypeError("Cannot marshall type \'" + param2 + "\' to simple content.");
- }
-
- public function marshallInteger(param1:*, param2:QName = null, param3:XML = null) : String
- {
- var _loc4_:String = null;
- var _loc5_:Number = NaN;
- if(param1 is Number)
- {
- _loc5_ = param1 as Number;
- }
- else
- {
- _loc5_ = Number(whitespaceCollapse(param1));
- }
- var _loc6_:Number = -Number.MAX_VALUE;
- var _loc7_:Number = Number.MAX_VALUE;
- if(param2 == datatypes.longQName)
- {
- _loc6_ = LONG_MIN_VALUE;
- _loc7_ = LONG_MAX_VALUE;
- }
- else if(param2 == datatypes.intQName)
- {
- _loc6_ = int.MIN_VALUE;
- _loc7_ = int.MAX_VALUE;
- }
- else if(param2 == datatypes.shortQName)
- {
- _loc6_ = SHORT_MIN_VALUE;
- _loc7_ = SHORT_MAX_VALUE;
- }
- else if(param2 == datatypes.byteQName)
- {
- _loc6_ = BYTE_MIN_VALUE;
- _loc7_ = BYTE_MAX_VALUE;
- }
- else if(param2 == datatypes.unsignedLongQName)
- {
- _loc6_ = 0;
- _loc7_ = ULONG_MAX_VALUE;
- }
- else if(param2 == datatypes.unsignedIntQName)
- {
- _loc6_ = 0;
- _loc7_ = uint.MAX_VALUE;
- }
- else if(param2 == datatypes.unsignedShortQName)
- {
- _loc6_ = 0;
- _loc7_ = USHORT_MAX_VALUE;
- }
- else if(param2 == datatypes.unsignedByteQName)
- {
- _loc6_ = 0;
- _loc7_ = UBYTE_MAX_VALUE;
- }
- else if(param2 == datatypes.positiveIntegerQName)
- {
- _loc6_ = 1;
- _loc7_ = Number.MAX_VALUE;
- }
- else if(param2 == datatypes.nonNegativeIntegerQName)
- {
- _loc6_ = 0;
- _loc7_ = Number.MAX_VALUE;
- }
- else if(param2 == datatypes.negativeIntegerQName)
- {
- _loc6_ = -Number.MAX_VALUE;
- _loc7_ = -1;
- }
- else if(param2 == datatypes.nonPositiveIntegerQName)
- {
- _loc6_ = -Number.MAX_VALUE;
- _loc7_ = 0;
- }
- else if(param2 == datatypes.integerQName)
- {
- _loc6_ = -Number.MAX_VALUE;
- _loc7_ = Number.MAX_VALUE;
- }
- var _loc8_:Number = Math.floor(_loc5_);
- if(_loc8_ >= _loc6_)
- {
- if(_loc8_ > _loc7_)
- {
- if(validating)
- {
- throw new RangeError("The value \'" + param1 + "\' is too large for " + param2.localName);
- }
- return whitespaceCollapse(param1);
- }
- return _loc8_.toString();
- }
- if(validating)
- {
- throw new RangeError("The value \'" + param1 + "\' is too small for " + param2.localName);
- }
- return whitespaceCollapse(param1);
- }
-
- public function get validating() : Boolean
- {
- return _validating;
- }
-
- public function marshallHexBinary(param1:*, param2:QName = null, param3:XML = null) : String
- {
- var _loc5_:String = null;
- var _loc6_:HexEncoder = null;
- var _loc4_:ByteArray = param1 as ByteArray;
- if(_loc4_ != null)
- {
- _loc6_ = new HexEncoder();
- _loc6_.encode(_loc4_);
- return _loc6_.drain();
- }
- throw new Error("Cannot marshall value as hex binary.");
- }
-
- public function unmarshallGregorian(param1:*, param2:QName = null, param3:XML = null) : *
- {
- var _loc4_:String;
- var _loc5_:* = _loc4_ = whitespaceCollapse(param1);
- if(param2 == datatypes.gYearQName)
- {
- _loc5_ = uint(_loc4_.substring(0,4));
- }
- else if(param2 == datatypes.gMonthQName)
- {
- _loc5_ = uint(_loc4_.substring(2,4));
- }
- else if(param2 == datatypes.gDayQName)
- {
- _loc5_ = uint(_loc4_.substring(3,5));
- }
- return _loc5_;
- }
-
- public function unmarshallDouble(param1:*, param2:QName = null, param3:XML = null) : Number
- {
- var _loc4_:Number = NaN;
- var _loc5_:String = null;
- if(param1 != null)
- {
- _loc5_ = whitespaceCollapse(param1);
- if(_loc5_ == "INF")
- {
- _loc4_ = Number.POSITIVE_INFINITY;
- }
- else if(_loc5_ == "-INF")
- {
- _loc4_ = Number.NEGATIVE_INFINITY;
- }
- else
- {
- _loc4_ = Number(_loc5_);
- }
- }
- return _loc4_;
- }
-
- public function unmarshallDuration(param1:*, param2:QName = null, param3:XML = null) : *
- {
- return whitespaceCollapse(param1);
- }
-
- public function unmarshallHexBinary(param1:*, param2:QName = null, param3:XML = null) : ByteArray
- {
- var _loc4_:String = null;
- var _loc5_:HexDecoder = null;
- if(param1 != null)
- {
- _loc4_ = whitespaceCollapse(param1);
- _loc5_ = new HexDecoder();
- _loc5_.decode(_loc4_);
- return _loc5_.drain();
- }
- return null;
- }
-
- public function marshallBase64Binary(param1:*, param2:QName = null, param3:XML = null) : String
- {
- var _loc5_:String = null;
- var _loc6_:Base64Encoder = null;
- var _loc4_:ByteArray = param1 as ByteArray;
- if(_loc4_ != null)
- {
- _loc6_ = new Base64Encoder();
- _loc6_.insertNewLines = false;
- _loc6_.encodeBytes(_loc4_);
- return _loc6_.drain();
- }
- return null;
- }
-
- public function unmarshallString(param1:*, param2:QName = null, param3:XML = null) : String
- {
- var _loc4_:String = null;
- if(param1 != null)
- {
- _loc4_ = param1.toString();
- }
- return _loc4_;
- }
-
- public function marshallDecimal(param1:*, param2:QName = null, param3:XML = null) : String
- {
- var _loc4_:String = null;
- var _loc5_:Number = NaN;
- var _loc6_:String = null;
- if(param1 is Number)
- {
- _loc5_ = param1 as Number;
- }
- else
- {
- _loc6_ = whitespaceCollapse(param1);
- _loc5_ = Number(_loc6_);
- }
- _loc4_ = specialNumber(_loc5_);
- if(_loc4_ != null)
- {
- if(validating)
- {
- throw new Error("Invalid decimal value \'" + param1 + "\'.");
- }
- _loc4_ = whitespaceCollapse(param1);
- }
- else
- {
- _loc4_ = _loc5_.toString();
- }
- return _loc4_;
- }
-
- public function set validating(param1:Boolean) : void
- {
- _validating = param1;
- }
-
- public function unmarshall(param1:*, param2:QName = null, param3:XML = null) : *
- {
- var _loc4_:String = null;
- var _loc6_:XML = null;
- var _loc7_:String = null;
- var _loc8_:XMLList = null;
- if(param1 is XML)
- {
- _loc6_ = param1 as XML;
- if(_loc6_.nodeKind() == "element")
- {
- _loc7_ = _loc6_.attribute(constants.nilQName).toString();
- if(_loc7_ == "true")
- {
- _loc4_ = null;
- }
- else
- {
- _loc4_ = _loc6_.text().toString();
- }
- }
- else
- {
- _loc4_ = _loc6_.toString();
- }
- }
- else if(param1 is XMLList)
- {
- _loc8_ = param1 as XMLList;
- _loc4_ = _loc8_.text().toString();
- }
- else if(param1 != null)
- {
- _loc4_ = param1.toString();
- }
- if(param2 == null)
- {
- param2 = datatypes.anyTypeQName;
- }
- var _loc5_:Function = unmarshallers[param2.localName];
- if(_loc5_ != null)
- {
- return _loc5_(_loc4_,param2,param3);
- }
- throw new TypeError("Cannot unmarshall type \'" + param2 + "\' from XML.");
- }
-
- public function marshallDatetime(param1:*, param2:QName = null, param3:XML = null) : String
- {
- var _loc4_:String = null;
- var _loc5_:Date = null;
- var _loc6_:Number = NaN;
- if(param1 is Number)
- {
- _loc5_ = new Date();
- _loc5_.time = param1 as Number;
- param1 = _loc5_;
- }
- if(param1 is Date)
- {
- _loc5_ = param1 as Date;
- _loc4_ = "";
- if(param2 == datatypes.dateTimeQName || param2 == datatypes.dateQName)
- {
- _loc4_ = _loc4_.concat(_loc5_.getUTCFullYear(),"-");
- _loc6_ = _loc5_.getUTCMonth() + 1;
- if(_loc6_ < 10)
- {
- _loc4_ = _loc4_.concat("0");
- }
- _loc4_ = _loc4_.concat(_loc6_,"-");
- _loc6_ = Number(_loc5_.getUTCDate());
- if(_loc6_ < 10)
- {
- _loc4_ = _loc4_.concat("0");
- }
- _loc4_ = _loc4_.concat(_loc6_);
- }
- if(param2 == datatypes.dateTimeQName)
- {
- _loc4_ = _loc4_.concat("T");
- }
- if(param2 == datatypes.dateTimeQName || param2 == datatypes.timeQName)
- {
- _loc6_ = Number(_loc5_.getUTCHours());
- if(_loc6_ < 10)
- {
- _loc4_ = _loc4_.concat("0");
- }
- _loc4_ = _loc4_.concat(_loc6_,":");
- _loc6_ = Number(_loc5_.getUTCMinutes());
- if(_loc6_ < 10)
- {
- _loc4_ = _loc4_.concat("0");
- }
- _loc4_ = _loc4_.concat(_loc6_,":");
- _loc6_ = Number(_loc5_.getUTCSeconds());
- if(_loc6_ < 10)
- {
- _loc4_ = _loc4_.concat("0");
- }
- _loc4_ = _loc4_.concat(_loc6_);
- _loc6_ = Number(_loc5_.getUTCMilliseconds());
- if(_loc6_ > 0)
- {
- _loc4_ = _loc4_.concat(".");
- if(_loc6_ < 10)
- {
- _loc4_ = _loc4_.concat("00");
- }
- else if(_loc6_ < 100)
- {
- _loc4_ = _loc4_.concat("0");
- }
- _loc4_ = _loc4_.concat(_loc6_);
- }
- }
- _loc4_ = _loc4_.concat("Z");
- }
- else if(param1 is String)
- {
- _loc4_ = param1 as String;
- }
- return _loc4_;
- }
-
- public function unmarshallDecimal(param1:*, param2:QName = null, param3:XML = null) : Number
- {
- return unmarshallDouble(param1,param2);
- }
-
- public function marshallFloat(param1:*, param2:QName = null, param3:XML = null) : String
- {
- var _loc4_:String = null;
- var _loc5_:Number = NaN;
- var _loc6_:String = null;
- if(param1 is Number)
- {
- _loc5_ = param1 as Number;
- }
- else
- {
- _loc6_ = whitespaceCollapse(param1);
- _loc5_ = Number(_loc6_);
- }
- _loc4_ = specialNumber(_loc5_);
- if(_loc4_ == null)
- {
- if(validating)
- {
- if(_loc5_ > 0)
- {
- if(_loc5_ > FLOAT_MAX_VALUE)
- {
- throw new RangeError("The value \'" + param1 + "\' is too large for a single-precision floating point value.");
- }
- if(_loc5_ < FLOAT_MIN_VALUE)
- {
- throw new RangeError("The value \'" + param1 + "\' is too small for a single-precision floating point value.");
- }
- }
- else
- {
- if(-_loc5_ > FLOAT_MAX_VALUE)
- {
- throw new RangeError("The absolute value of \'" + param1 + "\' is too large for a single-precision floating point value.");
- }
- if(-_loc5_ < FLOAT_MIN_VALUE)
- {
- throw new RangeError("The absolute value of \'" + param1 + "\' is too small for a single-precision floating point value.");
- }
- }
- }
- _loc4_ = _loc5_.toString();
- }
- return _loc4_;
- }
-
- public function unmarshallInteger(param1:*, param2:QName = null, param3:XML = null) : Number
- {
- return parseInt(param1);
- }
-
- public function unmarshallDate(param1:*, param2:QName = null, param3:XML = null) : Object
- {
- var _loc4_:Date = null;
- var _loc5_:int = 0;
- var _loc7_:uint = 0;
- var _loc8_:uint = 0;
- var _loc9_:uint = 0;
- var _loc10_:String = null;
- var _loc11_:int = 0;
- var _loc12_:int = 0;
- var _loc13_:Number = NaN;
- if(param1 == null)
- {
- return null;
- }
- var _loc6_:String = whitespaceCollapse(param1);
- if(_loc6_ != null)
- {
- _loc5_ = int(_loc6_.indexOf("-",1));
- _loc7_ = uint(_loc6_.substring(0,_loc5_++));
- _loc8_ = uint(_loc6_.substring(_loc5_,_loc5_ + 2));
- _loc5_ += 3;
- _loc9_ = uint(_loc6_.substring(_loc5_,_loc5_ + 2));
- _loc5_ += 2;
- if(_loc6_.charAt(_loc5_) == "Z")
- {
- _loc4_ = new Date(Date.UTC(_loc7_,_loc8_ - 1,_loc9_));
- }
- else if(_loc6_.length > 10)
- {
- _loc4_ = new Date(Date.UTC(_loc7_,_loc8_ - 1,_loc9_));
- _loc10_ = _loc6_.charAt(_loc5_++);
- _loc11_ = int(_loc6_.substring(_loc5_,_loc5_ + 2));
- _loc5_ += 3;
- _loc12_ = int(_loc6_.substring(_loc5_,_loc5_ + 2));
- _loc13_ = _loc11_ * 3600000 + _loc12_ * 60000;
- if(_loc10_ == "+")
- {
- _loc4_.time -= _loc13_;
- }
- else
- {
- _loc4_.time += _loc13_;
- }
- }
- else
- {
- _loc4_ = new Date(_loc7_,_loc8_ - 1,_loc9_);
- }
- }
- return _loc4_;
- }
-
- public function unmarshallBase64Binary(param1:*, param2:QName = null, param3:XML = null) : ByteArray
- {
- if(param1 == null)
- {
- return null;
- }
- var _loc4_:String = whitespaceCollapse(param1);
- var _loc5_:Base64Decoder = new Base64Decoder();
- _loc5_.decode(_loc4_);
- return _loc5_.drain();
- }
-
- public function marshallGregorian(param1:*, param2:QName = null, param3:XML = null) : String
- {
- var _loc4_:Date = null;
- var _loc5_:Number = NaN;
- var _loc7_:int = 0;
- var _loc8_:String = null;
- var _loc9_:String = null;
- var _loc10_:String = null;
- if(param1 is Date)
- {
- _loc4_ = param1 as Date;
- }
- else if(param1 is Number)
- {
- _loc5_ = param1 as Number;
- }
- else
- {
- param1 = whitespaceCollapse(param1);
- }
- var _loc6_:String = "";
- if(param2 == datatypes.gYearMonthQName || param2 == datatypes.gYearQName)
- {
- if(param1 is Date)
- {
- _loc5_ = Number(_loc4_.getUTCFullYear());
- }
- else if(param1 is String)
- {
- _loc8_ = param1 as String;
- _loc7_ = int(_loc8_.indexOf("-",1));
- if(_loc7_ > 0)
- {
- _loc8_ = _loc8_.substring(0,_loc7_);
- }
- _loc5_ = parseInt(_loc8_);
- }
- if(isNaN(_loc5_) || _loc5_ == 0)
- {
- if(validating)
- {
- throw new Error("Invalid year supplied for type " + param2.localName + " in value " + param1);
- }
- return whitespaceCollapse(param1);
- }
- _loc8_ = _loc5_.toFixed(0);
- if(_loc8_.indexOf("-") == 0)
- {
- while(_loc8_.length < 5)
- {
- _loc8_ = _loc8_.substring(0,1) + "0" + _loc8_.substring(1);
- }
- }
- else
- {
- while(_loc8_.length < 4)
- {
- _loc8_ = "0" + _loc8_;
- }
- }
- _loc6_ = _loc6_.concat(_loc8_);
- if(param2 != datatypes.gYearQName)
- {
- _loc6_ = _loc6_.concat("-");
- }
- }
- if(param2 == datatypes.gYearMonthQName || param2 == datatypes.gMonthDayQName || param2 == datatypes.gMonthQName)
- {
- if(param2 != datatypes.gYearMonthQName)
- {
- _loc6_ = _loc6_.concat("--");
- }
- if(param1 is Date)
- {
- _loc5_ = _loc4_.getUTCMonth() + 1;
- }
- else
- {
- _loc9_ = param1.toString();
- if(param2 == datatypes.gMonthDayQName)
- {
- _loc7_ = int(_loc9_.indexOf("--",0));
- if(_loc7_ != 0)
- {
- if(validating)
- {
- throw new Error("Invalid month supplied for " + param2.localName + " in value " + param1 + ". The format must be \'--MM-DD\'.");
- }
- return whitespaceCollapse(param1);
- }
- _loc9_ = _loc9_.substring(2,4);
- }
- else if(param2 == datatypes.gYearMonthQName)
- {
- _loc7_ = int(_loc9_.indexOf("-",1));
- if(_loc7_ <= 0)
- {
- if(validating)
- {
- throw new Error("Invalid month supplied for " + param2.localName + " in value " + param1 + ". The format must be \'--CCYY-MM\'.");
- }
- return whitespaceCollapse(param1);
- }
- _loc9_ = _loc9_.substring(_loc7_ + 1,_loc7_ + 3);
- }
- else
- {
- _loc7_ = int(_loc9_.indexOf("--",0));
- if(_loc7_ > 0)
- {
- _loc9_ = _loc9_.substring(2,4);
- }
- }
- _loc5_ = parseInt(_loc9_);
- }
- if(isNaN(_loc5_) || _loc5_ <= 0 || _loc5_ > 12)
- {
- if(validating)
- {
- throw new Error("Invalid month supplied for type " + param2.localName + " in value " + param1);
- }
- return whitespaceCollapse(param1);
- }
- _loc5_ = int(_loc5_);
- if(_loc5_ < 10)
- {
- _loc6_ = _loc6_.concat("0");
- }
- _loc6_ = _loc6_.concat(_loc5_);
- if(param2 == datatypes.gMonthDayQName)
- {
- _loc6_ = _loc6_.concat("-");
- }
- }
- if(param2 == datatypes.gMonthDayQName || param2 == datatypes.gDayQName)
- {
- if(param2 == datatypes.gDayQName)
- {
- _loc6_ = _loc6_.concat("---");
- }
- if(param1 is Date)
- {
- _loc5_ = Number(_loc4_.getUTCDate());
- }
- else if(param1 is String)
- {
- _loc10_ = param1 as String;
- if(param2 == datatypes.gMonthDayQName)
- {
- _loc7_ = int(_loc10_.indexOf("--",0));
- if(_loc7_ != 0)
- {
- if(validating)
- {
- throw new Error("Invalid day supplied for gMonthDay in value " + param1 + ". The format must be \'--MM-DD\'.");
- }
- return whitespaceCollapse(param1);
- }
- _loc10_ = _loc10_.substring(5,7);
- }
- else
- {
- _loc7_ = int(_loc10_.indexOf("---",0));
- if(_loc7_ == 0)
- {
- _loc10_ = _loc10_.substring(3,5);
- }
- }
- _loc5_ = parseInt(_loc10_);
- }
- if(isNaN(_loc5_) || _loc5_ <= 0 || _loc5_ > 31)
- {
- if(validating)
- {
- throw new Error("Invalid day supplied for type " + param2.localName + " in value " + param1);
- }
- return whitespaceCollapse(param1);
- }
- _loc5_ = int(_loc5_);
- if(_loc5_ < 10)
- {
- _loc6_ = _loc6_.concat("0");
- }
- _loc6_ = _loc6_.concat(_loc5_);
- }
- return _loc6_;
- }
-
- public function marshallBoolean(param1:*, param2:QName = null, param3:XML = null) : String
- {
- var _loc4_:String = null;
- var _loc5_:String = null;
- if(param1 != null)
- {
- if(param1 is Boolean)
- {
- _loc4_ = param1 as Boolean ? "true" : "false";
- }
- else if(param1 is Number)
- {
- _loc4_ = param1 == 1 ? "true" : "false";
- }
- else if(param1 is Object)
- {
- _loc5_ = Object(param1).toString();
- if(!(_loc5_ == "true" || _loc5_ == "false" || _loc5_ == "1" || _loc5_ == "0"))
- {
- throw new Error("String \'" + param1 + "\' is not a Boolean.");
- }
- _loc4_ = _loc5_;
- }
- }
- return _loc4_;
- }
-
- public function unmarshallFloat(param1:*, param2:QName = null, param3:XML = null) : Number
- {
- return unmarshallDouble(param1,param2,param3);
- }
-
- public function marshallAny(param1:*, param2:QName = null, param3:XML = null) : *
- {
- if(param1 === undefined)
- {
- return undefined;
- }
- if(param1 == null)
- {
- return null;
- }
- var _loc4_:String = guessSimpleType(param1);
- if(param2 != null)
- {
- param2 = new QName(param2.uri,_loc4_);
- }
- else
- {
- param2 = new QName(constants.xsdURI,_loc4_);
- }
- var _loc5_:Function = marshallers[param2.localName];
- if(_loc5_ != null)
- {
- return _loc5_(param1,param2);
- }
- throw new TypeError("Cannot marshall type \'" + param2 + "\' to simple content.");
- }
-
- public function marshallString(param1:*, param2:QName = null, param3:XML = null) : String
- {
- if(param1 != null && param1 is Object)
- {
- return Object(param1).toString();
- }
- return null;
- }
- }
- }
-
-