home *** CD-ROM | disk | FTP | other *** search
/ Internet Magazine 2002 December / INTERNET97.ISO / pc / software / windows / building / xmlspy / setup44.exe / Data1.cab / webservice.htc < prev    next >
Encoding:
Text File  |  2002-02-05  |  50.4 KB  |  2,294 lines

  1. <!--
  2. Copyright (c) 2000-2001 Microsoft Corp. All rights reserved.
  3. Version 1.0.1.1120
  4. -->
  5.  
  6. <PUBLIC:COMPONENT  ID=_webservice  Name="WEBSERVICE" >
  7. <PUBLIC:PROPERTY NAME="version"
  8. VALUE="Microsoft WebService Behavior 1.0.1.1120" />
  9. <PUBLIC:PROPERTY NAME="showProgress" VALUE=false />
  10. <PUBLIC:PROPERTY NAME="helperUtils" />
  11. <PUBLIC:METHOD   NAME="useService"/>
  12. <PUBLIC:METHOD   NAME="createCallOptions"/>
  13. <PUBLIC:METHOD   NAME="createUseOptions"/>
  14. <PUBLIC:METHOD   NAME="invokeNext"/>
  15. <PUBLIC:EVENT    ID="eventResult"  NAME="onresult"/>
  16. <PUBLIC:EVENT    ID="eventService" NAME="onserviceavailable"/>
  17. </PUBLIC:COMPONENT>
  18. <SCRIPT LANGUAGE="JSCRIPT">
  19. var _nextId  = 0;
  20. var _nextNsQ = 0;
  21. var _sdl = new Array();
  22. var _mProg = null;
  23. var _fVBon = false;
  24. var _aXmlHttp = new Array();
  25. var xsi99 = "http://www.w3.org/1999/XMLSchema-instance";
  26. var xsi01 = "http://www.w3.org/2001/XMLSchema-instance";
  27. var xsd01 = "http://www.w3.org/2001/XMLSchema";
  28. var xsd99 = "http://www.w3.org/1999/XMLSchema";
  29. var _st = {
  30. "negativeInteger" : 0,
  31. "unsignedShort"   : 0,
  32. "unsignedByte"    : 0,
  33. "unsignedLong"    : 0,
  34. "unsignedInt"     : 0,
  35. "decimal"         : 0,
  36. "boolean"         : 0,
  37. "integer"         : 0,
  38. "double"          : 0,
  39. "float"           : 0,
  40. "short"           : 0,
  41. "byte"            : 0,
  42. "long"            : 0,
  43. "int"             : 0,
  44. "QName"           : 1,
  45. "string"          : 1,
  46. "normalizedString": 2,
  47. "timeInstant"     : 3,
  48. "dateTime"        : 3,
  49. "date"            : 4,
  50. "time"            : 5,
  51. "base64Binary"    : 6,
  52. "base64"          : 7};
  53. function ErrDetail(errCode, errString, errRaw)
  54. {
  55. this.code = errCode;
  56. this.string = errString;
  57. this.raw = errRaw;
  58. }
  59. var L_InProgress_Text = "In Progress";
  60. var L_InvalArg_Text = "Invalid argument";
  61. var L_NotReady_Text = "Service unavailable";
  62. var L_InvalRes_Text = "Invalid response";
  63. var L_UnsupFun_Text = "Function not found";
  64. var L_UnknownS_Text = "Unknown server error";
  65. var L_AcDenied_Text = "Access denied";
  66. var L_SoapUnav_Text = "Soap not available";
  67. var L_HtcInter_Text = "HTC internal error";
  68. var L_InvaPort_Text = "Invalid active port";
  69. var L_InvaHead_Text = "Invalid headers";
  70. var _errInvalArg = new ErrDetail("Client", L_InvalArg_Text, null);
  71. var _errNotReady = new ErrDetail("Client", L_NotReady_Text, null);
  72. var _errInvalRes = new ErrDetail("Server", L_InvalRes_Text, null);
  73. var _errUnsupFun = new ErrDetail("Client", L_UnsupFun_Text, null);
  74. var _errUnknownS = new ErrDetail("Server", L_UnknownS_Text, null);
  75. var _errAcDenied = new ErrDetail("Server", L_AcDenied_Text, null);
  76. var _errSoapUnav = new ErrDetail("Client", L_SoapUnav_Text, null);
  77. var _errHtcInter = new ErrDetail("Client", L_HtcInter_Text, null);
  78. var _errInvaPort = new ErrDetail("Client", L_InvaPort_Text, null);
  79. var _errInvaHead = new ErrDetail("Client", L_InvaHead_Text, null);
  80. var _aryError = new Array(
  81. _errInvalArg,
  82. _errNotReady,
  83. _errInvalRes,
  84. _errUnsupFun,
  85. _errUnknownS,
  86. _errAcDenied,
  87. _errSoapUnav,
  88. _errHtcInter,
  89. _errInvaPort,
  90. _errInvaHead
  91. );
  92. function postError(oCall, refError)
  93. {
  94. if (oCall.co != null && !oCall.co.async)
  95. return returnError(oCall, refError);
  96. var s = function(){returnError(oCall, refError);};
  97. setTimeout(s, 0);
  98. return oCall.id;
  99. }
  100. function returnError(oCall, refError)
  101. {
  102. hideProgress();
  103. var r = new Object();
  104. r.id = oCall.id;
  105. r.error = true;
  106. r.errorDetail = _aryError[refError];
  107. if (oCall.co != null && oCall.co.async == false)
  108. {
  109. return r;
  110. }
  111. var cb = oCall.cb;
  112. if (cb == null)
  113. {
  114. var evt = createEventObject();
  115. evt.result = r;
  116. try { eventResult.fire(evt); } catch(e) {};
  117. }
  118. else
  119. {
  120. try { cb(r); } catch(e) {};
  121. }
  122. return oCall.id;
  123. }
  124. function createCallOptions(fn, pn, cm, to, un, pw, hd, ep, pr)
  125. {
  126. var o = new Object();
  127. o.funcName = fn;
  128. o.portName = pn;
  129. o.async    = cm;
  130. o.timeout  = to;
  131. o.userName = un;
  132. o.password = pw;
  133. o.SOAPHeader= hd;
  134. o.endpoint = ep;
  135. o.params   = pr;
  136. return o;
  137. }
  138. function createUseOptions(rc, sh)
  139. {
  140. var o = new Object();
  141. o.reuseConnection = rc == true;
  142. o.SOAPHeader = sh;
  143. return o;
  144. }
  145. function cloneObject(co)
  146. {
  147. var o = new Object();
  148. for (var x in co)
  149. o[x] = co[x];
  150. return o;
  151. }
  152. function ensureVBArray(d)
  153. {
  154. if (!_fVBon)
  155. {
  156. var s1 =
  157. "\nFunction VBGetArySize(a, d)\n"
  158. + "Dim x\n"
  159. + "Dim s\n"
  160. + "s=UBound(a, 1)\n"
  161. + "For x = 2 To d \n"
  162. + 's = s & "," & UBound(a, x)\n'
  163. + "Next\n"
  164. + "VBGetArySize=s\n"
  165. + "End Function\n";
  166. var o = element.document.createElement("script");
  167. o.language = "VBS";
  168. o.text = s1;
  169. element.document.body.appendChild(o);
  170. _fVBon = true;
  171. }
  172. var fn = "VBGetAryItem" + d;
  173. if (eval("typeof " + fn) != 'undefined')
  174. return;
  175. var a  = new Array();
  176. for (var i = 0; i < d; i++)
  177. a[i] = 'p' + i;
  178. var sp = a.join(", ");
  179. var s2 = "\nFunction " + fn + "(a, " + sp + ")\n"
  180. + "x = VarType(a(" + sp + "))\n"
  181. + "If x=9 Or x=12 Then\n"
  182. + "Set " + fn + "=a(" + sp + ")\n"
  183. + "Else\n"
  184. + fn + "=a(" + sp + ")\n"
  185. + "End If\n"
  186. + "End Function\n";
  187. var o = element.document.createElement("script");
  188. o.language = "VBS";
  189. o.text = s2;
  190. element.document.body.appendChild(o);
  191. }
  192. var _b64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  193. function encb64hlp(a, k, s, iFrom, iTo, fStr)
  194. {
  195. var d = 0;
  196. for (var i = 0; i + iFrom <= iTo; i ++)
  197. d |= (fStr ? s.charCodeAt(i + iFrom) : s[i + iFrom]) << (16 - 8*i);
  198. for (var i = 0; i <= iTo - iFrom + 1; i ++)
  199. a[k++] = _b64.charAt(d>>>(18 - i*6)&0x3f);
  200. return k;
  201. }
  202. function decb64hlp(a, ai, ca, iFrom, iTo)
  203. {
  204. var d = 0;
  205. var l = iTo - iFrom;
  206. for (var i = 0; i + iFrom <= iTo; i ++)
  207. d |= ca[i + iFrom] << (18 - 6*i);
  208. for (var i = 0; i < l; i ++)
  209. a[ai + i] = (d >>> (16 - i*8)) & 0xff;
  210. return ai + i;
  211. }
  212. function encb64(s)
  213. {
  214. var fStr = typeof(s) == "string";
  215. var i;
  216. var l = s.length;
  217. var a = new Array();
  218. var k = 0;
  219. for (i = 2; i < l; i = i + 3)
  220. {
  221. k = encb64hlp(a, k, s, i - 2, i, fStr);
  222. if ((i+1) % 57 == 0)
  223. a[k++] = "\r\n";
  224. }
  225. var padd = l - i + 2;
  226. if (padd > 0)
  227. {
  228. k = encb64hlp(a, k, s, i - 2, l-1, fStr);
  229. a[k] = (padd > 1) ? "=" : "==";
  230. }
  231. return a.join("");
  232. }
  233. var _b64rsc = "\n\r\t";
  234. function decb64(s, fStr)
  235. {
  236. var i, j = 0;
  237. var ip = s.indexOf('=');
  238. var l = ip >= 0 ? ip : s.length;
  239. var ca = new Array();
  240. for (i = 0; i < l; i++)
  241. {
  242. var c = s.charAt(i);
  243. if (_b64rsc.indexOf(c) >= 0)
  244. continue;
  245. ca[j++] = _b64.indexOf(c);
  246. }
  247. var l = j;
  248. var a = new Array();
  249. var ai = 0;
  250. for (i = 3; i < l; i = i + 4)
  251. ai = decb64hlp(a, ai, ca, i-3, i);
  252. if (i-4 < l)
  253. ai = decb64hlp(a, ai, ca, i-3, l-1);
  254. if (!fStr)
  255. return a;
  256. var r = '';
  257. try
  258. {
  259. r = String.fromCharCode.apply(element, a);
  260. }
  261. catch (E)
  262. {
  263. for (i = 0; i < a.length; i++)
  264. r += String.fromCharCode(a[i]);
  265. }
  266. return r;
  267. }
  268. function ensureWsdlUrl(szService)
  269. {
  270. if (szService.indexOf("://") > 0)
  271. return szService;
  272. var baseUrl = element.document.URL;
  273. var qi = baseUrl.lastIndexOf("?");
  274. var url2 = qi > 0 ? baseUrl.substr(0, qi) : baseUrl;
  275. return  url2.substr(0, baseUrl.lastIndexOf("/"))
  276. + "/" + szService + (szService.indexOf(".")>=0 ? "" : ".asmx?wsdl");
  277. }
  278. function allocCall()
  279. {
  280. var o = new Object();
  281. o.fDone = false;
  282. o.next = null;
  283. o.id = _nextId;
  284. _nextId++;
  285. return o;
  286. }
  287. function fnShowProgress()
  288. {
  289. if (_mProg == null)
  290. {
  291. var s = "<MARQUEE WIDTH=160 HEIGHT=20 BEHAVIOR=alternate SCROLLDELAY=1"
  292. + " STYLE='background:lightblue;position:absolute;top:0;left:0'>"
  293. + "</MARQUEE>";
  294. _mProg = element.document.createElement(s);
  295. _mProg.innerHTML = L_InProgress_Text;
  296. }
  297. if (_mProg.parentElement == null)
  298. element.document.body.insertAdjacentElement("beforeEnd",_mProg);
  299. }
  300. function isSimpleType(os, oschm, t)
  301. {
  302. return oschm == null || oschm.sTypes[t.type]!=null;
  303. }
  304. function isPrimitive(os, t)
  305. {
  306. return os.ns[t.ns] == os.ns["xsd"];
  307. }
  308. function getWsdl()
  309. {
  310. var szService = null;
  311. for (var aService in _sdl)
  312. {
  313. if (_sdl[aService] == null)
  314. continue;
  315. var xmlisld = _sdl[aService]._oXml;
  316. if (xmlisld == null)
  317. continue;
  318. if (   _sdl[aService].fPending
  319. &&  xmlisld.XMLDocument.readyState == 4)
  320. {
  321. _sdl[aService].fPending = false;
  322. szService = aService;
  323. break;
  324. }
  325. }
  326. if (szService == null)
  327. return;
  328. var oS = _sdl[szService];
  329. var fImportDone = loadImports(oS);
  330. if (fImportDone)
  331. processService(oS);
  332. }
  333. function processService(oS)
  334. {
  335. var xmlSdl = oS._oXml.documentElement;
  336. try
  337. {
  338. parseWsdl(oS, xmlSdl);
  339. }
  340. catch(e)
  341. {
  342. xmlSdl = null;
  343. }
  344. var evt = createEventObject();
  345. evt.serviceUrl = oS.url;
  346. evt.userName = oS._oXml.service;
  347. evt.serviceAvailable = xmlSdl != null;
  348. evt.WSDL = xmlSdl;
  349. oS._oXml.removeNode(true);
  350. oS._oXml = null;
  351. if (xmlSdl == null)
  352. {
  353. for (var nc = oS.nextCall; nc != null; nc = nc.next)
  354. returnError(nc, 1);
  355. _sdl[oS.url] = null;
  356. eventService.fire(evt);
  357. return;
  358. }
  359. eventService.fire(evt);
  360. if (oS.fSeq)
  361. return callNext(oS);
  362. while (oS.nextCall != null)
  363. {
  364. var nc = oS.nextCall;
  365. oS.nextCall = oS.nextCall.next;
  366. _invoke(nc);
  367. }
  368. }
  369. function onImportLoaded(oS)
  370. {
  371. for (var i = 0; i < oS.imports.length; i++)
  372. {
  373. if (    oS.imports[i] == null
  374. ||  !oS.imports[i].fPending
  375. ||  oS.imports[i].XMLDocument.readyState!=4)
  376. continue;
  377. var oImp = oS.imports[i].documentElement;
  378. if (oImp == null)
  379. continue;
  380. oS.imports[i].fPending = false;
  381. oS.cImporting --;
  382. var xmlSdl = oS._oXml.documentElement;
  383. switch (oImp.baseName)
  384. {
  385. case "definitions" :
  386. for (var j = 0; j < oImp.attributes.length; j++)
  387. {
  388. var oAtt = oImp.attributes.item(j);
  389. if (oAtt.name == "xmlns")
  390. continue;
  391. var ii = oAtt.name.indexOf("xmlns:");
  392. if (ii != 0)
  393. continue;
  394. var nsn = oAtt.name.substring(6, oAtt.name.length);
  395. if (oS.ns[nsn] != null)
  396. continue;
  397. oS.ns[nsn] = oAtt.value;
  398. oS.nsalias[oAtt.value] = nsn;
  399. }
  400. for (var j = oImp.childNodes.length - 1; j >= 0; j --)
  401. xmlSdl.appendChild(oImp.childNodes[j]);
  402. break;
  403. case "types" :
  404. case "message" :
  405. case "portType" :
  406. case "binding" :
  407. case "service" :
  408. xmlSdl.appendChild(oImp);
  409. break;
  410. default :
  411. var nsq = getQualifier(xmlSdl.nodeName);
  412. nsq = nsq.length == 0 ? "" : (nsq + ":");
  413. var nt = oS._oXml.XMLDocument.createElement(nsq + "types");
  414. xmlSdl.appendChild(nt);
  415. nt.appendChild(oImp);
  416. }
  417. oS.imports[i].removeNode(true);
  418. oS.imports[i] = null;
  419. if (oS.cImporting == 0)
  420. {
  421. processService(oS);
  422. return;
  423. }
  424. }
  425. }
  426. function loadImports(oS)
  427. {
  428. var xmlSdl = oS._oXml.documentElement;
  429. if (xmlSdl == null)
  430. return true;
  431. var nsq = getQualifier(xmlSdl.nodeName);
  432. nsq = nsq.length == 0 ? "" : (nsq + ":");
  433. var nImp     = xmlSdl.selectNodes(nsq + "import");
  434. if (nImp.length == 0)
  435. return true;
  436. oS.imports = new Array();
  437. oS.cImporting = 0;
  438. for (var i = 0; i < nImp.length; i++)
  439. {
  440. var oImp = document.createElement("XML");
  441. document.body.appendChild(oImp);
  442. oImp.fPending = true;
  443. oS.imports[i] = oImp;
  444. oImp.onreadystatechange = function() {onImportLoaded(oS)};
  445. var impUrl = getAttrib(nImp[i], "location");
  446. if (impUrl == null)
  447. continue;
  448. oS.cImporting ++;
  449. oImp.src = impUrl;
  450. }
  451. return false;
  452. }
  453. function invokeNext(svcName)
  454. {
  455. var oS = _sdl[svcName];
  456. if (oS == null)
  457. return;
  458. var oC = oS.nextCall;
  459. if (oC == null)
  460. return null;
  461. oS.nextCall = oC.next;
  462. if (oS.nextCall == null)
  463. oS.lastCall = null;
  464. _invoke(oC);
  465. }
  466. function callNext(oS)
  467. {
  468. if (oS.fSeq)
  469. setTimeout(element.uniqueID + '.invokeNext("' + oS.url + '")', 0);
  470. }
  471. function getAttrib(o, sAName)
  472. {
  473. if (o.attributes == null)
  474. return null;
  475. var a = o.attributes.getNamedItem(sAName);
  476. if (a != null)
  477. return a.value;
  478. return null;
  479. }
  480. function getBaseName(str)
  481. {
  482. var a = str.split(":");
  483. if (a.length > 1)
  484. return a[1];
  485. return str;
  486. }
  487. function getQualifier(str)
  488. {
  489. var a = str.split(":");
  490. if (a.length > 1)
  491. return a[0];
  492. return '';
  493. }
  494. function getNextNsq(oS)
  495. {
  496. var nsq1;
  497. do
  498. {
  499. nsq1 = "mswsb" + _nextNsQ;
  500. _nextNsQ ++;
  501. }
  502. while (oS.ns[nsq1] != null)
  503. return nsq1;
  504. }
  505. function getUniqueNsq(oS, o, litNsq)
  506. {
  507. if (litNsq == null)
  508. return litNsq;
  509. var nsuri = null;
  510. if (litNsq == '')
  511. nsuri = o.namespaceURI;
  512. else
  513. {
  514. var o1 = o;
  515. while (o1 != null)
  516. {
  517. nsuri = getAttrib(o1, 'xmlns:'+litNsq);
  518. if (nsuri != null)
  519. break;
  520. o1 = o1.parentNode;
  521. }
  522. }
  523. if (nsuri == null)
  524. return litNsq;
  525. var nsq1 = oS.nsalias[nsuri];
  526. if (nsq1 != null)
  527. return nsq1;
  528. litNsq = getNextNsq(oS);
  529. oS.ns[litNsq] = nsuri;
  530. oS.nsalias[nsuri] = litNsq;
  531. return litNsq;
  532. }
  533. function parseSimpleType(oS, oschm, o, ssffx)
  534. {
  535. var ns = getQualifier(o.tagName);
  536. var o1 = o.firstChild;
  537. if (o1 == null)
  538. return null;
  539. var sn = getAttrib(o, "name");
  540. if (sn == null)
  541. return null;
  542. sn = getBaseName(sn);
  543. var ot = new Object();
  544. ot.name = sn;
  545. switch(o1.baseName)
  546. {
  547. case 'restriction' :
  548. var base = getAttrib(o1, "base");
  549. if (base == null)
  550. {
  551. ot.ns = "xsd";
  552. ot.type = "string";
  553. }
  554. else
  555. {
  556. ot.type = getBaseName(base);
  557. ot.ns = getQualifier(base);
  558. }
  559. oschm.sTypes[sn] = ot;
  560. break;
  561. case 'list' :
  562. case 'union' :
  563. ot.type = "string";
  564. ot.ns = "xsd";
  565. oschm.sTypes[sn] = ot;
  566. break;
  567. default:
  568. ot = null;
  569. }
  570. return ot;
  571. }
  572. function parseType(oS, oschm, o, ssffx)
  573. {
  574. if (o == null)
  575. return null;
  576. switch(o.baseName)
  577. {
  578. case "complexType" :
  579. return parseComplexType(oS, oschm, o, ssffx);
  580. case "simpleType" :
  581. return parseSimpleType(oS, oschm, o, ssffx);
  582. }
  583. return null;
  584. }
  585. function parseArrayType(at, sz)
  586. {
  587. var asa = sz.split("[");
  588. if (asa.length <= 1)
  589. {
  590. asa = sz.split(",");
  591. for (var i = 0; i < asa.length; i++)
  592. {
  593. var ii = parseInt(asa[i]);
  594. at[at.length] = isNaN(ii) ? null : ii;
  595. }
  596. return;
  597. }
  598. for (var i=0; i < asa.length; i++)
  599. parseArrayType(at, asa[i]);
  600. }
  601. function parseComplexType(oS, oschm, o, ssffx)
  602. {
  603. var ns = getQualifier(o.tagName);
  604. if (!o.hasChildNodes())
  605. return null;
  606. var ot = null;
  607. for (var j = 0; j < o.childNodes.length; j++)
  608. {
  609. var o1 = o.childNodes[j];
  610. switch(o1.baseName)
  611. {
  612. case 'sequence' :
  613. case 'all' :
  614. var ao = o1.selectNodes(ns.length ? (ns+':any') : 'any');
  615. if (ao.length != 0)
  616. continue;
  617. ao = o1.selectNodes(ns.length ? (ns+':element') : 'element');
  618. if (ao.length == 0)
  619. continue;
  620. if (ot == null)
  621. ot = new Array();
  622. for (var i = 0; i < ao.length; i++)
  623. {
  624. var s = getAttrib(ao[i], "name");
  625. if (s == null)
  626. {
  627. var s = getAttrib(ao[i], "ref");
  628. if (s != null)
  629. {
  630. oS.refs[s] = ot;
  631. }
  632. }
  633. else
  634. ot[s] = parseElem(oS, oschm, ao[i], ssffx);
  635. }
  636. continue;
  637. case 'complexContent' :
  638. var o2 = o1.firstChild;
  639. switch(o2.baseName)
  640. {
  641. case 'extension' :
  642. var base = getAttrib(o2, "base");
  643. if (base == null)
  644. continue;
  645. var ab = base.split(":");
  646. var oBase = new Object();
  647. oBase.nsuri = ab.length > 1 ? oS.ns[ab[0]] : oschm.uri;
  648. oBase.base = ab.length > 1 ? ab[1] : ab[0];
  649. ot = parseComplexType(oS, oschm, o2, ssffx);
  650. oBase.type = getAttrib(o, "name");
  651. oBase.derivedType = ot;
  652. oBase.fExpanded = false;
  653. if (oBase.type != null)
  654. oS.exts[oBase.type] = oBase;
  655. else
  656. oS.exts[oS.exts.length] = oBase;
  657. continue;
  658. case 'restriction' :
  659. return parseComplexType(oS, oschm, o2, ssffx);
  660. case 'all' :
  661. return parseComplexType(oS, oschm, o1, ssffx);
  662. }
  663. continue;
  664. case 'attribute' :
  665. var soapns = oS.ns[oS.qlt["soap"]];
  666. var wsdlns = oS.ns[oS.qlt["wsdl"]];
  667. var at=o1.attributes.getQualifiedItem("arrayType", wsdlns);
  668. if (at == null)
  669. at=o1.attributes.getQualifiedItem("arrayType", soapns);
  670. if (at == null)
  671. {
  672. if (ot == null)
  673. {
  674. ot = new Array();
  675. ot[getAttrib(o1, "name")] = parseAttrib(o1);
  676. }
  677. continue;
  678. }
  679. var tn = getBaseName(at.value);
  680. if (ot != null)
  681. {
  682. var oe = get1stAryItem(ot);
  683. oe.fArray = true;
  684. oe.sizeArray = new Array();
  685. parseArrayType(oe.sizeArray,
  686. tn.substring(tn.indexOf("[")+1, tn.length));
  687. continue;
  688. }
  689. var oe = new Object();
  690. var a = tn.split("[");
  691. if (a.length < 2)
  692. continue;
  693. oe.ns = getQualifier(at.value);
  694. oe.ns = getUniqueNsq(oS, o1, oe.ns);
  695. oe.name = a[0];
  696. oe.fArray = true;
  697. oe.type = a[0];
  698. if (oe.type == "anyType" && oS.ns[oe.ns] == oS.ns["xsd"])
  699. oe.type = "string";
  700. oe.sizeArray = new Array();
  701. parseArrayType(oe.sizeArray,
  702. tn.substring(tn.indexOf("[")+1, tn.length));
  703. ot = new Array();
  704. ot[a[0]] = oe;
  705. continue;
  706. }
  707. }
  708. return ot;
  709. }
  710. function parseAttrib(o)
  711. {
  712. var attrib = new Object();
  713. attrib.fAttrib = true;
  714. var st = getAttrib(o, "type");
  715. if (st != null)
  716. {
  717. var a = st.split(":");
  718. attrib.type = a.length > 1 ? a[1] : a[0];
  719. attrib.ns = a.length > 1 ? a[0] : null;
  720. }
  721. attrib.fixed = getAttrib(o, "fixed");
  722. attrib.name = getAttrib(o, "name");
  723. attrib.allowed = getAttrib(o, "use") != "prohibited";
  724. return attrib;
  725. }
  726. function parseElem(oS, oschm, o, ssffx)
  727. {
  728. var oe = new Object();
  729. oe.name = getAttrib(o, "name");
  730. var st = getAttrib(o, "type");
  731. if (st == null)
  732. st = getAttrib(o, "xsi:type");
  733. var minOccurs = getAttrib(o, "minOccurs");
  734. var maxOccurs = getAttrib(o, "maxOccurs");
  735. oe.fArray = (maxOccurs != null && maxOccurs != "1");
  736. if (st != null)
  737. {
  738. oe.type = getBaseName(st);
  739. oe.ns = getQualifier(st);
  740. if (oe.ns == '')
  741. oe.ns = oschm.qdef;
  742. if (oe.type == "anyType" && oS.ns[oe.ns] == oS.ns["xsd"])
  743. oe.type = "string";
  744. return oe;
  745. }
  746. oe.ns = oS.nsalias[oschm.uri];
  747. if (typeof ssffx != 'undefined')
  748. oe.type = ssffx + '_' + oe.name;
  749. else
  750. oe.type = oe.name;
  751. var ct = parseType(oS, oschm, o.firstChild, ssffx);
  752. oschm.types[oe.type] = ct;
  753. return oe;
  754. }
  755. function parseSoapHeader(oS, o)
  756. {
  757. var hdrInfo = new Object();
  758. hdrInfo.ns = getAttrib(o, "namespace");
  759. hdrInfo.es = getAttrib(o, "encodingStyle");
  760. var sUs = getAttrib(o, "use");
  761. hdrInfo.fLiteral = (sUs != null && sUs.toLowerCase()=='literal');
  762. var smsg = getAttrib(o, "message");
  763. var amh = oS.msgs[getBaseName(smsg)];
  764. var spart = getAttrib(o, "part");
  765. hdrInfo.fRequired = getAttrib(o, "required") == "true";
  766. hdrInfo.type = amh.args[getBaseName(spart)];
  767. return hdrInfo;
  768. }
  769. function expBase(oS, a, t)
  770. {
  771. if (t.fExpanded)
  772. return;
  773. if (a[t.base] != null)
  774. expBase(oS, a, a[t.base]);
  775. t.fExpanded = true;
  776. var oSchm = oS.schemas[t.nsuri];
  777. var oSuper = oSchm.types[t.base];
  778. if (oSuper == null || t.derivedType == null)
  779. return;
  780. for (var x in oSuper)
  781. if (t.derivedType[x] == null)
  782. t.derivedType[x] = oSuper[x];
  783. }
  784. function parseSchemas(oS, nSchemas)
  785. {
  786. for (var j = 0; j < nSchemas.length; j ++)
  787. {
  788. var schmUri = getAttrib(nSchemas[j], "targetNamespace");
  789. if (oS.schemas[schmUri] == null)
  790. {
  791. var oSchm = new Object();
  792. oSchm.uri = getAttrib(nSchemas[j], "targetNamespace");
  793. oSchm.efd = getAttrib(nSchemas[j], "elementFormDefault");
  794. oSchm.afd = getAttrib(nSchemas[j], "attributeFormDefault");
  795. var nsdef = nSchemas[j].namespaceURI;
  796. if (nsdef == null || nSchemas[j].prefix != '')
  797. nsdef = oSchm.uri;
  798. oSchm.qdef = oS.nsalias[nsdef];
  799. if (oSchm.qdef == null)
  800. {
  801. oSchm.qdef = "";
  802. oS.ns[oSchm.qdef] = nsdef;
  803. oS.nsalias[nsdef] = oSchm.qdef;
  804. }
  805. oSchm.service = oS.url;
  806. oSchm.elems = new Array();
  807. oSchm.types = new Array();
  808. oSchm.sTypes = new Array();
  809. oS.schemas[oSchm.uri] = oSchm;
  810. }
  811. else
  812. oSchm = oS.schemas[schmUri];
  813. var nElements = nSchemas[j].childNodes;
  814. for (var k = 0; k < nElements.length; k ++)
  815. {
  816. var sn = getAttrib(nElements[k], "name");
  817. if (sn == null)
  818. continue;
  819. switch(nElements[k].baseName)
  820. {
  821. case 'element' :
  822. oSchm.elems[sn] = parseElem(oS,oSchm,nElements[k],sn);
  823. break;
  824. case 'simpleType' :
  825. case 'complexType' :
  826. oSchm.types[sn] = parseType(oS, oSchm, nElements[k]);
  827. break;
  828. }
  829. }
  830. }
  831. }
  832. function parseWsdl(oS, xmlSdl)
  833. {
  834. if (xmlSdl == null)
  835. return false;
  836. var nsq = getQualifier(xmlSdl.nodeName);
  837. nsq = nsq.length == 0 ? "" : (nsq + ":");
  838. var nsqMsg = nsq;
  839. var nsqPort = nsq;
  840. var nsqBinding = nsq;
  841. var nsqService = nsq;
  842. var nsqTypes = nsq;
  843. var nMsgs    = xmlSdl.selectNodes(nsq + "message");
  844. var nPort    = xmlSdl.selectNodes(nsq + "portType");
  845. var nBinding = xmlSdl.selectNodes(nsq + "binding");
  846. var nService = xmlSdl.selectNodes(nsq + "service");
  847. var nTypes   = xmlSdl.selectNodes(nsq + "types");
  848. if (nMsgs.length == 0)
  849. {
  850. nMsgs = xmlSdl.selectNodes("message");
  851. nsqMsg = "";
  852. }
  853. if (nPort.length == 0)
  854. {
  855. nPort = xmlSdl.selectNodes("portType");
  856. nsqPort = "";
  857. }
  858. if (nBinding.length == 0)
  859. {
  860. nBinding = xmlSdl.selectNodes("binding");
  861. nsqBinding = "";
  862. }
  863. if (nService.length == 0)
  864. {
  865. nService = xmlSdl.selectNodes("service");
  866. nsqService = "";
  867. }
  868. if (nTypes.length == 0)
  869. {
  870. nTypes = xmlSdl.selectNodes("types");
  871. nsqTypes = "";
  872. }
  873. var aMsgs    = new Array();
  874. var aPort    = new Array();
  875. var aBinding = new Array();
  876. oS.targetns = getAttrib(xmlSdl, "targetNamespace");
  877. oS.ns["xsd"] = "http://www.w3.org/2001/XMLSchema";
  878. oS.schemas = new Array();
  879. oS.msgs = aMsgs;
  880. oS.refs = new Array();
  881. oS.exts = new Array();
  882. for (var i = 0; i < xmlSdl.attributes.length; i++)
  883. {
  884. var oAtt = xmlSdl.attributes.item(i);
  885. if (oAtt.name == "xmlns")
  886. continue;
  887. var ii = oAtt.name.indexOf("xmlns:");
  888. if (ii != 0)
  889. continue;
  890. var nsn = oAtt.name.substring(6, oAtt.name.length);
  891. if (oS.ns[nsn] != null && nsn != "xsd")
  892. continue;
  893. oS.ns[nsn] = oAtt.value;
  894. oS.nsalias[oAtt.value] = nsn;
  895. }
  896. oS.qlt = new Array();
  897. oS.qlt["soapenc"] = "http://schemas.xmlsoap.org/soap/encoding/";
  898. oS.qlt["wsdl"] = "http://schemas.xmlsoap.org/wsdl/";
  899. oS.qlt["soap"] = "http://schemas.xmlsoap.org/wsdl/soap/";
  900. oS.qlt["SOAP-ENV"] = 'http://schemas.xmlsoap.org/soap/envelope/';
  901. for (var x in oS.qlt)
  902. {
  903. if (oS.nsalias[oS.qlt[x]] != null)
  904. {
  905. oS.qlt[x] = oS.nsalias[oS.qlt[x]];
  906. continue;
  907. }
  908. oS.ns[x] = oS.qlt[x];
  909. oS.nsalias[oS.qlt[x]] = x;
  910. oS.qlt[x] = x;
  911. }
  912. if (oS.ns["xsi"] == null)
  913. oS.ns["xsi"] = oS.ns["xsd"] == xsd99 ? xsi99 : xsi01;
  914. for (var i = 0; i < nTypes.length; i ++)
  915. parseSchemas(oS, nTypes[i].childNodes);
  916. for (var x in oS.refs)
  917. {
  918. var q = getQualifier(x);
  919. var nsUri = oS.ns[q];
  920. var oschm = oS.schemas[nsUri];
  921. if (oschm == null)
  922. continue;
  923. var ot = oschm.elems[getBaseName(x)];
  924. oS.refs[x][ot.name] = ot;
  925. }
  926. for (var i in oS.exts)
  927. expBase(oS, oS.exts, oS.exts[i]);
  928. for (var i = 0; i < nMsgs.length; i++)
  929. {
  930. var sName = getAttrib(nMsgs[i], 'name');
  931. aMsgs[sName] = new Object();
  932. var ps = nMsgs[i].selectNodes(nsqMsg + "part");
  933. aMsgs[sName].args = new Array();
  934. for (var j = 0; j < ps.length; j ++)
  935. {
  936. var ap = new Object();
  937. ap.name = getAttrib(ps[j], "name");
  938. ap.type = getAttrib(ps[j], "type");
  939. ap.elem = getAttrib(ps[j], "element");
  940. if (ap.elem != null)
  941. {
  942. ap.ns = getQualifier(ap.elem);
  943. ap.elem = getBaseName(ap.elem);
  944. }
  945. if (ap.type != null)
  946. {
  947. ap.ns = getQualifier(ap.type);
  948. ap.type = getBaseName(ap.type);
  949. }
  950. ap.ns = getUniqueNsq(oS, ps[j], ap.ns);
  951. if (ap.type == "anyType" && oS.ns[ap.ns] == oS.ns["xsd"])
  952. ap.type = "string";
  953. aMsgs[sName].args[ap.name] = ap;
  954. }
  955. aMsgs[sName].argl = ps.length;
  956. }
  957. for (var i = 0; i < nPort.length; i++)
  958. {
  959. var sName = getAttrib(nPort[i], "name");
  960. aPort[sName] = new Object();
  961. var nops = nPort[i].selectNodes(nsqPort + "operation");
  962. var oops = new Array();
  963. aPort[sName].ops = oops;
  964. for (var j = 0; j < nops.length; j++)
  965. {
  966. var sOpName = getAttrib(nops[j], "name");
  967. var nInputs = nops[j].selectNodes(nsqPort + "input");
  968. var mInput = null;
  969. if (nInputs.length > 0)
  970. {
  971. var s = getAttrib(nInputs[0], "message");
  972. var sMsgName = getBaseName(s);
  973. var sNS = getQualifier(s);
  974. if (oops[sOpName] == null)
  975. oops[sOpName] = new Array();
  976. var sin = getAttrib(nInputs[0], "name");
  977. if (sin != null)
  978. oops[sOpName][sin] = aMsgs[sMsgName];
  979. else
  980. oops[sOpName][sOpName] = aMsgs[sMsgName];
  981. if (aMsgs[sMsgName] == null)
  982. break;
  983. aMsgs[sMsgName].opname = sOpName;
  984. mInput = aMsgs[sMsgName];
  985. var firstArg = get1stAryItem(mInput.args);
  986. if (sin != null)
  987. sOpName = sin;
  988. mInput.fWrapped = mInput.argl == 1 && firstArg != null
  989. && (    firstArg.type == sOpName
  990. ||  firstArg.elem == sOpName
  991. ||  "parameters"  == firstArg.name.toLowerCase());
  992. }
  993. var nOutputs = nops[j].selectNodes(nsqPort + "output");
  994. if (nOutputs.length > 0)
  995. {
  996. var s = getAttrib(nOutputs[0], "message");
  997. var sMsgName = getBaseName(s);
  998. var sSoapName = aMsgs[sMsgName].soapName;
  999. if (sSoapName == null)
  1000. aPort[sName].ops[sMsgName] = aMsgs[sMsgName];
  1001. else
  1002. {
  1003. aPort[sName].ops[sSoapName] = aMsgs[sMsgName];
  1004. aMsgs[sSoapName] = aMsgs[sMsgName];
  1005. }
  1006. if (mInput != null)
  1007. mInput.response = aMsgs[sMsgName];
  1008. }
  1009. mInput.fOneWay = nOutputs.length == 0;
  1010. }
  1011. }
  1012. for (var i = 0; i < nBinding.length; i++)
  1013. {
  1014. var osoapb = nBinding[i].selectNodes("soap:binding");
  1015. if (osoapb == null || osoapb.length == 0)
  1016. continue;
  1017. var sStyle= getAttrib(osoapb[0], "style");
  1018. var sName = getAttrib(nBinding[i], "name");
  1019. aBinding[sName] = new Object();
  1020. var stype = getBaseName(getAttrib(nBinding[i], "type"));
  1021. aBinding[sName].msgs = aPort[stype].ops;
  1022. var nops = nBinding[i].selectNodes(nsqBinding + "operation");
  1023. for (var j = 0; j < nops.length; j++)
  1024. {
  1025. var sOpName = getAttrib(nops[j], "name");
  1026. var input = nops[j].selectSingleNode(nsqBinding + "input");
  1027. if (input == null)
  1028. continue;
  1029. var sin = getAttrib(input, "name");
  1030. if (sin == null)
  1031. sin = sOpName;
  1032. var oM = aBinding[sName].msgs[sOpName][sin];
  1033. if (oM == null)
  1034. continue;
  1035. var nsoapops = nops[j].selectNodes("soap:operation");
  1036. if (nsoapops.length == 0)
  1037. continue;
  1038. var sOpStyle= getAttrib(nsoapops[0], "style");
  1039. oM.soapAction = getAttrib(nsoapops[0], "soapAction");
  1040. var nsoapbody = nops[j].selectNodes(nsqBinding + "input/soap:body");
  1041. if (nsoapbody.length > 0)
  1042. {
  1043. oM.ns = getAttrib(nsoapbody[0], "namespace");
  1044. oM.es = getAttrib(nsoapbody[0], "encodingStyle");
  1045. var sUs = getAttrib(nsoapbody[0], "use");
  1046. oM.fLiteral = (sUs != null && sUs.toLowerCase() == 'literal');
  1047. }
  1048. var nheadIn = nops[j].selectNodes(nsqBinding + "input/soap:header");
  1049. oM.hdrsIn = new Array();
  1050. for (var k = 0; k < nheadIn.length; k ++)
  1051. oM.hdrsIn[k] = parseSoapHeader(oS, nheadIn[k])
  1052. var nheadOut = nops[j].selectNodes(nsqBinding+"output/soap:header");
  1053. oM.hdrsOut = new Array();
  1054. for (var k = 0; k < nheadOut.length; k ++)
  1055. oM.hdrsOut[k] = parseSoapHeader(oS, nheadOut[k])
  1056. if (sOpStyle != null)
  1057. oM.fRpc = sOpStyle.toLowerCase()=='rpc';
  1058. else
  1059. oM.fRpc=(sStyle !=null && sStyle.toLowerCase()=='rpc');
  1060. }
  1061. }
  1062. oS.soapPort = new Array();
  1063. oS.headers  = new Array();
  1064. if (nService.length == 0)
  1065. {
  1066. oS.defPortName = "defaultPort";
  1067. var aPort = new Object();
  1068. oS.soapPort[oS.defPortName] = aPort;
  1069. aPort.location = null;
  1070. var firstBind = get1stAryItem(aBinding);
  1071. aPort.msgs = firstBind == null ? (new Array()) : firstBind.msgs;
  1072. return;
  1073. }
  1074. var nports = nService[0].selectNodes(nsqService + "port");
  1075. for (var j = 0; j < nports.length; j++)
  1076. {
  1077. var oAddress = nports[j].selectNodes("soap:address");
  1078. if (oAddress.length == 0)
  1079. continue;
  1080. var oSOAPHdr = nports[j].selectNodes("soap:header");
  1081. for (var k = 0; k < oSOAPHdr.length; k ++)
  1082. oS.headers[k] = parseSoapHeader(oS, oSOAPHdr[k]);
  1083. oPort = new Object();
  1084. oPort.location = getAttrib(oAddress[0], "location");
  1085. var b = aBinding[getBaseName(getAttrib(nports[j], "binding"))];
  1086. if (b == null)
  1087. continue
  1088. oPort.msgs = b.msgs;
  1089. var szname = getAttrib(nports[j], "name");
  1090. oS.soapPort[szname] = oPort;
  1091. if (oS.defPortName == null)
  1092. oS.defPortName = szname;
  1093. }
  1094. }
  1095. function ensureXmlHttp(fAsync, oS)
  1096. {
  1097. var oXmlHttp = null;
  1098. var fCreate = fAsync ? oS.aXmlHttp == null : oS.sXmlHttp == null;
  1099. if (!fCreate && oS.fSeq)
  1100. {
  1101. oXmlHttp = fAsync ? oS.aXmlHttp : oS.sXmlHttp;
  1102. oXmlHttp.fFree = false;
  1103. return oXmlHttp;
  1104. }
  1105. for (var i = 0; i < _aXmlHttp.length; i++)
  1106. if (_aXmlHttp[i].fFree)
  1107. {
  1108. _aXmlHttp[i].fFree = false;
  1109. oXmlHttp = _aXmlHttp[i];
  1110. break;
  1111. }
  1112. if (oXmlHttp == null)
  1113. {
  1114. var xmlHttp;
  1115. try
  1116. {
  1117. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  1118. }
  1119. catch (e)
  1120. {
  1121. return null;
  1122. }
  1123. var oXmlHttp = new Object();
  1124. oXmlHttp.fFree = false;
  1125. oXmlHttp.xmlHttp = xmlHttp;
  1126. _aXmlHttp[_aXmlHttp.length] = oXmlHttp;
  1127. }
  1128. if (!oS.fSeq)
  1129. return oXmlHttp;
  1130. if (fAsync)
  1131. oS.aXmlHttp = oXmlHttp;
  1132. else
  1133. oS.sXmlHttp = oXmlHttp;
  1134. return oXmlHttp;
  1135. }
  1136. function encodeHeader(oS, oM, oCall)
  1137. {
  1138. var co = oCall.co;
  1139. var sh = co.SOAPHeader == null ? oS.SOAPHeader : co.SOAPHeader;
  1140. if (sh == null)
  1141. return "";
  1142. var ht = (oM.hdrsIn == null) ? oS.headers : oM.hdrsIn;
  1143. var szHeader = "";
  1144. if (typeof sh == 'string')
  1145. szHeader = sh;
  1146. else if (typeof sh == 'object' && sh.xml != null)
  1147. szHeader = sh.xml;
  1148. else if (ht.length != 0)
  1149. {
  1150. if (typeof(sh) == "unknown")
  1151. sh = vbArrayToJs(sh, 1);
  1152. oM1 = new Object();
  1153. oM1.opname = null;
  1154. oM1.ns = oM.ns;
  1155. oM1.fRpc = oM.fRpc;
  1156. oM1.fWrapped = false;
  1157. for (var i = 0; i < ht.length; i++)
  1158. {
  1159. if (sh[i] == null)
  1160. {
  1161. if (ht[i].fRequired)
  1162. return returnError(oCall, 9);
  1163. continue;
  1164. }
  1165. oM1.fLiteral = ht[i].fLiteral;
  1166. var ta = new Array();
  1167. ta[ht[i].type.name] = ht[i].type;
  1168. var va = new Array();
  1169. va[0] = sh[i];
  1170. szHeader += encodeArgs(oS, oM1, ta, va, 0, false);
  1171. }
  1172. }
  1173. var soapenvns = oS.qlt["SOAP-ENV"];
  1174. return '<'+soapenvns+':Header>' + szHeader +"</"+soapenvns+":Header>\n";
  1175. }
  1176. function _invoke(oCall)
  1177. {
  1178. var szS = oCall.service;
  1179. var oS = _sdl[szS];
  1180. var co = oCall.co;
  1181. if (oS == null)
  1182. {
  1183. return postError(oCall, 1);
  1184. }
  1185. if (co.portName == null)
  1186. co.portName = oS.defPortName;
  1187. if (oS.soapPort[co.portName] == null)
  1188. {
  1189. callNext(oS);
  1190. return returnError(oCall, 8);
  1191. }
  1192. var oXmlHttp = ensureXmlHttp(co.async, oS);
  1193. if (oXmlHttp == null)
  1194. return returnError(oCall, 6);
  1195. var args = co.params == null ? oCall.args : co.params;
  1196. var cb = oCall.cb;
  1197. var j = cb == null ? 1 : 2;
  1198. j = co.params == null ? j : 0;
  1199. var oM = getMsg(szS, co, args, j);
  1200. var szParams = null;
  1201. if (oM != null)
  1202. {
  1203. szParams = encodeArgs(oS, oM, oM.args, args, j, co.params != null);
  1204. }
  1205. if (szParams == null)
  1206. {
  1207. callNext(oS);
  1208. return returnError(oCall, 0);
  1209. }
  1210. oCall.oM = oM;
  1211. if (showProgress == "true" || showProgress == true)
  1212. fnShowProgress();
  1213. var oP = oS.soapPort[co.portName];
  1214. var loc = co.endpoint == null ? oP.location : co.endpoint;
  1215. if (loc == null)
  1216. {
  1217. callNext(oS);
  1218. return returnError(oCall, 8);
  1219. }
  1220. try
  1221. {
  1222. if (co.userName == null)
  1223. oXmlHttp.xmlHttp.open("POST", loc, co.async);
  1224. else
  1225. oXmlHttp.xmlHttp.open("POST", loc, co.async,
  1226. co.userName, co.password == null ? "" : co.password);
  1227. }
  1228. catch (e)
  1229. {
  1230. callNext(oS);
  1231. return returnError(oCall, 5);
  1232. }
  1233. var szAction = oM.soapAction;
  1234. if (szAction != null && szAction.length > 0)
  1235. oXmlHttp.xmlHttp.setRequestHeader("SOAPAction", '"'+szAction+'"');
  1236. oXmlHttp.xmlHttp.setRequestHeader("Content-Type",
  1237. 'text/xml; charset="UTF-8"');
  1238. var sNS = ' xmlns=""';
  1239. for (var ns in oS.ns)
  1240. {
  1241. var nsuri = oS.ns[ns];
  1242. if (ns == "" || nsuri == "")
  1243. continue;
  1244. sNS +=  " xmlns:" + ns + '="' + nsuri + '"';
  1245. }
  1246. var szHeader = encodeHeader(oS, oM, oCall);
  1247. var soapenvns = oS.qlt["SOAP-ENV"];
  1248. var soapes = (oM.es==null?'':(' '+soapenvns+':encodingStyle="'+oM.es+'"'));
  1249. var szPayload = "<?xml version='1.0' encoding='utf-8'?>\n<"
  1250. + soapenvns + ":Envelope"
  1251. + soapes
  1252. + sNS + ">\n"
  1253. + szHeader
  1254. + '<' + soapenvns + ':Body>'
  1255. + szParams + "</" + soapenvns + ":Body>\n"
  1256. + "</" + soapenvns + ":Envelope>\n";
  1257. if (co.async)
  1258. {
  1259. oCall.oXmlHttp = oXmlHttp;
  1260. oXmlHttp.xmlHttp.onreadystatechange = function() {getResult(oCall);};
  1261. try
  1262. {
  1263. oXmlHttp.xmlHttp.send(szPayload);
  1264. }
  1265. catch(e)
  1266. {
  1267. return postError(oCall, 5);
  1268. }
  1269. return oCall.id;
  1270. }
  1271. try
  1272. {
  1273. oXmlHttp.xmlHttp.send(szPayload);
  1274. }
  1275. catch(e)
  1276. {
  1277. return returnError(oCall, 5);
  1278. }
  1279. if (oXmlHttp.xmlHttp.responseXML.parseError.errorCode != 0)
  1280. {
  1281. _errUnknownS.raw = oXmlHttp.xmlHttp.responseText;
  1282. return returnError(oCall, 4);
  1283. }
  1284. var r;
  1285. try
  1286. {
  1287. r = processResult(oCall, oXmlHttp.xmlHttp.responseXML.documentElement);
  1288. }
  1289. catch (e)
  1290. {
  1291. return returnError(oCall, 7);
  1292. }
  1293. return r;
  1294. }
  1295. function callService(service, args)
  1296. {
  1297. var oC = allocCall();
  1298. if (args.length < 1)
  1299. {
  1300. return postError(oC, 0);
  1301. }
  1302. var cb = null;
  1303. var iM = 0;
  1304. if (    typeof args[0] == "function"
  1305. ||  typeof args[0] == "object" && args[0].funcName == null)
  1306. {
  1307. iM = 1;
  1308. cb = args[0];
  1309. }
  1310. var co;
  1311. if (typeof args[iM] == 'string')
  1312. co = createCallOptions(args[iM]);
  1313. else
  1314. co = cloneObject(args[iM]);
  1315. oC.co = co;
  1316. oC.cb = cb;
  1317. oC.service = service;
  1318. oC.args = args;
  1319. if (co.async == null)
  1320. co.async = true;
  1321. if (co.funcName == null)
  1322. {
  1323. return postError(oC, 0);
  1324. }
  1325. var oS = _sdl[service];
  1326. if (oS == null)
  1327. {
  1328. return postError(oC, 1);
  1329. }
  1330. if (co.async == false)
  1331. return oS.fPending ? returnError(oC, 1) : _invoke(oC);
  1332. if (oS.fSeq || oS.fPending)
  1333. {
  1334. if (oS.lastCall != null)
  1335. oS.lastCall.next = oC;
  1336. else
  1337. oS.nextCall = oC;
  1338. oS.lastCall = oC;
  1339. }
  1340. if (oS.fPending)
  1341. {
  1342. return oC.id;
  1343. }
  1344. if (!oS.fSeq)
  1345. _invoke(oC);
  1346. else if (oC == oS.nextCall && (oS.aXmlHttp == null || oS.aXmlHttp.fFree))
  1347. invokeNext(service);
  1348. return oC.id;
  1349. }
  1350. function useService(szService, userName, options)
  1351. {
  1352. if (    szService == null || szService.length == 0
  1353. ||  userName == null  || userName.length == 0)
  1354. {
  1355. throw("Invalid arguments");
  1356. return;
  1357. }
  1358. var url = ensureWsdlUrl(szService);
  1359. var oProp = getAttribute(userName);
  1360. if (oProp == null)
  1361. {
  1362. oProp=document.createElement("<PUBLIC:PROPERTY NAME="+userName+" />");
  1363. _webservice.appendChild(oProp);
  1364. }
  1365. var oPropValue = new Object();
  1366. setAttribute(userName, oPropValue);
  1367. oPropValue.callService = function(){return callService(url, arguments)};
  1368. if (_sdl[url] != null)
  1369. {
  1370. if (options != null)
  1371. {
  1372. _sdl[url].fSeq = options.reuseConnection == null
  1373. ? false : options.reuseConnection;
  1374. _sdl[url].SOAPHeader = options.SOAPHeader;
  1375. }
  1376. return;
  1377. }
  1378. var oXml = document.createElement("XML");
  1379. document.body.appendChild(oXml);
  1380. oS = new Object();
  1381. oS.sXmlHttp = null;
  1382. oS.aXmlHttp = null;
  1383. oS.fPending = true;
  1384. oS.nextCall = null;
  1385. oS.lastCall = null;
  1386. oS.url      = url;
  1387. oS._oXml    = oXml;
  1388. oS.ns = new Array();
  1389. oS.nsalias = new Array();
  1390. if (options != null)
  1391. {
  1392. oS.fSeq = options.reuseConnection;
  1393. oS.SOAPHeader = options.SOAPHeader;
  1394. }
  1395. if (oS.fSeq == null)
  1396. oS.fSeq = false;
  1397. _sdl[url]   = oS;
  1398. oXml.service = userName;
  1399. oXml.onreadystatechange = getWsdl;
  1400. oXml.src = url;
  1401. return;
  1402. }
  1403. function getMsg(service, co, args, argIdx)
  1404. {
  1405. var oM;
  1406. var mn = co.funcName;
  1407. var oS = _sdl[service];
  1408. var sp = oS.soapPort[co.portName];
  1409. if (sp == null)
  1410. return null;
  1411. oM  = sp.msgs[mn];
  1412. if (oM == null || oM.length == null)
  1413. {
  1414. return null;
  1415. }
  1416. var om1;
  1417. for (om1 in oM)
  1418. {
  1419. if (co.params != null || oM[om1].args.length == args.length - argIdx)
  1420. {
  1421. oM = oM[om1];
  1422. break;
  1423. }
  1424. }
  1425. if (oM.length != null)
  1426. oM = oM[om1];
  1427. return oM;
  1428. }
  1429. function fixupDT(x)
  1430. {
  1431. return (x < 10) ? ("0" + x) : x;
  1432. }
  1433. function encTZ(d)
  1434. {
  1435. var tzo = d.getTimezoneOffset();
  1436. return (tzo > 0 ? '-' : '+') + fixupDT(tzo / 60) + ':' + fixupDT(tzo % 60);
  1437. }
  1438. function encodePrimitive(os, argType, argVal)
  1439. {
  1440. var sz = '';
  1441. switch(_st[argType])
  1442. {
  1443. case 1 :
  1444. sz = argVal;
  1445. break;
  1446. case 2 :
  1447. sz = "<![CDATA[" + argVal + "]]>";
  1448. break;
  1449. case 3 :
  1450. try
  1451. {
  1452. sz  =   argVal.getFullYear()
  1453. +   "-" + fixupDT(argVal.getMonth() + 1)
  1454. +   "-" + fixupDT(argVal.getDate())
  1455. +   "T" + fixupDT(argVal.getHours())
  1456. +   ":" + fixupDT(argVal.getMinutes())
  1457. +   ":" + fixupDT(argVal.getSeconds())
  1458. +   (argVal.getMilliseconds==null
  1459. ? '' : ('.' + argVal.getMilliseconds()))
  1460. +   encTZ(argVal);
  1461. }
  1462. catch (e) { sz = argVal; }
  1463. break;
  1464. case 4 :
  1465. try
  1466. {
  1467. sz  =   argVal.getFullYear()
  1468. +   "-" + fixupDT(argVal.getMonth() + 1)
  1469. +   "-" + fixupDT(argVal.getDate())
  1470. +   encTZ(argVal);
  1471. }
  1472. catch (e) { sz = argVal; }
  1473. break;
  1474. case 5 :
  1475. try
  1476. {
  1477. sz  =   fixupDT(argVal.getHours())
  1478. +   ":" + fixupDT(argVal.getMinutes())
  1479. +   ":" + fixupDT(argVal.getSeconds())
  1480. +   (argVal.getMilliseconds==null
  1481. ? '' : ('.' + argVal.getMilliseconds()))
  1482. +   encTZ(argVal);
  1483. }
  1484. catch (e) { sz = argVal; }
  1485. break;
  1486. case 6 :
  1487. case 7 :
  1488. sz = encb64(argVal);
  1489. break;
  1490. default :
  1491. sz = argVal;
  1492. }
  1493. return sz;
  1494. }
  1495. function bldJsAry(a, as, d)
  1496. {
  1497. if (d == as.length-1)
  1498. return;
  1499. for (var i = 0; i < as[d]; i++)
  1500. {
  1501. a[i] = new Array();
  1502. bldJsAry(a[i], as, d+1)
  1503. }
  1504. }
  1505. function getNextIndexAry(a, ai)
  1506. {
  1507. var i;
  1508. var l = a.length;
  1509. if (ai.length == 0)
  1510. {
  1511. for (i = 0; i < l; i++)
  1512. ai[i] = 0;
  1513. return true;
  1514. }
  1515. for (i = l - 1; i >= 0; i--)
  1516. {
  1517. if (i == 0 && 1 + ai[0] > a[0] - 1)
  1518. return false;
  1519. var x = ai[i] + 1;
  1520. if (x <= a[i] - 1)
  1521. {
  1522. ai[i] = x;
  1523. return true;
  1524. }
  1525. ai[i] = 0;
  1526. }
  1527. return true;
  1528. }
  1529. function vbArrayToJs(a, d)
  1530. {
  1531. ensureVBArray(d);
  1532. var szSize;
  1533. try { szSize = VBGetArySize(a, d); } catch (e) {return new Array()}
  1534. var aSize = szSize.toString().split(",");
  1535. var aszIndex = new Array();
  1536. var ajs = new Array();
  1537. bldJsAry(ajs, aSize, 0);
  1538. var ai = new Array();
  1539. while (true == getNextIndexAry(aSize, ai))
  1540. {
  1541. var s = "ajs["+ai.join("][")+"]=VBGetAryItem"+d+"(a,"+ai.join(",")+");";
  1542. try { eval(s);} catch (e) {break;}
  1543. }
  1544. return ajs;
  1545. }
  1546. function encodeArray(os, t, nt, v, d)
  1547. {
  1548. var sz = "";
  1549. for (var i in v)
  1550. {
  1551. if (d == 1)
  1552. {
  1553. var ar = encodeVar(os, v[i], nt);
  1554. xt = ' xsi:type="' + (t.ns ==''?'':(t.ns + ':'))+t.type+'"';
  1555. sz += '\n<' + t.type + ar[1] +xt+'>' + ar[0] + '</' + t.type + '>';
  1556. }
  1557. else
  1558. sz += encodeArray(os, t, nt, v[i], d-1);
  1559. }
  1560. return sz;
  1561. }
  1562. function encodeVar(oS, v, t)
  1563. {
  1564. var ar = new Array("", "");
  1565. if (v == null)
  1566. return ar;
  1567. var oschm = getSchema(oS, t);
  1568. var ae = t.fArray ? t : getAryElem(os, oschm, t);
  1569. if (ae != null)
  1570. {
  1571. if (typeof v != 'object' && typeof v != 'unknown')
  1572. return ar;
  1573. var nt = cloneObject(ae);
  1574. nt.fArray = false;
  1575. var sArr = ae.sizeArray;
  1576. var k = 1;
  1577. k = (sArr == null) ? 1 : sArr.length;
  1578. if (typeof v == 'unknown')
  1579. v = vbArrayToJs(v, k);
  1580. ar[0] += encodeArray(oS, ae, nt, v, k);
  1581. return ar;
  1582. }
  1583. if (isSimpleType(oS, oschm, t))
  1584. {
  1585. ar[0] = encodePrimitive(oS, t.type, v);
  1586. return ar;
  1587. }
  1588. var et = oschm.types[t.type];
  1589. if (et == null)
  1590. {
  1591. try
  1592. {
  1593. var os = v.childNodes;
  1594. for (var i = 0; i < os.length; i ++)
  1595. {
  1596. ar[0] += os[i].xml;
  1597. }
  1598. }
  1599. catch (e)
  1600. {
  1601. ar[0] += v;
  1602. }
  1603. return ar;
  1604. }
  1605. if (typeof v != 'object' || v.length > 0)
  1606. {
  1607. var et1 = get1stAryItem(et);
  1608. if (et1 == null)
  1609. return ar;
  1610. return encodeVar(oS, v, et1)
  1611. }
  1612. for (var k in et)
  1613. {
  1614. if (et[k] == null)
  1615. continue;
  1616. if (v[k] == null)
  1617. {
  1618. if (!et[k].fAttrib)
  1619. ar[0] += '\n<' + et[k].name + ' xsi:null="true"' + '/>\n';
  1620. continue;
  1621. }
  1622. if (et[k].fAttrib)
  1623. {
  1624. ar[1] += encodeAttrib(oS, v[k], et[k]);
  1625. continue;
  1626. }
  1627. var qt = "";
  1628. var asi = "";
  1629. var it = getAryElem(oS, getSchema(oS, et[k]), et[k]);
  1630. var soapencns = oS.qlt["soapenc"];
  1631. if (it != null)
  1632. {
  1633. asi = getArySizeInfo(it, v[k]);
  1634. var ts = (isPrimitive(oS, it) || et[k].ns == "")
  1635. ? "xsd:" : (et[k].ns + ":");
  1636. asi = ' xsi:type="' + soapencns + ':Array" '
  1637. + soapencns + ':arrayType="' + ts + it.type+'['+ asi +']"';
  1638. }
  1639. else if (isPrimitive(oS, et[k]))
  1640. qt = ' xsi:type="xsd:' + et[k].type + '"';
  1641. var ark = encodeVar(oS, v[k], et[k]);
  1642. ar[0] += '\n<' + et[k].name + qt + asi + ark[1] + '>'
  1643. + ark[0] + '</' + et[k].name + '>';
  1644. }
  1645. return ar;
  1646. }
  1647. function getArySize(a)
  1648. {
  1649. var l = 0;
  1650. for (var x in a)
  1651. l++;
  1652. return l;
  1653. }
  1654. function get1stAryItem(a)
  1655. {
  1656. for (var x in a)
  1657. return a[x];
  1658. return null;
  1659. }
  1660. function getAryItemFromIndex(a, index)
  1661. {
  1662. var i = 0;
  1663. for (var x in a)
  1664. {
  1665. if (i == index)
  1666. return a[x];
  1667. i++;
  1668. }
  1669. return null;
  1670. }
  1671. function getSchema(os, t)
  1672. {
  1673. if (isPrimitive(os, t))
  1674. return null;
  1675. if (t.ns==null)
  1676. return get1stAryItem(os.schemas);
  1677. var nsUrl = os.ns[t.ns];
  1678. var oschm = os.schemas[nsUrl];
  1679. if (oschm != null || t.ns.length == 0)
  1680. return oschm;
  1681. for (var x in os.schemas)
  1682. if (x.indexOf(nsUrl) == 0 && os.schemas[x].types[t.type] != null)
  1683. return os.schemas[x];
  1684. return null;
  1685. }
  1686. function getArySizeInfo(at, av)
  1687. {
  1688. var as = at.sizeArray;
  1689. var k = 1;
  1690. k = (as == null) ? 1 : as.length;
  1691. var arr = av;
  1692. if (typeof arr == 'unknown')
  1693. arr = vbArrayToJs(arr, k);
  1694. var sArr = getArySize(arr);
  1695. if (as == null)
  1696. return sArr;
  1697. sArr = "";
  1698. for (var j = 0;;)
  1699. {
  1700. var l2 = getArySize(arr);
  1701. if (as[j] == null)
  1702. sArr+=l2;
  1703. else
  1704. sArr+=Math.min(as[j], l2);
  1705. j = j + 1;
  1706. if (j == as.length)
  1707. break;
  1708. sArr += ",";
  1709. if (l2 == 0)
  1710. return null;
  1711. arr = get1stAryItem(arr);
  1712. }
  1713. return sArr;
  1714. }
  1715. function encodeAttrib(oS, v, t)
  1716. {
  1717. if (t.type == null)
  1718. return "";
  1719. return " " + t.name + '="' + encodePrimitive(oS, t.type, v) + '"';
  1720. }
  1721. function serPart(oS, oM, a, v)
  1722. {
  1723. var sz = "";
  1724. var szt = '';
  1725. if (a.type!=null && isPrimitive(oS, a))
  1726. szt = ' xsi:type="xsd:' + a.type + '"';
  1727. var oschm = getSchema(oS, a);
  1728. var aryItem = a.fArray ? a : getAryElem(oS, oschm, a);
  1729. var soapencns = oS.qlt["soapenc"];
  1730. if (aryItem != null)
  1731. {
  1732. var sArr = getArySizeInfo(aryItem, v);
  1733. var oschm = getSchema(oS, aryItem);
  1734. if (oschm != null)
  1735. aryItem.ns = oS.nsalias[oschm.uri];
  1736. var ts = (isPrimitive(oS, aryItem) || aryItem.ns == "")
  1737. ? "xsd:" : (aryItem.ns + ":");
  1738. szt = ' xsi:type="' + soapencns + ':Array" '
  1739. + soapencns + ':arrayType="'+ts+aryItem.type+'['+sArr+']"';
  1740. }
  1741. else
  1742. szt = ' xsi:type="' + (a.ns == '' ? '' : (a.ns + ':'))+a.type+'"';
  1743. et = (a.elem == null || oschm == null) ? a : oschm.elems[a.elem];
  1744. var ar = encodeVar(oS, v, et);
  1745. if (oM.fLiteral)
  1746. {
  1747. if (a.elem == null)
  1748. {
  1749. if (oM.fWrapped || oM.fRpc)
  1750. {
  1751. sz += '\n<' + a.name + ar[1] + '>' + ar[0];
  1752. sz += '</' + a.name + '>';
  1753. }
  1754. else
  1755. sz += ar[0];
  1756. }
  1757. else
  1758. {
  1759. var ns=' xmlns="'+(a.ns==null?oS.targetns:oS.ns[a.ns])+'"';
  1760. sz += '\n<' + a.elem + ns + ar[1] + '>' + ar[0];
  1761. sz += '</' + a.elem + '>';
  1762. }
  1763. }
  1764. else
  1765. {
  1766. if (a.type == null)
  1767. a.type = a.elem;
  1768. var stn = 'mswsb:' + (oM.fRpc ? et.name : et.type);
  1769. stn = aryItem == null ? stn : (soapencns + ":Array");
  1770. n = "";
  1771. if (oM.fWrapped || oM.fRpc && oM.opname != null)
  1772. stn = a.name;
  1773. else if (aryItem == null)
  1774. n =' xmlns:mswsb="'+(a.ns==null?oS.targetns:oS.ns[a.ns])+'"';
  1775. sz += '\n<' + stn + n + szt + ar[1] + '>' + ar[0];
  1776. sz += '</' + stn + '>';
  1777. }
  1778. return sz;
  1779. }
  1780. function getWrap(aWrap, oS, oM, argv)
  1781. {
  1782. if (!oM.fRpc && !oM.fWrapped)
  1783. return argv;
  1784. var mn = oM.opname;
  1785. var pns = oM.fLiteral ? "" : "mswsb:";
  1786. var nsq1 = oM.ns;
  1787. if (!oM.fRpc)
  1788. {
  1789. var firstArg = get1stAryItem(argv);
  1790. var oschm = getSchema(oS, firstArg);
  1791. if (firstArg.type != null)
  1792. {
  1793. argv = oschm.types[firstArg.type];
  1794. mn = firstArg.type;
  1795. }
  1796. else
  1797. {
  1798. var e = oschm.elems[firstArg.elem];
  1799. oschm = getSchema(oS, e);
  1800. mn = null;
  1801. if (oschm != null)
  1802. {
  1803. var et = oschm.types[e.type];
  1804. if (et != null)
  1805. argv = et;
  1806. mn = firstArg.elem;
  1807. }
  1808. }
  1809. nsq1 = oS.ns[firstArg.ns];
  1810. }
  1811. if (mn == null)
  1812. return argv;
  1813. var ns1 = nsq1 == null ? oS.targetns : nsq1;
  1814. var nsd1 = ' xmlns' + (oM.fLiteral ? '' : ':mswsb') + '="' + ns1 + '"';
  1815. aWrap[0] = '\n<'+ pns + mn + nsd1 + (oM.fLiteral?'':' xmlns=""');
  1816. aWrap[1] = "</" + pns + mn + ">";
  1817. return argv;
  1818. }
  1819. function encodeArgs(oS, oM, omargs, args, j, fParam)
  1820. {
  1821. var l = fParam ? 0 : args.length;
  1822. var sz = '';
  1823. var sa = '';
  1824. var aWrap = new Array("", "");
  1825. omargs = getWrap(aWrap, oS, oM, omargs);
  1826. var i = j;
  1827. for (var pn in omargs)
  1828. {
  1829. var a = omargs[pn];
  1830. if (a.elem == null && a.type == null)
  1831. return null;
  1832. if (!fParam && i >= l)
  1833. break;
  1834. var argi = fParam ? args[pn] : args[i++];
  1835. if (argi == null)
  1836. continue;
  1837. if (a.fAttrib)
  1838. sa += encodeAttrib(oS, argi, a);
  1839. else
  1840. sz += serPart(oS, oM, a, argi);
  1841. }
  1842. return aWrap[0] + sa + (aWrap[0].length > 0 ? ">" : "") + sz + aWrap[1];
  1843. }
  1844. function returnResult(oCall, r)
  1845. {
  1846. hideProgress();
  1847. if (oCall.co.async == false)
  1848. {
  1849. return r;
  1850. }
  1851. if (oCall.cb == null)
  1852. {
  1853. var evt = createEventObject();
  1854. evt.result = r;
  1855. try { eventResult.fire(evt); } catch (e) {};
  1856. }
  1857. else
  1858. {
  1859. try { oCall.cb(r); } catch (e) {};
  1860. }
  1861. }
  1862. function decTZ(s)
  1863. {
  1864. var a = s.split(':');
  1865. if (a.length == 0)
  1866. return 0;
  1867. var h = parseInt(a[0],10);
  1868. return (-h)*60 + (a.length > 1 ? ((h > 0 ? -1:1) * parseInt(a[1],10)) : 0);
  1869. }
  1870. function applyTZ(d, tzo)
  1871. {
  1872. d.setTime(d.getTime() + (tzo - d.getTimezoneOffset()) * 60000);
  1873. }
  1874. function decDate(d, s)
  1875. {
  1876. var a = s.split('-');
  1877. if (a.length < 3)
  1878. return;
  1879. d.setYear(a[0]);
  1880. d.setMonth(parseInt(a[1], 10) - 1);
  1881. d.setDate(a[2]);
  1882. var tzo = d.getTimezoneOffset();
  1883. var tzi = s.indexOf('+');
  1884. if (a.length >= 4)
  1885. tzo = -decTZ(a[3]);
  1886. else if (tzi > 0)
  1887. tzo = decTZ(s.substring(tzi, s.length));
  1888. else
  1889. return;
  1890. applyTZ(d, tzo);
  1891. }
  1892. function decTime(d, s)
  1893. {
  1894. var tzi = s.indexOf('+');
  1895. if (tzi < 0)
  1896. tzi = s.indexOf('-');
  1897. var a = s.split(':');
  1898. if (a.length < 3)
  1899. return;
  1900. d.setHours(a[0]);
  1901. d.setMinutes(a[1]);
  1902. d.setSeconds(parseInt(a[2], 10));
  1903. var msec = a[2].split('.')[1];
  1904. if (msec != null && d.setMilliseconds != null)
  1905. d.setMilliseconds(parseInt(msec.substring(0, 3, 10)));
  1906. applyTZ(d, tzi < 0 ? 0 : decTZ(s.substring(tzi, s.length)));
  1907. }
  1908. function decodePrimitive(os, st, o)
  1909. {
  1910. var r = o.hasChildNodes() ? o.firstChild.nodeValue : o.nodeValue;
  1911. if (r == null)
  1912. {
  1913. if (_st[st] == null || _st[st] == 1)
  1914. return '';
  1915. return null;
  1916. }
  1917. switch(_st[st])
  1918. {
  1919. case 0:
  1920. try
  1921. {
  1922. r = eval(r);
  1923. }
  1924. catch(e)
  1925. {
  1926. }
  1927. break;
  1928. case 1 :
  1929. break;
  1930. case 3 :
  1931. case 4:
  1932. var aXmlDT = r.split("T");
  1933. r = new Date();
  1934. if (aXmlDT.length > 0)
  1935. {
  1936. decDate(r, aXmlDT[0]);
  1937. if (aXmlDT.length > 1)
  1938. decTime(r, aXmlDT[1]);
  1939. }
  1940. break;
  1941. case 5:
  1942. var s = r;
  1943. r = new Date();
  1944. decTime(r, s);
  1945. break;
  1946. case 6 :
  1947. r = decb64(r, false); break;
  1948. case 7 :
  1949. r = decb64(r, true); break;
  1950. default:
  1951. break;
  1952. }
  1953. return r;
  1954. }
  1955. function getAryInfo(oS,o)
  1956. {
  1957. var oAt=o.attributes.getQualifiedItem("arrayType",oS.ns[oS.qlt["soapenc"]]);
  1958. if (oAt == null)
  1959. return null;
  1960. var at = new Array();
  1961. var asa= oAt.value.split("[");
  1962. if (asa.length > 1)
  1963. parseArrayType(at, asa[1]);
  1964. else
  1965. at[0] = o.childNodes.length;
  1966. return at;
  1967. }
  1968. function decodeArray(c, a, s, d, o, os, osc, t, e, aNodes, fSimple)
  1969. {
  1970. for (var i = 0; i < s[d-1]; i++)
  1971. {
  1972. if (d == s.length)
  1973. a[i] = decodeAryItem(os, osc, t, e, o[c++], aNodes, fSimple);
  1974. else
  1975. {
  1976. a[i] = new Array();
  1977. c = decodeArray(c, a[i], s, d+1, o, os, osc, t, e, aNodes, fSimple);
  1978. }
  1979. }
  1980. return c;
  1981. }
  1982. function decodeAryItem(os, osc, t, e, v, aNodes, fSimple)
  1983. {
  1984. if (fSimple)
  1985. return decodePrimitive(os, e.type, v);
  1986. if (e.type == "anyType")
  1987. return v;
  1988. var sr = getAttrib(v, "href");
  1989. if (sr != null && sr.charAt(0) == '#')
  1990. v = aNodes[sr.substring(1, sr.length)];
  1991. var e1 = getAryElem(os, osc, e);
  1992. if (e1 == e || e1 == null)
  1993. return decodeType(os, t, v, aNodes);
  1994. else
  1995. return decodeElem(os, e1, v, aNodes);
  1996. }
  1997. function getAryElem(os, oschm, e)
  1998. {
  1999. if (oschm == null)
  2000. return null;
  2001. var e1 = get1stAryItem(oschm.types[e.type]);
  2002. return (e1 != null && e1.fArray) ? e1 : null;
  2003. }
  2004. function decodeElem(os, e, o, aNodes)
  2005. {
  2006. var oschm = getSchema(os, e);
  2007. if (isSimpleType(os, oschm, e) && !e.fArray)
  2008. {
  2009. var stype = oschm == null ? e.type : oschm.sTypes[e.type];
  2010. return decodePrimitive(os, stype, o);
  2011. }
  2012. var ae = e.fArray ? e : getAryElem(os, oschm, e)
  2013. if (ae != null)
  2014. {
  2015. var ai = getAryInfo(os, o);
  2016. var o2 = o.childNodes;
  2017. if (ai == null)
  2018. {
  2019. ai = ae.sizeArray;
  2020. if (ai == null)
  2021. {
  2022. ai = new Array();
  2023. ai[0] = o2.length;
  2024. }
  2025. }
  2026. if (ai.length == 1 && ai[0] == null)
  2027. ai[0] = o2.length;
  2028. oschm = getSchema(os, ae);
  2029. var r = new Array();
  2030. var fSimple = isSimpleType(os, oschm, ae);
  2031. decodeArray(0, r, ai, 1, o2, os, oschm,
  2032. fSimple ? null : oschm.types[ae.type], ae, aNodes, fSimple);
  2033. return r;
  2034. }
  2035. if (oschm == null)
  2036. return null;
  2037. var t1 = oschm.types[e.type];
  2038. if (t1 == null)
  2039. {
  2040. return o;
  2041. }
  2042. return decodeType(os, t1, o, aNodes);
  2043. }
  2044. function decodeType(os, ot, o, aNodes)
  2045. {
  2046. if (ot == null)
  2047. return null;
  2048. var j = -1;
  2049. if (typeof ot.type == 'string')
  2050. return decodeElem(os, ot, o, aNodes);
  2051. var or = new Array();
  2052. for (var sn in ot)
  2053. {
  2054. j++;
  2055. t1 = ot[sn];
  2056. if (t1.fAttrib == true)
  2057. {
  2058. var attrib = o.attributes.getNamedItem(sn);
  2059. if (attrib != null)
  2060. or[sn] = attrib.value;
  2061. continue;
  2062. }
  2063. var o1 = o.selectSingleNode(sn);
  2064. var fHasKids = o1 != null;
  2065. if (o1 ==null)
  2066. o1 = getAryInfo(os,o)==null&&o.hasChildNodes() ? o.childNodes[j]:o;
  2067. if (o1 == null)
  2068. continue;
  2069. var st = t1.type;
  2070. if (st == null)
  2071. {
  2072. var oschm = getSchema(os, t1);
  2073. if (t1.elem == null || oschm == null)
  2074. or[sn] = null;
  2075. else
  2076. or[sn] = decodeElem(os, oschm.elems[t1.elem], o1, aNodes);
  2077. continue;
  2078. }
  2079. if (!o1.hasChildNodes())
  2080. {
  2081. var sr = null;
  2082. sr = getAttrib(o1, "href");
  2083. if (sr != null && sr.charAt(0) == '#')
  2084. {
  2085. o1 = aNodes[sr.substring(1, sr.length)];
  2086. }
  2087. else if (isSimpleType(os, getSchema(os, t1), t1))
  2088. {
  2089. or[sn] = decodePrimitive(os, st, o1);
  2090. continue;
  2091. }
  2092. else if (!fHasKids)
  2093. {
  2094. or[sn] = null;
  2095. continue;
  2096. }
  2097. }
  2098. or[sn] = decodeElem(os, t1, o1, aNodes);
  2099. }
  2100. return or;
  2101. }
  2102. function processResult(oC, oResult)
  2103. {
  2104. var r = new Object();
  2105. r.id = oC.id;
  2106. r.error = true;
  2107. if (oResult == null)
  2108. {
  2109. if (oC.oM.fOneWay)
  2110. r.error = false;
  2111. else
  2112. r.errorDetail = _errUnknownS;
  2113. return returnResult(oC, r);
  2114. }
  2115. var pf = oResult.prefix;
  2116. var ns = pf == null || pf == "" ? "" : (pf + ":");
  2117. var oS = _sdl[oC.service];
  2118. if (oS == null || oS.fPending)
  2119. {
  2120. r.errorDetail = _errNotReady;
  2121. return returnResult(oC, r);
  2122. }
  2123. var oHeader = oResult.selectSingleNode(ns + "Header");
  2124. if (oHeader != null)
  2125. {
  2126. var ht = oC.oM.hdrsOut;
  2127. var rh = new Array();
  2128. var oHdrs = oHeader.childNodes;
  2129. var nodesRef = new Array();
  2130. for (var i = 0; i < oHdrs.length; i++)
  2131. {
  2132. if (ht[i] == null)
  2133. break;
  2134. var he = ht[i].type;
  2135. if (he.elem != null)
  2136. {
  2137. he = getSchema(oS, he).elems[he.elem];
  2138. rh[i] = decodeElem(oS, he, oHdrs[i], nodesRef);
  2139. }
  2140. else if (he.type != null)
  2141. {
  2142. he = getSchema(oS, he).types[he.type];
  2143. rh[i] = decodeType(oS, he, oHdrs[i], nodesRef);
  2144. }
  2145. }
  2146. if (ht.length == 1)
  2147. r.SOAPHeader = rh[0];
  2148. else
  2149. r.SOAPHeader = rh;
  2150. }
  2151. var oBody = oResult.selectSingleNode(ns + "Body");
  2152. if (oBody == null)
  2153. {
  2154. r.errorDetail = _errInvalRes;
  2155. return returnResult(oC, r);
  2156. }
  2157. var aryFault = oBody.selectNodes(ns + "Fault");
  2158. if (aryFault.length > 0)
  2159. {
  2160. r.errorDetail = new Object();
  2161. var ac = aryFault[0].selectNodes(ns+"faultcode");
  2162. if (ac.length == 0)
  2163. ac = aryFault[0].selectNodes("faultcode");
  2164. r.errorDetail.code=ac.length > 0 ? ac[0].firstChild.nodeValue:"Unknown";
  2165. var as = aryFault[0].selectNodes(ns+"faultstring");
  2166. if (as.length == 0)
  2167. as = aryFault[0].selectNodes("faultstring");
  2168. if (as.length > 0 && as[0].hasChildNodes())
  2169. r.errorDetail.string= as[0].firstChild.nodeValue;
  2170. else
  2171. r.errorDetail.string= "";
  2172. r.errorDetail.raw = oResult;
  2173. return returnResult(oC, r);
  2174. }
  2175. r.error = false;
  2176. r.raw   = oResult;
  2177. var args = oC.oM.response.args;
  2178. var l = oC.oM.response.argl;
  2179. if (args == null || l == 0)
  2180. {
  2181. r.value = null;
  2182. return returnResult(oC, r);
  2183. }
  2184. var arg0 = get1stAryItem(args);
  2185. var o = oC.oM.fRpc || oC.oM.fWrapped ? oBody.firstChild : oBody;
  2186. if (o == null)
  2187. {
  2188. r.value = null;
  2189. return returnResult(oC, r);
  2190. }
  2191. if (!oC.oM.fRpc && oC.oM.fWrapped)
  2192. {
  2193. var oschm = oS.schemas[oS.ns[arg0.ns]];
  2194. if (oschm != null)
  2195. {
  2196. if (arg0.elem != null)
  2197. {
  2198. arg0 = oschm.elems[arg0.elem];
  2199. if (isSimpleType(oS, getSchema(oS, arg0), arg0))
  2200. {
  2201. args = new Array();
  2202. args[arg0.name] = arg0;
  2203. }
  2204. else
  2205. args = oschm.types[arg0.type];
  2206. }
  2207. else
  2208. args = oschm.types[arg0.type];
  2209. }
  2210. l = getArySize(args);
  2211. }
  2212. var aryNwId = o.selectNodes("//*[@id]");
  2213. var aNodes = new Array();
  2214. for (var i = 0; i < aryNwId.length; i++)
  2215. {
  2216. aNodes[getAttrib(aryNwId[i], "id")] = aryNwId[i];
  2217. }
  2218. var ar = decodeType(oS, args, o, aNodes);
  2219. if (l == 1)
  2220. {
  2221. for (var i in ar)
  2222. {
  2223. r.value = ar[i];
  2224. break;
  2225. }
  2226. }
  2227. else
  2228. r.value = ar;
  2229. return returnResult(oC, r);
  2230. }
  2231. function hideProgress()
  2232. {
  2233. if (_mProg == null || _mProg.parentElement == null)
  2234. return;
  2235. element.document.body.removeChild(_mProg);
  2236. }
  2237. function getResult(oC)
  2238. {
  2239. if (oC == null) return;
  2240. var oS = _sdl[oC.service];
  2241. var xmlHttp = oC.oXmlHttp.xmlHttp;
  2242. if (xmlHttp == null || xmlHttp.readyState != 4) return;
  2243. if (oC.fDone)
  2244. return;
  2245. oC.fDone = true;
  2246. if (xmlHttp.responseXML.parseError.errorCode != 0)
  2247. {
  2248. _errUnknownS.raw = xmlHttp.responseText;
  2249. returnError(oC, 4);
  2250. }
  2251. else
  2252. {
  2253. try
  2254. {
  2255. processResult(oC, xmlHttp.responseXML.documentElement);
  2256. }
  2257. catch (e)
  2258. {
  2259. returnError(oC, 7);
  2260. }
  2261. }
  2262. oC.oXmlHttp.fFree = true;
  2263. callNext(oS);
  2264. }
  2265. function getJsArrayItem(a)
  2266. {
  2267. var s = "a";
  2268. for (var i = 1; i < arguments.length; i++)
  2269. s += "[" + arguments[i] + "]";
  2270. var ai = null;
  2271. try {ai = eval(s) } catch(e) {};
  2272. return ai;
  2273. }
  2274. function getJsArraySize(a)
  2275. {
  2276. return a.length;
  2277. }
  2278. function getJsArrayDimensions(a)
  2279. {
  2280. var x = a;
  2281. var ai = new Array();
  2282. var ia = 0;
  2283. while (typeof(x) == "object" && x.length != null && x[x.length-1] != null)
  2284. {
  2285. ai[ia++] = x.length;
  2286. x = x[0];
  2287. }
  2288. return ai;
  2289. }
  2290. helperUtils = new Object();
  2291. helperUtils.getJsArrayItem = getJsArrayItem;
  2292. helperUtils.getJsArraySize = getJsArraySize;
  2293. helperUtils.getJsArrayDimensions = getJsArrayDimensions;
  2294. </SCRIPT>