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