📄 webservice.htc
字号:
//
// get array size, taking care of associative arrays
//
function getArySize(a)
{
var l = 0;
for (var x in a)
l++;
return l;
}
//
// get first item of an array
//
function get1stAryItem(a)
{
for (var x in a)
return a[x];
return null;
}
function getAryItemFromIndex(a, index)
{
var i = 0;
for (var x in a)
{
if (i == index)
return a[x];
i++;
}
return null;
}
//
// retrieve the type schema
//
function getSchema(os, t)
{
if (isPrimitive(os, t))
return null;
if (t.ns==null)
return get1stAryItem(os.schemas);
var nsUrl = os.ns[t.ns];
var oschm = os.schemas[nsUrl];
if (oschm != null || t.ns.length == 0)
return oschm;
for (var x in os.schemas)
if (x.indexOf(nsUrl) == 0 && os.schemas[x].types[t.type] != null)
return os.schemas[x];
return null;
}
//
// get array size info from either argument type or argument itself
// at[in] : array type
// av[in] : array value
// return : array size, or string like "2, 4, 5" for multi-dimensional array
//
function getArySizeInfo(at, av)
{
var as = at.sizeArray;
var k = 1;
k = (as == null) ? 1 : as.length;
var arr = av;
if (typeof arr == 'unknown')
arr = vbArrayToJs(arr, k);
var sArr = getArySize(arr);
if (as == null)
return sArr;
sArr = "";
for (var j = 0;;)
{
var l2 = getArySize(arr);
if (as[j] == null)
sArr+=l2;
else
sArr+=Math.min(as[j], l2);
j = j + 1;
if (j == as.length)
break;
sArr += ",";
if (l2 == 0)
return null;
arr = get1stAryItem(arr);
}
return sArr;
}
//
// serialize attributes
//
function encodeAttrib(oS, v, t)
{
if (t.type == null)
return "";
return " " + t.name + '="' + encodePrimitive(oS, t.type, v) + '"';
}
//
// serialize a message part
// oS[in] : service
// oM[in] : method
// a[in] : part definition
// v[in] : part variable to be serialized
//
function serPart(oS, oM, a, v)
{
var sz = "";
var szt = '';
if (a.type!=null && isPrimitive(oS, a))
szt = ' xsi:type="xsd:' + a.type + '"';
var oschm = getSchema(oS, a);
var aryItem = a.fArray ? a : getAryElem(oS, oschm, a);
var soapencns = oS.qlt["soapenc"];
if (aryItem != null)
{
var sArr = getArySizeInfo(aryItem, v);
//
// fixup namespace for illformed wsdl files
// that use parent namespace (phalanx)
//
var oschm = getSchema(oS, aryItem);
if (oschm != null)
aryItem.ns = oS.nsalias[oschm.uri];
var ts = (isPrimitive(oS, aryItem) || aryItem.ns == "")
? "xsd:" : (aryItem.ns + ":");
szt = ' xsi:type="' + soapencns + ':Array" '
+ soapencns + ':arrayType="'+ts+aryItem.type+'['+sArr+']"';
}
else
szt = ' xsi:type="' + (a.ns == '' ? '' : (a.ns + ':'))+a.type+'"';
et = (a.elem == null || oschm == null) ? a : oschm.elems[a.elem];
var ar = encodeVar(oS, v, et);
if (oM.fLiteral)
{
if (a.elem == null)
{
if (oM.fWrapped || oM.fRpc)
{
sz += '\n<' + a.name + ar[1] + '>' + ar[0];
sz += '</' + a.name + '>';
}
else
sz += ar[0];
}
else
{
var ns=' xmlns="'+(a.ns==null?oS.targetns:oS.ns[a.ns])+'"';
sz += '\n<' + a.elem + ns + ar[1] + '>' + ar[0];
sz += '</' + a.elem + '>';
}
}
else
{
// this shouldn't happen according to WSDL spec
// however, some wsdl files still doesn't have a type
if (a.type == null)
a.type = a.elem;
var stn = 'mswsb:' + (oM.fRpc ? et.name : et.type);
stn = aryItem == null ? stn : (soapencns + ":Array");
n = "";
if (oM.fWrapped || oM.fRpc && oM.opname != null)
stn = a.name;
else if (aryItem == null)
n =' xmlns:mswsb="'+(a.ns==null?oS.targetns:oS.ns[a.ns])+'"';
sz += '\n<' + stn + n + szt + ar[1] + '>' + ar[0];
sz += '</' + stn + '>';
}
return sz;
}
//
// get part wrap
//
function getWrap(aWrap, oS, oM, argv)
{
if (!oM.fRpc && !oM.fWrapped)
return argv;
var mn = oM.opname;
var pns = oM.fLiteral ? "" : "mswsb:";
var nsq1 = oM.ns;
if (!oM.fRpc)
{
var firstArg = get1stAryItem(argv);
var oschm = getSchema(oS, firstArg);
if (firstArg.type != null)
{
argv = oschm.types[firstArg.type];
mn = firstArg.type;
}
else
{
var e = oschm.elems[firstArg.elem];
oschm = getSchema(oS, e);
mn = null;
if (oschm != null)
{
var et = oschm.types[e.type];
if (et != null)
argv = et;
mn = firstArg.elem;
}
}
nsq1 = oS.ns[firstArg.ns];
}
if (mn == null)
return argv;
var ns1 = nsq1 == null ? oS.targetns : nsq1;
var nsd1 = ' xmlns' + (oM.fLiteral ? '' : ':mswsb') + '="' + ns1 + '"';
aWrap[0] = '\n<'+ pns + mn + nsd1 + (oM.fLiteral?'':' xmlns=""');
aWrap[1] = "</" + pns + mn + ">";
return argv;
}
//
// encode arguments for method oM
// oM[in] : message object
// service[in] : service url
// args[in] : argument array passed by caller, may contain other call info
// argIdx[in] : first index of arguments
// fParam : arguments passed in callOptions
//
function encodeArgs(oS, oM, omargs, args, j, fParam)
{
var l = fParam ? 0 : args.length;
var sz = '';
var sa = '';
var aWrap = new Array("", "");
omargs = getWrap(aWrap, oS, oM, omargs);
var i = j;
for (var pn in omargs)
{
var a = omargs[pn];
if (a.elem == null && a.type == null)
return null;
if (!fParam && i >= l)
break;
var argi = fParam ? args[pn] : args[i++];
if (argi == null)
continue;
if (a.fAttrib)
sa += encodeAttrib(oS, argi, a);
else
sz += serPart(oS, oM, a, argi);
}
return aWrap[0] + sa + (aWrap[0].length > 0 ? ">" : "") + sz + aWrap[1];
}
function returnResult(oCall, r)
{
hideProgress();
if (oCall.co.async == false)
{
return r;
}
if (oCall.cb == null)
{
var evt = createEventObject();
evt.result = r;
try { eventResult.fire(evt); } catch (e) {};
}
else
{
try { oCall.cb(r); } catch (e) {};
}
}
function decTZ(s)
{
var a = s.split(':');
if (a.length == 0)
return 0;
var h = parseInt(a[0],10);
return (-h)*60 + (a.length > 1 ? ((h > 0 ? -1:1) * parseInt(a[1],10)) : 0);
}
function applyTZ(d, tzo)
{
d.setTime(d.getTime() + (tzo - d.getTimezoneOffset()) * 60000);
}
function decDate(d, s)
{
var a = s.split('-');
if (a.length < 3)
return;
d.setYear(a[0]);
d.setMonth(parseInt(a[1], 10) - 1);
d.setDate(a[2]);
var tzo = d.getTimezoneOffset();
var tzi = s.indexOf('+');
if (a.length >= 4)
tzo = -decTZ(a[3]);
else if (tzi > 0)
tzo = decTZ(s.substring(tzi, s.length));
else
return;
applyTZ(d, tzo);
}
function decTime(d, s)
{
var tzi = s.indexOf('+');
if (tzi < 0)
tzi = s.indexOf('-');
var a = s.split(':');
if (a.length < 3)
return;
d.setHours(a[0]);
d.setMinutes(a[1]);
d.setSeconds(parseInt(a[2], 10));
var msec = a[2].split('.')[1];
if (msec != null && d.setMilliseconds != null)
d.setMilliseconds(parseInt(msec.substring(0, 3, 10)));
applyTZ(d, tzi < 0 ? 0 : decTZ(s.substring(tzi, s.length)));
}
function decodePrimitive(os, st, o)
{
var r = o.hasChildNodes() ? o.firstChild.nodeValue : o.nodeValue;
if (r == null)
{
if (_st[st] == null || _st[st] == 1)
return '';
return null;
}
switch(_st[st])
{
case 0:
try
{
r = eval(r);
}
catch(e)
{
}
break;
case 1 :
break;
case 3 :
case 4:
var aXmlDT = r.split("T");
r = new Date();
if (aXmlDT.length > 0)
{
decDate(r, aXmlDT[0]);
if (aXmlDT.length > 1)
decTime(r, aXmlDT[1]);
}
break;
case 5:
var s = r;
r = new Date();
decTime(r, s);
break;
case 6 :
r = decb64(r, false); break;
case 7 :
r = decb64(r, true); break;
default:
break;
}
return r;
}
//
// parse the xml object for array info
// returns : null if o isn't an array
// array size info (2, 3, 4) means 3D array of size 2, 3, 4
// oS[in] : service
// o[in] : xml object
//
function getAryInfo(oS,o)
{
var oAt=o.attributes.getQualifiedItem("arrayType",oS.ns[oS.qlt["soapenc"]]);
if (oAt == null)
return null;
var at = new Array();
var asa= oAt.value.split("[");
if (asa.length > 1)
parseArrayType(at, asa[1]);
else
at[0] = o.childNodes.length;
return at;
}
//
// decode array of elements (transform 1D flat xml array to mD script array
// c[in,out]: xml 1-D flat array index
// a[out] : scripting array
// s[in] : array size info (2, 3, 4) means 3D array of size 2, 3, 4
// d[in] : current dimension
// o[in] : xml object array to be parsed
// os[in] : service
// osc[in] : schema
// t[in] : type
// e[in] : element
// aNodes[in]:ref nodes
// fSimple : simple type?
//
function decodeArray(c, a, s, d, o, os, osc, t, e, aNodes, fSimple)
{
for (var i = 0; i < s[d-1]; i++)
{
if (d == s.length)
a[i] = decodeAryItem(os, osc, t, e, o[c++], aNodes, fSimple);
else
{
a[i] = new Array();
c = decodeArray(c, a[i], s, d+1, o, os, osc, t, e, aNodes, fSimple);
}
}
return c;
}
function decodeAryItem(os, osc, t, e, v, aNodes, fSimple)
{
if (fSimple)
return decodePrimitive(os, e.type, v);
if (e.type == "anyType")
return v;
var sr = getAttrib(v, "href");
if (sr != null && sr.charAt(0) == '#')
v = aNodes[sr.substring(1, sr.length)];
var e1 = getAryElem(os, osc, e);
if (e1 == e || e1 == null)
return decodeType(os, t, v, aNodes);
else
return decodeElem(os, e1, v, aNodes);
}
function getAryElem(os, oschm, e)
{
if (oschm == null)
return null;
var e1 = get1stAryItem(oschm.types[e.type]);
return (e1 != null && e1.fArray) ? e1 : null;
}
//
// decode xml element
// os[in] : service
// o[in] : xml node to be decoded
// e[in] : schema element
// aNodes : REFed nodes
// return : decoded object
//
function decodeElem(os, e, o, aNodes)
{
var oschm = getSchema(os, e);
if (isSimpleType(os, oschm, e) && !e.fArray)
{
var stype = oschm == null ? e.type : oschm.sTypes[e.type];
return decodePrimitive(os, stype, o);
}
var ae = e.fArray ? e : getAryElem(os, oschm, e)
if (ae != null)
{
var ai = getAryInfo(os, o);
var o2 = o.childNodes;
if (ai == null)
{
ai = ae.sizeArray;
if (ai == null)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -