Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.soap.encode.simpleType
on simpleType (adrmsg, val, adrparent, name, fladdtype=true, flEntityEncodeHighAscii=false) { <<Changes: <<03/27/01; 5:44:21 PM by JES <<Serialize doubles as type "xsd:float", instead of "xsd:double", since float means 32-bit floating point number, and double means 64-bit floating point number. In Frontier, a doubleType is 32-bits. <<04/01/01; 3:30:28 AM by JES <<Encode booleans as 1/0, instead of true/false. <<04/03/01; 7:40:52 PM by JES <<New optional parameter, flEntityEncodeHighAscii, specifies whether to entity-encode high-ascii characters when encoding strings. Default is false. <<04/11/01; 3:25:28 PM by JES <<Encode floats by calling soap.encode.float. <<04/27/01; 6:57:55 PM by JES <<Specify SOAP-ENC:base64 for base64-encoded binary types. local (type); case typeof (val) { binaryType { if getBinaryType (val) == unknownType and val == nil { return (true)}; case val { //special IEEE floating point values, INF, -INF and NaN soap.constants.floatINF; soap.constants.floatNegativeINF; soap.constants.floatNaN { type = soap.constants.nsSchemaDataPrefix + ":float"; val = soap.encode.float (val)}} else { type = soap.constants.nsEncodingPrefix + ":base64"; val = base64.encode (val, 0)}}; booleanType { type = soap.constants.nsSchemaDataPrefix + ":boolean"; val = number (val)}; //04/01/2001 JES: 0 or 1 charType { type = soap.constants.nsSchemaDataPrefix + ":byte"}; dateType { local (s, day, month, year, hour, minute, second); date.get (val, @day, @month, @year, @hour, @minute, @second); s = string (year) + "-"; s = s + string.padWithZeros (month, 2) + "-"; s = s + string.padWithZeros (day, 2) + "T"; s = s + string.padWithZeros (hour, 2) + ":"; s = s + string.padWithZeros (minute, 2) + ":"; s = s + string.padWithZeros (second, 2); local (tzsign, tzoffset = date.getCurrentTimeZone () / 60); if tzoffset < 0 { tzoffset = -1 * tzoffset; tzsign = "-"} else { tzsign = "+"}; local (tzhours = tzoffset / 60); local (tzminutes = tzoffset % 60); val = s + tzsign + string.padWithZeros (tzhours, 2) + ":" + string.padWithZeros (tzminutes, 2); type = soap.constants.nsSchemaDataPrefix + ":timeInstant"}; doubleType { type = soap.constants.nsSchemaDataPrefix + ":float"; val = soap.encode.float (val)}; longType; intType { type = soap.constants.nsSchemaDataPrefix + ":int"}; shortType { type = soap.constants.nsSchemaDataPrefix + ":short"}; stringType { type = soap.constants.nsSchemaDataPrefix + ":" + "string"; if flEntityEncodeHighAscii { val = soap.xmlutils.encodeWithAmpersands (val); val = xml.entityEncode (val)} else { val = soap.xmlutils.encodeWithAmpersands (val)}}; unknownType { //encode as nil value local (adrelement = soap.xmlutils.addElement (adrparent, name)); soap.xmlutils.addAttributeValue (adrelement, "xsi:null", "1"); return (true)}} else { scripterror ("Can't encode \"" + name + "\" because the encoding of type '" + string.typeToString (typeof (val)) + "' is not supported.")}; local (adrelement = soap.xmlutils.addElement (adrparent, name)); if fladdtype { soap.xmlutils.addAttributeValue (adrelement, soap.constants.nsSchemaPrefix + ":type", type)}; soap.xmlutils.setCharacterData (adrelement, string (val)); return (true)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.