soap_page.xsl 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. ## HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®. All rights reserved.
  4. -->
  5. <!DOCTYPE xsl:stylesheet [
  6. <!ENTITY nbsp "&#160;">
  7. <!ENTITY apos "&#39;">
  8. ]>
  9. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"
  10. exclude-result-prefixes="fo">
  11. <xsl:output method="html" indent="yes" omit-xml-declaration="yes"
  12. doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/>
  13. <!-- ===============================================================================
  14. parameters
  15. ================================================================================ -->
  16. <xsl:param name="pageName" select="'SOAP Test'"/>
  17. <xsl:param name="serviceName" select="'FormTest'"/>
  18. <xsl:param name="methodName" select="'BasicTest'"/>
  19. <xsl:param name="destination" select="'zz'"/>
  20. <xsl:param name="header" select="'xx'"/>
  21. <xsl:param name="soapbody" select="'yy'"/>
  22. <xsl:param name="inhouseUser" select="false()"/>
  23. <xsl:param name="showhttp" select="false()"/>
  24. <!-- ===============================================================================-->
  25. <xsl:template match="/">
  26. <html>
  27. <head>
  28. <title>Soap Test Page</title>
  29. <link rel="stylesheet" type="text/css" href="/esp/files/yui/build/fonts/fonts-min.css" />
  30. <link rel="stylesheet" type="text/css" href="/esp/files/css/espdefault.css" />
  31. <script type="text/javascript" src="/esp/files/get_input.js"/>
  32. <script type="text/javascript" src="/esp/files/stack.js"/>
  33. <script type="text/javascript" src="/esp/files/stringbuffer.js"/>
  34. <script type="text/javascript">
  35. var showhttp = '<xsl:value-of select="$showhttp"/>';
  36. <![CDATA[
  37. var xmlhttp = null;
  38. function isSpace(ch) {
  39. if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n')
  40. return true;
  41. return false;
  42. }
  43. // return true if succeeded
  44. function loadXMLDoc(url)
  45. {
  46. // code for Mozilla, etc.
  47. if (window.XMLHttpRequest) {
  48. xmlhttp=new XMLHttpRequest();
  49. }
  50. // code for IE
  51. else if (window.ActiveXObject) {
  52. try {
  53. xmlhttp=new ActiveXObject("Msxml2.XMLHTTP.4.0");
  54. } catch (e) {
  55. try {
  56. xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
  57. } catch (e) {
  58. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  59. }
  60. }
  61. if (xmlhttp == null) {
  62. alert("Can not create XMLHTTP in IE");
  63. return false;
  64. }
  65. }
  66. if (xmlhttp) {
  67. xmlhttp.onreadystatechange = xmlhttpChange;
  68. // alert("url: "+url);
  69. xmlhttp.open("POST",url);
  70. //Set headers
  71. try {
  72. var header = document.getElementById("req_header").value;
  73. var lines = header.split('\n');
  74. for (var i = 0; i<lines.length;i++) {
  75. var line = lines[i];
  76. var idx = line.indexOf(':');
  77. if (idx <= 0) {
  78. alert("Invalid header line: "+line);
  79. return false;
  80. }
  81. //alert("Set header: " + line.substring(0, idx) + "=" +line.substring(idx+1,line.length));
  82. xmlhttp.setRequestHeader(line.substring(0, idx), line.substring(idx+1,line.length));
  83. }
  84. } catch (e) {
  85. alert("Exception when setRequestHeader(): "+e);
  86. }
  87. // alert("Request: "+document.getElementById("req_body").value);
  88. var xml = document.getElementById("req_body").value;
  89. // alert("Trying: url="+url+"\nuser="+user+"\npasswd="+passwd+"\nxml="+xml);
  90. var button = document.getElementById("sendButton");
  91. if (button)
  92. {
  93. button.value = "Please wait ...";
  94. button.disabled = true;
  95. }
  96. document.getElementById("body").style.cursor = "wait";
  97. xmlhttp.send(xml);
  98. }
  99. return true;
  100. }
  101. function xmlEncode(val)
  102. {
  103. return val.toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");
  104. }
  105. function getAttrs(node)
  106. {
  107. var attrs = node.attributes;
  108. if (attrs==null)
  109. return "";
  110. var s = "";
  111. for (var i = 0; i<attrs.length; i++) {
  112. var node = attrs.item(i);
  113. s += ' ' + node.nodeName + '=' + '"' + xmlEncode(node.nodeValue) + '"';
  114. }
  115. //alert("Node: "+node.tagName + "; attrs=" + node.attributes + "; s="+s);
  116. return s;
  117. }
  118. function allSpaces(s)
  119. {
  120. if (s==null) return true;
  121. for (var i=0; i<s.length; i++)
  122. if ( !isSpace(s.charAt(i)) )
  123. return false;
  124. return true;
  125. }
  126. function toXML2(buf, tree)
  127. {
  128. //alert("toXML2: name="+tree.tagName + "; type="+tree.nodeType);
  129. switch (tree.nodeType)
  130. {
  131. case 1: // document.ELEMENT_NODE:
  132. var count = tree.childNodes.length;
  133. if (count==0) {
  134. buf.push("<" + tree.tagName + getAttrs(tree) + "/>");
  135. } else {
  136. var val = "";
  137. var started = false;
  138. for (var i=0; i<count; i++)
  139. {
  140. var node = tree.childNodes[i];
  141. switch (node.nodeType)
  142. {
  143. case 3: // document.TEXT_NODE:
  144. if (!allSpaces(node.nodeValue))
  145. val += xmlEncode(node.nodeValue);
  146. //else alert("Ignore text node: ["+node.nodeValue+"]");
  147. break;
  148. case 8: // document.COMMENT_NODE:
  149. val += "<!" + "--"+node.nodeValue+"--" + ">";
  150. break;
  151. case 4: // document.CDATA_SECTION_NODE:
  152. val += "<![" + "CDATA[" + node.nodeValue + "]]" + ">";
  153. break;
  154. case 7: // document.PROCESSING_INSTRUCTION_NODE:
  155. val += "<?"+node.target + " " + node.data + "?>";
  156. break;
  157. case 1: // document.ELEMENT_NODE:
  158. if (!started) {
  159. buf.push( "<"+tree.tagName+getAttrs(tree)+">");
  160. started = true;
  161. }
  162. if (val.length>0) {
  163. buf.push(val);
  164. val = '';
  165. }
  166. toXML2(buf, node);
  167. break;
  168. default:
  169. alert("Unhandled node [1]: <" + node.tagName + ">; type: " + node.nodeType );
  170. }
  171. }
  172. if (!started)
  173. buf.push( "<"+tree.tagName+getAttrs(tree) + ">");
  174. buf.push(val + "</" + tree.tagName + ">");
  175. }
  176. break;
  177. case 7: // document.PROCESSING_INSTRUCTION_NODE:
  178. buf.push( "<?"+tree.target + " " + tree.data + "?>");
  179. break;
  180. case 8: // document.COMMENT_NODE:
  181. buf.push("<!" + "--"+node.nodeValue+"--" + ">");
  182. break;
  183. defailt:
  184. alert("Unhandled node [2]: <" + tree.tagName + ">; type: " + tree.nodeType );
  185. }
  186. //alert("buf = " + buf.join('|'));
  187. }
  188. function toXML(tree)
  189. {
  190. var buf = new Array();
  191. if (tree)
  192. toXML2(buf,tree);
  193. return buf.join('');
  194. }
  195. function toXMLIndented2(buf, tree, indent)
  196. {
  197. //alert("toXML2: name="+tree.tagName + "; type="+tree.nodeType);
  198. switch (tree.nodeType)
  199. {
  200. case 1: // document.ELEMENT_NODE:
  201. var count = tree.childNodes.length;
  202. if (count==0) {
  203. buf.push(indent + "<" + tree.tagName + getAttrs(tree) + "/>");
  204. } else {
  205. var val = "";
  206. var started = false;
  207. for (var i=0; i<count; i++)
  208. {
  209. var node = tree.childNodes[i];
  210. switch (node.nodeType)
  211. {
  212. case 3: // document.TEXT_NODE:
  213. if (!allSpaces(node.nodeValue))
  214. val += xmlEncode(node.nodeValue);
  215. //alert("Text node: ["+node.nodeValue+"]");
  216. break;
  217. case 8: // document.COMMENT_NODE:
  218. val += "<!" + "--"+node.nodeValue+"--" + ">";
  219. break;
  220. case 4: // document.CDATA_SECTION_NODE:
  221. val += "<![" + "CDATA[" + node.nodeValue + "]]" + ">";
  222. break;
  223. case 7: // document.PROCESSING_INSTRUCTION_NODE:
  224. if (val.length==0)
  225. val += indent + " <?"+node.target + " " + node.data + "?>\n";
  226. else // in mixed content environment
  227. val += "<?"+node.target + " " + node.data + "?>";
  228. break;
  229. case 1: // document.ELEMENT_NODE:
  230. if (!started) {
  231. buf.push( indent + "<"+tree.tagName+getAttrs(tree) + ">");
  232. started = true;
  233. }
  234. if (val.length>0) {
  235. buf.push(val);
  236. val = '';
  237. }
  238. toXMLIndented2(buf, node,indent+' ');
  239. break;
  240. default:
  241. alert("Unhandled node [1]: <" + node.tagName + ">; type: " + node.nodeType );
  242. }
  243. }
  244. if (!started)
  245. buf.push( indent + "<"+tree.tagName+getAttrs(tree) + ">" + val + "</" + tree.tagName + ">");
  246. else
  247. buf.push(indent + val + "</" + tree.tagName + ">");
  248. }
  249. break;
  250. case 7: // document.PROCESSING_INSTRUCTION_NODE:
  251. buf.push(indent+ "<?"+tree.target + " " + tree.data + "?>");
  252. break;
  253. case 8: // document.COMMENT_NODE:
  254. buf.push("<!" + "--"+node.nodeValue+"--" + ">");
  255. break;
  256. defailt:
  257. alert("Unhandled node [2]: <" + tree.tagName + ">; type: " + tree.nodeType );
  258. }
  259. //alert("buf = " + buf.join('|'));
  260. }
  261. function toXMLIndented(tree)
  262. {
  263. var buf = new Array();
  264. if (tree)
  265. toXMLIndented2(buf,tree,"");
  266. return buf.join('\n');
  267. }
  268. function setResponseBodyHeader()
  269. {
  270. if (document.getElementById("prettify_resp").checked && xmlhttp.responseXML && xmlhttp.responseXML.documentElement)
  271. document.getElementById("resp_body").value = prettifyXMLDom(xmlhttp.responseXML);
  272. else
  273. document.getElementById("resp_body").value = xmlhttp.responseText;
  274. if (showhttp == 'true')
  275. document.getElementById("resp_header").value = xmlhttp.getAllResponseHeaders();
  276. if (xmlhttp.responseXML && xmlhttp.responseXML.parseError && xmlhttp.responseXML.parseError.errorCode!=0)
  277. {
  278. var parseError = xmlhttp.responseXML.parseError;
  279. alert("\nError in line " + parseError.line + "\nposition " + parseError.linePos + "\nError Code: " + parseError.errorCode + "\nError Reason: " + parseError.reason + "\nError Line: " + parseError.srcText);
  280. }
  281. }
  282. function xmlhttpChange()
  283. {
  284. // if xmlhttp shows "loaded"
  285. if (xmlhttp.readyState==4)
  286. {
  287. var button = document.getElementById("sendButton");
  288. if (button)
  289. {
  290. button.value = "Send Request";
  291. button.disabled = false;
  292. }
  293. document.getElementById("body").style.cursor = "default";
  294. // if "OK"
  295. if (xmlhttp.status==200)
  296. setResponseBodyHeader();
  297. else
  298. {
  299. setResponseBodyHeader();
  300. var msg = "Problem occurred in response:\n ";
  301. msg += "Status Code: " + xmlhttp.status+"\n";
  302. msg += "Messsage: "+xmlhttp.statusText + "\n";
  303. msg += "Response: see Response Body";
  304. alert(msg);
  305. }
  306. }
  307. }
  308. function onSendRequest()
  309. {
  310. // check well-formness
  311. if (document.getElementById("check_req").checked)
  312. {
  313. var doc = parseXmlString(document.getElementById("req_body").value);
  314. if (!doc) return;
  315. }
  316. // clear
  317. document.getElementById("resp_body").value = "";
  318. if (showhttp == 'true')
  319. document.getElementById("resp_header").value = "";
  320. var url = "]]><xsl:value-of select="$destination"/><![CDATA[";
  321. loadXMLDoc(url);
  322. return true;
  323. }
  324. //-------------------------------------------------------------------
  325. // mozilla only
  326. function checkForParseError (xmlDocument)
  327. {
  328. var errorNamespace = 'http://www.mozilla.org/newlayout/xml/parsererror.xml';
  329. var documentElement = xmlDocument.documentElement;
  330. var parseError = { errorCode : 0 };
  331. if (documentElement.nodeName == 'parsererror' &&
  332. documentElement.namespaceURI == errorNamespace) {
  333. parseError.errorCode = 1;
  334. var sourceText = documentElement.getElementsByTagNameNS(errorNamespace, 'sourcetext')[0];
  335. if (sourceText != null) {
  336. parseError.srcText = sourceText.firstChild.data
  337. }
  338. parseError.reason = documentElement.firstChild.data;
  339. }
  340. return parseError;
  341. }
  342. function parseXmlString(xml)
  343. {
  344. var xmlDoc = null;
  345. try {
  346. var dom = new DOMParser();
  347. xmlDoc = dom.parseFromString(xml, 'text/xml');
  348. var error = checkForParseError(xmlDoc);
  349. if (error.errorCode!=0)
  350. {
  351. alert(error.reason + "\n" + error.srcText);
  352. return null;
  353. }
  354. } catch (e) {
  355. try {
  356. xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  357. xmlDoc.async="false";
  358. xmlDoc.loadXML(xml);
  359. if (xmlDoc.parseError != 0)
  360. {
  361. alert("XML Parse Error: " + xmlDoc.parseError.reason);
  362. return null;
  363. }
  364. } catch(e) {
  365. alert("Error: " + e.name + "\n" + e.message);
  366. return null;
  367. }
  368. }
  369. if (!xmlDoc)
  370. alert("Create xmlDoc failed! You browser is not supported yet.");
  371. return xmlDoc;
  372. }
  373. function getRootElement(xmlDom)
  374. {
  375. var root = null;
  376. if (xmlDom)
  377. {
  378. root = xmlDom.firstChild;
  379. if (root && root.nodeType!=1) // IE treat <?xml ?> as first child
  380. {
  381. //alert("firstChild type = " + root.nodeType);
  382. root = xmlDom.childNodes[1];
  383. }
  384. }
  385. return root;
  386. }
  387. function isBlank(s)
  388. {
  389. var len = s ? s.length : 0;
  390. for (var i=0; i<len; i++)
  391. {
  392. var ch = s.charAt(i);
  393. if (ch != ' ' && ch != '\t' && ch!='\n')
  394. return false;
  395. }
  396. return true;
  397. }
  398. //-------------------------------------------------------------------
  399. function hasAttr(tree)
  400. {
  401. // some browser (such as IE) does not support hasAttributes()
  402. if (tree.hasAttributes)
  403. return tree.hasAttributes();
  404. else
  405. return tree.attributes!=null && tree.attributes.length>0;
  406. }
  407. function removeEmptyNodes(tree, remove_empty, remove_zero)
  408. {
  409. // alert("Node type: " + tree.nodeType + "\nNode value:"+tree.nodeValue+"\nTag name:"+tree.tagName);
  410. if (tree.nodeType==1) // ELEMENT_NODE
  411. {
  412. var count = tree.childNodes.length;
  413. if (count==0 && !hasAttr(tree))
  414. return null;
  415. for (var i = count-1; i>=0; i--) // do backward so the remove would not invalid the list
  416. {
  417. var node = tree.childNodes[i];
  418. var newnode = removeEmptyNodes(node, remove_empty, remove_zero);
  419. if (!newnode)
  420. tree.removeChild(node);
  421. else
  422. tree.replaceChild(newnode,node);
  423. }
  424. return (tree.hasChildNodes() || hasAttr(tree)) ? tree : null;
  425. } else if (tree.nodeType==3) {
  426. if (!hasAttr(tree) && ((remove_empty && isBlank(tree.nodeValue)) || (remove_zero && tree.nodeValue=='0')) )
  427. return null;
  428. }
  429. return tree;
  430. }
  431. function getFirstElementNode(tree)
  432. {
  433. if (tree)
  434. {
  435. var nodes = tree.childNodes;
  436. for (var i=0; i<nodes.length; i++)
  437. {
  438. var node = nodes[i];
  439. if (node.nodeType == 1)
  440. return node;
  441. }
  442. }
  443. return null;
  444. }
  445. function clearEmptySoapFields(doc, root, remove_empty, remove_zero)
  446. {
  447. var body = getFirstElementNode(root);
  448. if (!body) return null;
  449. var req = getFirstElementNode(body);
  450. if (!req) return null;
  451. var reqTag = req.tagName;
  452. var newreq = removeEmptyNodes(req, remove_empty, remove_zero);
  453. if (!newreq)
  454. newreq = doc.createElement(reqTag);
  455. body.replaceChild(newreq,req);
  456. return root;
  457. }
  458. function clearEmptyFields(xml, remove_empty, remove_zero)
  459. {
  460. var doc = parseXmlString(xml);
  461. if (!doc) return null;
  462. var root = doc.documentElement;
  463. if (!root) return null;
  464. if (root.getLocalName=='Envelope')
  465. return clearEmptySoapFields(doc, root);
  466. else
  467. {
  468. var reqTag = root.tagName;
  469. var newreq = removeEmptyNodes(root, remove_empty, remove_zero);
  470. if (!newreq)
  471. newreq = doc.createElement(reqTag);
  472. doc.replaceChild(newreq,root);
  473. }
  474. return root;
  475. }
  476. function onClearEmptyFields(remove_empty, remove_zero)
  477. {
  478. var ctrl = document.getElementById("req_body");
  479. var xml = ctrl.value;
  480. var tree = clearEmptyFields(xml, remove_empty, remove_zero);
  481. if (tree)
  482. {
  483. var newxml;
  484. var prettify = document.getElementById("prettify_req").checked;
  485. if (prettify)
  486. newxml = toXMLIndented(tree);
  487. else
  488. newxml = toXML(tree);
  489. ctrl.value = '<?xml version="1.0" encoding="UTF-8"?>' + (prettify?'\n':'') + newxml;
  490. }
  491. }
  492. function prettifyXML(inXML)
  493. {
  494. var doc = parseXmlString(inXML);
  495. return prettifyXMLDom(doc);
  496. }
  497. function prettifyXMLDom(doc)
  498. {
  499. if (doc)
  500. {
  501. // IE, Opera do not support xmlVersion, xmlEncoding
  502. var version = (doc.xmlVersion==undefined)?"1.0":doc.xmlVersion;
  503. var encoding = (doc.xmlEncoding==undefined) ? "utf-8" : doc.xmlEncoding;
  504. var xmlDeclare = '<?xml version="' + version + '" encoding="' + encoding + '"?>';
  505. return xmlDeclare + "\n" + toXMLIndented(doc.documentElement);
  506. }
  507. return "";
  508. }
  509. function onPrettifyXML(txtCtrl, chkCtrl)
  510. {
  511. var ctrl = document.getElementById(txtCtrl);
  512. if (isBlank(ctrl.value))
  513. return;
  514. var doc = parseXmlString(ctrl.value);
  515. var chkbox = document.getElementById(chkCtrl);
  516. var checked = chkbox.checked;
  517. var xmlDeclare = null;
  518. if (doc) {
  519. var version = (doc.xmlVersion==undefined)?"1.0":doc.xmlVersion;
  520. var encoding = (doc.xmlEncoding==undefined) ? "utf-8" : doc.xmlEncoding;
  521. xmlDeclare = '<?xml version="' + version + '" encoding="' + encoding + '"?>';
  522. doc = doc.documentElement;
  523. }
  524. else
  525. chkbox.checked = !checked;
  526. var value = ctrl.value;
  527. if (doc)
  528. {
  529. if (checked)
  530. value = toXMLIndented(doc);
  531. else
  532. value = toXML(doc);
  533. }
  534. ctrl.value = xmlDeclare + (checked?'\n':'') + value;
  535. }
  536. function constructXmlFromConciseForm(txt)
  537. {
  538. var ret = new StringBuffer();
  539. var stack = new Stack();
  540. var curIdx = 0;
  541. var len = txt.length;
  542. while (curIdx<len)
  543. {
  544. while ( isSpace(txt.charAt(curIdx)) ) { curIdx++; }
  545. if (txt.charAt(curIdx) == ']')
  546. {
  547. var tag = stack.pop();
  548. if (!tag) {
  549. var msg = "Invalid data: no tag for ]:\n";
  550. msg += txt.substr(0,curIdx+1)+ "<<ERROR<<" + txt.substring(curIdx+1);
  551. alert(msg);
  552. return null;
  553. }
  554. ret.append("</" + tag + ">");
  555. curIdx++;
  556. continue;
  557. }
  558. // parse tag
  559. var idx =curIdx;
  560. while (idx<len) {
  561. var ch = txt.charAt(idx);
  562. if (ch=='(' || ch =='[')
  563. break;
  564. idx++;
  565. }
  566. // trim spaces
  567. var end = idx-1;
  568. while ( isSpace(txt.charAt(end)) ) { end--; }
  569. var tag = txt.substring(curIdx,end+1);
  570. //alert("tag: ["+tag+']');
  571. if (ch=='(')
  572. {
  573. curIdx = idx+1;
  574. idx = txt.indexOf(')',curIdx);
  575. if (idx<0) { alert("Invalid input: not ending '(' for <"+tag+">"); return null; }
  576. ret.append('<'+tag+'>' + txt.substring(curIdx, idx) + '</' + tag + '>');
  577. curIdx = idx+1;
  578. } else if (ch=='[') {
  579. stack.push(tag);
  580. //alert("stack.push: [" + tag+']');
  581. ret.append('<' + tag + '>');
  582. curIdx = idx+1;
  583. } else {
  584. alert("Invalid input: ["+ ch + "]; only '(' or '[' is valid after tag <"+tag+">.");
  585. return null;
  586. }
  587. }
  588. return ret.toString();
  589. }
  590. function inputReturnMethod()
  591. {
  592. var txt = gWndObj.value;
  593. gWndObjRemoveWatch();
  594. if (txt!=null && txt!="")
  595. {
  596. var xml = constructXmlFromConciseForm(txt)
  597. var tagLen = gMethodName.length+2;
  598. if ( xml.substr(0, tagLen) != ('<'+gMethodName+'>') ) {
  599. alert("The request must starts with <"+gMethodName+">");
  600. return;
  601. }
  602. var head = '<?xml version="1.0" encoding="UTF-8"?>'
  603. + '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'
  604. + ' xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"'
  605. + ' xmlns="http://webservices.seisint.com/' + gServiceName + '">'
  606. + ' <soap:Body><'
  607. + gMethodName + 'Request>';
  608. var end = '</' + gMethodName + 'Request></soap:Body></soap:Envelope>';
  609. xml = head + xml.substring(tagLen, xml.length-tagLen-1) + end;
  610. document.getElementById('req_body').value = xml;
  611. /*TODO: request prettify_req. Why this does not work??
  612. var checked = document.getElementById('prettify_req').checked;
  613. if (checked) { xml = prettifyXml(xml); }
  614. alert(document.getElementById('req_body'));
  615. document.getElementById('req_body').value = xml;
  616. alert(document.getElementById('req_body').value);
  617. */
  618. }
  619. document.getElementById('import').disabled = false;
  620. }
  621. function onImportConciseRequest()
  622. {
  623. document.getElementById('import').disabled = true;
  624. showGetInputWnd('The Concise Request Text (from esp log):', 'inputReturnMethod()');
  625. }
  626. var soapBody = ']]><xsl:value-of select="$soapbody"/><![CDATA[';
  627. function setSoapBody()
  628. {
  629. var ctrl = document.getElementById("req_body");
  630. if (!ctrl) return;
  631. ctrl.value = prettifyXML(soapBody);
  632. return true;
  633. }
  634. ]]>
  635. var gServiceName = "<xsl:value-of select="$serviceName"/>";
  636. var gMethodName = "<xsl:value-of select="$methodName"/>";;
  637. </script>
  638. </head>
  639. <body class="yui-skin-sam" id="body" onload="setSoapBody()">
  640. <h3>
  641. <table cellSpacing="0" cellPadding="1" width="100%" bgColor="#4775FF" border="0" >
  642. <tr align="left">
  643. <td height="23" bgcolor="000099" align="center"><font color="#ffffff"><b><xsl:value-of select="concat(' ', $pageName, ' ')"/></b></font></td>
  644. <td height="23" align="center"><font color="#ffffff"><b><xsl:value-of select="concat($serviceName, ' / ', $methodName)"/></b></font></td>
  645. </tr>
  646. </table>
  647. </h3>
  648. <b>&nbsp;&nbsp;Destination: </b> <xsl:value-of select="$destination"/>
  649. <p/>
  650. <table width="100%">
  651. <tr><th align="left">Request: </th> <th align="left">Response: </th></tr>
  652. <tr>
  653. <td width="50%">
  654. <table width="100%" border="0" cellspacing="0" cellpadding="1">
  655. <xsl:choose>
  656. <xsl:when test="$showhttp">
  657. <tr>
  658. <td>
  659. <b>Headers:</b>
  660. </td>
  661. </tr>
  662. <tr>
  663. <td>
  664. <textarea id="req_header" style="width:100%" rows="4">
  665. <xsl:value-of select="$header"/>
  666. </textarea>
  667. </td>
  668. </tr>
  669. </xsl:when>
  670. <xsl:otherwise>
  671. <input type="hidden" id="req_header" name="req_header" value="{$header}"/>
  672. </xsl:otherwise>
  673. </xsl:choose>
  674. <tr>
  675. <td>
  676. <table width="100%">
  677. <tr> <!--td align="left"><b>Request Body:</b></td-->
  678. <td align="right">
  679. <input type="button" value="Remove Empty" onclick="onClearEmptyFields(true, false)"/>
  680. <input type="button" value="Remove Zeros" onclick="onClearEmptyFields(false, true)"/>
  681. <xsl:if test="$inhouseUser">&nbsp;<input id="import" type="button" value="Import..." onclick="onImportConciseRequest()"/></xsl:if>
  682. <input type="checkbox" id="prettify_req" checked="true" onclick="onPrettifyXML('req_body','prettify_req')">Prettify XML</input>
  683. </td></tr>
  684. </table>
  685. </td>
  686. </tr>
  687. <tr>
  688. <td>
  689. <textarea id="req_body" name="req_body" style="width:100%" rows="35" wrap="on"/>
  690. </td>
  691. </tr>
  692. </table>
  693. </td>
  694. <td width="50%">
  695. <table width="100%" border="0" cellspacing="0" cellpadding="1">
  696. <xsl:if test="$showhttp">
  697. <tr>
  698. <td>
  699. <b>Headers:</b>
  700. </td>
  701. </tr>
  702. <tr>
  703. <td>
  704. <textarea id="resp_header" cols="10" style="width:100%" rows="4" readonly="true"></textarea>
  705. </td>
  706. </tr>
  707. </xsl:if>
  708. <tr>
  709. <td>
  710. <table width="100%">
  711. <tr>
  712. <!--td> <b>Response Body:</b> </td-->
  713. <td align="right"><input type="checkbox" id="prettify_resp" checked="true" onclick="onPrettifyXML('resp_body','prettify_resp')">Prettify XML</input> </td>
  714. </tr>
  715. </table>
  716. </td>
  717. </tr>
  718. <tr>
  719. <td>
  720. <textarea id="resp_body" name="response" style="width:100%" rows="35" wrap="on" readonly="true"></textarea>
  721. </td>
  722. </tr>
  723. </table>
  724. </td>
  725. </tr>
  726. <tr>
  727. <td align="center" colspan="2">
  728. <input type="button" id="sendButton" value="Send Request" onclick="onSendRequest()"/> <input type="checkbox" checked="true" id="check_req"> Check well-formness before send</input>
  729. </td>
  730. </tr>
  731. </table>
  732. <!-- </form> -->
  733. </body>
  734. </html>
  735. </xsl:template>
  736. </xsl:stylesheet>