3 changed files with 226 additions and 0 deletions
@ -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. |
||||
@ -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> |
||||
@ -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…
Reference in new issue