Browse Source

initial version

master
Nicolas Massé 8 years ago
parent
commit
9ab3a3eb96
  1. 13
      README.md
  2. 75
      index.html
  3. 138
      soapui.js

13
README.md

@ -0,0 +1,13 @@
# jQuery.SOAPUI: A SwaggerUI but for SOAP Services
## Description
This jQuery module spins up a web interface over the
[jquery.soap](https://github.com/doedje/jquery.soap) plugin in order to
try a SOAP Web Service directly from your web browser.
This module has only one major pre-requisite: the SOAP service has to be exposed
through an API Gateway the supports CORS.
Hopefully, [apicast](https://github.com/3scale/apicast) does !
It is intended to be used in the 3scale developer portal.

75
index.html

@ -0,0 +1,75 @@
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>SOAPUI test page</title>
<script type='text/javascript' src='https://code.jquery.com/jquery-3.1.1.js'></script>
<script type='text/javascript' src='jquery.soap/jquery.soap.js'></script>
<script type='text/javascript' src='vkBeautify/vkbeautify.js'></script>
<script type='text/javascript' src='soapui.js'></script>
<script type='text/javascript'>
$(document).ready(function() {
$(".soapui").each(function (i, e) {
$.soapui(e, {
url: 'http://api.acme.test/ws',
HTTPHeaders: { "user-key": "<your user-key here>" },
enableLogging: true,
appendMethodToURL: false
});
});
});
</script>
<style>
.soapui span {
font-weight: bold;
}
.soapui textarea {
width: 80%;
display: block;
height: 200px;
}
.soapui input[type=text] {
width: 80%;
display: block;
}
.soapui .hidden {
display: none;
}
</style>
</head>
<body>
<h1>Get information about Spain</h1>
<div class="soapui">
<soap-action></soap-action>
<soap-body><!--
<gs:getCountryRequest xmlns:gs="http://spring.io/guides/gs-producing-web-service">
<gs:name>Spain</gs:name>
</gs:getCountryRequest>
--></soap-body>
</div>
<h1>Get information about Poland</h1>
<div class="soapui">
<soap-action></soap-action>
<soap-body><!--
<gs:getCountryRequest xmlns:gs="http://spring.io/guides/gs-producing-web-service">
<gs:name>Poland</gs:name>
</gs:getCountryRequest>
--></soap-body>
</div>
<h1>Get information about funny country</h1>
<div class="soapui">
<soap-action></soap-action>
<soap-body><!--
<gs:getCountryRequest xmlns:gs="http://spring.io/guides/gs-producing-web-service">
<gs:name>The Moon</gs:name>
</gs:getCountryRequest>
--></soap-body>
</div>
</body>
</html>

138
soapui.js

@ -0,0 +1,138 @@
/*
* soapui.js - https://github.com/nmasse-itix/soapui
* version: 0.1
*
* jQuery plugin to handle the "try it out" feature for SOAP Services
*
* License MIT
* -----------------
* The MIT License (MIT)
*
* Copyright (c) 2016 Nicolas MASSE
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Information
* -----------
*
* For information about how to use soapui, authors, changelog, the latest version, etc...
* Visit: https://github.com/nmasse-itix/soapui
*/
(function(factory) {
if(typeof module === 'object' && typeof module.exports === 'object') {
module.exports = factory(require('jquery'));
} else if (jQuery) {
factory(jQuery);
} else {
console.error('no jQuery found!')
}
})(function($) {
function soapui(root_node, soap_options) {
root_node = $(root_node); // Make sure it is a jQuery object
// Detect if vkbeautify is loaded
var vkbeautify = window.vkbeautify;
if (vkbeautify == null) {
console.log("vkbeautify not loaded, using a poor replacement for XML Pretty Printing");
vkbeautify = { xml: function (xml) {
// Poor man XML pretty printing
return xml.replace(/(>)|([^>])(?=<)/g, "$1$2\n");
} }
}
// SOAP request section
var soapActionNode = $(root_node).find("soap-action").get(0);
soapActionNode = soapActionNode != null ? $(soapActionNode) : null;
var soapAction = soapActionNode != null ? soapActionNode.text() : null;
if (soapAction != null && soapAction != "") {
soapActionNode.before("<span>SOAP Action</span>");
soapActionNode.replaceWith(function (i, e) {
return $("<input>", { value: soapAction, type: "text"});
});
} else {
soapActionNode.find("soap-action")
.remove();
}
var soapBodyNode = root_node.find("soap-body")
.contents()
.filter(function() {
return this.nodeType == Node.COMMENT_NODE;
})
.get(0);
var soapBody = soapBodyNode != null ? soapBodyNode.data : "";
var newSoapBodyNode = $("<textarea>").text(soapBody);
root_node.find("soap-body")
.replaceWith(newSoapBodyNode);
newSoapBodyNode.before("<span>SOAP Body</span>");
var button = $("<input>", { 'type': 'submit',
'value': 'Try it out !'} ).appendTo(root_node);
// SOAP Response section
var response_div = $("<div>", {'class': 'hidden'});
root_node.append(response_div);
// SOAP Request
response_div.append($("<h2>SOAP Request Sent</h2>"));
var requestNode = $("<textarea>", { "readonly": true });
requestNode.appendTo(response_div);
// SOAP Response
response_div.append($("<h2>SOAP Response Received</h2>"));
var responseNode = $("<textarea>", { "readonly": true });
responseNode.appendTo(response_div);
button.on('click', function (e) {
// stop the form to be submitted...
e.preventDefault();
// empty the request and response panes
requestNode.empty();
responseNode.empty();
// Show the request and response pane
response_div.removeClass("hidden");
// Get the SOAP Body from the HTML form
soap_options.data = newSoapBodyNode.val();
soap_options.beforeSend = function (soap) {
var request = soap.toString();
request = vkbeautify.xml(request, 2);
requestNode.text(request);
};
soap_options.success = function (soapResponse) {
soapResponse = soapResponse.toString();
soapResponse = vkbeautify.xml(soapResponse, 2);
responseNode.text(soapResponse);
};
soap_options.error = function (soapResponse) {
soapResponse = soapResponse.toString();
soapResponse = vkbeautify.xml(soapResponse, 2);
responseNode.text(soapResponse);
};
$.soap(soap_options);
});
};
return $.soapui = soapui;
});
Loading…
Cancel
Save