⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webservice.htc

📁 浏览器端看到树型目录结构,用户可以完整地看到像windows资源管理器一样的效果
💻 HTC
📖 第 1 页 / 共 5 页
字号:
//
// 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 + -