Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: mantisbt/mantisbt
base: f54a1910d016
...
head fork: mantisbt/mantisbt
compare: 05091f54f66a
  • 12 commits
  • 14 files changed
  • 2 commit comments
  • 1 contributor
Commits on May 24, 2013
@dregad dregad soap api: added wsdl-viewer
NuSoap offered a convenient, self-generated API documentation page. On
the other hand, the php-soap extension does not offer such functionality
and the wsdl's raw XML is not easy to read.

This commit adds Tomi Vanek's wsdl-viewer XSLT [1] to mantisconnect.wsdl
to offer a more user-friendly face to the XML.

[1] http://tomi.vanek.sk/index.php?page=wsdl-viewer
67c9dea
Commits on May 25, 2013
@dregad dregad Temp var defined in global scope should be unset() after use
Fixes #15921
41cdb92
@dregad dregad New helper_array_transpose api function
Required for issue #15774
3ee6137
@dregad dregad Fix #15774: unable to simultaneously upload > 5 files 4bb2be6
@dregad dregad Tests: fix whitespace, comments and phpDoc 92097c3
@dregad dregad Tests: fix inclusion of TestConfig.php
This way tests can be called individually
ff73a4d
@dregad dregad Tests: Strings - use string API functions
Remove hardcoded copy of string_sanitize_url()

Added require_once calls for necessary API and includes. This needed a
change in TestConfig.php to add the Mantis Root directory to the include
path.
e3b3d07
@dregad dregad Tests: Strings - fix broken test cases (& => &)
Commit c59ad8a changed the use of
ampersands in internally generated URLs
d3792dd
@dregad dregad Tests: add new Helper API test script
Currently only covers helper_array_transpose() function
a8d9c2f
@dregad dregad Tests: added function for globals declaration
MantisBT configs (defined in config_defaults_inc.php) are not
defined in the global scope when running PHPUnit. Because of this,
including 'core.php' does not work.

All 'global' configs must therefore be specifically declared as such
when API functions are needed to run tests.
593e34d
@dregad dregad Tests: improve require_mantis_core() function
New version no longer requires use of eval() to declare globals.

Also fixes a system warning caused by $g_queries_array not being
declared as global in database api.

Backport from master branch 0b53ba9fb21a77358591ad5c5a48e272e733db9f,
added workaround to avoid warnings caused by lack of require_api()
function.
fe2b85a
@dregad dregad Fix #15920: Missing config file causes cli scripts to fail silently
We now display an error message and die with exit code 1.
05091f5
View
1  api/soap/mantisconnect.wsdl
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml-stylesheet type="text/xsl" href="wsdl-viewer.xsl"?>
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://futureware.biz/mantisconnect" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://futureware.biz/mantisconnect">
<types>
<xsd:schema targetNamespace="http://futureware.biz/mantisconnect">
View
2,520 api/soap/wsdl-viewer.xsl
@@ -0,0 +1,2520 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+
+<!--
+* ====================================================================
+* wsdl-viewer.xsl
+* Version: 3.1.02
+*
+* URL: http://tomi.vanek.sk/xml/wsdl-viewer.xsl
+*
+* Author: tomi vanek
+* Inspiration: Uche Ogbui - WSDL processing with XSLT
+* http://www-106.ibm.com/developerworks/library/ws-trans/index.html
+* ====================================================================
+-->
+
+
+<!--
+* ====================================================================
+* Description:
+* wsdl-viewer.xsl is a lightweight XSLT 1.0 transformation with minimal
+* usage of any hacks that extend the possibilities of the transformation
+* over the XSLT 1.0 constraints but eventually would harm the engine independance.
+*
+* The transformation has to run even in the browser offered XSLT engines
+* (tested in IE 6 and Firefox) and in ANT "batch" processing.
+* ====================================================================
+* How to add the HTML look to a WSDL:
+* <?xml version="1.0" encoding="utf-8"?>
+* <?xml-stylesheet type="text/xsl" href="wsdl-viewer.xsl"?>
+* <wsdl:definitions ...>
+* ... Here is the service declaration
+* </wsdl:definitions>
+*
+* The web-browsers (in Windows) are not able by default automatically recognize
+* the ".wsdl" file type (suffix). For the type recognition the WSDL file has
+* to be renamed by adding the suffix ".xml" - i.e. "myservice.wsdl.xml".
+* ====================================================================
+* Constraints:
+* 1. Processing of imported files
+* 1.1 Only 1 imported WSDL and 1 imported XSD is processed
+* (well, maybe with a smarter recursive strategy this restriction could be overcome)
+* 1.2 No recursive including is supported (i.e. includes in included XSD are ignored)
+* 2. Namespace support
+* 2.1 Namespaces are not taken in account by processing (references with NS)
+* 3. Source code
+* 3.1 Only the source code allready processed by the XML parser is rendered - implications:
+* == no access to the XML head line (<?xml version="1.0" encoding="utf-8"?>)
+* == "expanded" CDATA blocks (parser processes the CDATA,
+* XSLT does not have access to the original code)
+* == no control over the code page
+* == processing of special characters
+* == namespace nodes are not rendered (just the namespace aliases)
+* ====================================================================
+* Possible improvements:
+* * Functional requirements
+* + SOAP 1.2 binding (http://schemas.xmlsoap.org/wsdl/soap12/WSDL11SOAP12.pdf)
+* + WSDL 2.0 (http://www.w3.org/TR/2006/CR-wsdl20-primer-20060327/)
+* + Recognition of WSDL patterns (interface, binding, service instance, ...)
+* - Creating an xsd-viewer.xsl for XML-Schema file viewing
+* (extracting the functionality from wsdl-viewer into separate XSLT)
+* - Check the full support of the WSDL and XSD going through the standards
+* - Real-world WSDL testing
+* - XSLT 2.0 (http://www-128.ibm.com/developerworks/library/x-xslt20pt5.html) ???
+* ? Adding more derived information
+* * to be defined, what non-trivial information can we read out from the WSDL
+* * XSLT
+* + Modularization
+* - Is it meaningful?
+* - Maybe more distribution alternatives (modular, fat monolithic, thin performance monolithic)?
+* - Distribution build automatization
+* + Dynamic page: JavaSript
+* + Performance
+* - Better code comments / documentation
+* - SOAP client form - for testing the web service (AJAX based)
+* - New XSD parser - clean-up the algorithm
+* - Complete (recursive, multiple) include support
+* ? Namespace-aware version (no string processing hacks ;-)
+* * I think, because of the goal to support as many engines as possible,
+* this requirement is unrealistic. Maybe when XSLT 2.0 will be supported
+* in a huge majority of platforms, we can rethink this point....
+* (problems with different functionality of namespace-uri XPath function by different engines)
+* * Development architecture
+* - Setup of the development infrastructure
+* - Unit testing
+* ? Collaboration platform
+* * Documentation, web
+* - Better user guide
+* ? Forum, Wiki
+* ====================================================================
+-->
+
+
+<!--
+* ====================================================================
+* History:
+* 2005-04-15 - Initial implementation
+* 2005-09-12 - Removed xsl:key to be able to use the James Clark's XT engine on W3C web-site
+* 2006-10-06 - Removed the Oliver Becker's method of conditional selection
+* of a value in a single expression (in Xalan/XSLTC this hack does not work!)
+* 2005-10-07 - Duplicated operations
+* 2006-12-08 - Import element support
+* 2006-12-14 - Displays all fault elements (not just the first one)
+* 2006-12-28 - W3C replaced silently the James Clark's XT engine with Michael Kay's closed-source Saxon!
+* wsdl-viewer.xsl will no longer support XT engine
+* 2007-02-28 - Stack-overflow bug (if the XSD element @name and @type are identic)
+* 2007-03-08 - 3.0.00 - New parsing, new layout
+* 2007-03-28 - 3.0.01 - Fix: New anti-recursion defense (no error message by recursion
+* because of dirty solution of namespace processing)
+* - Added: variables at the top to turn on/off certain details
+* 2007-03-29 - 3.0.02 - Layout clean-up for IE
+* 2007-03-29 - 3.0.03 - Fix: Anti-recursion algorithm
+* 2007-03-30 - 3.0.04 - Added: source code rendering of imported WSDL and XSD
+* 2007-04-15 - 3.0.05 - Fix: Recursive calls in element type rendering
+* - Fix: Rendering of messages (did not render the message types of complex types)
+* - Fix: Links in src. by arrays
+* - Fix: $binding-info
+* 2007-04-15 - 3.0.06 - Added: Extended rendering control ENABLE-xxx parameters
+* - Changed: Anti-recursion algorithm has recursion-depth parameter
+* 2007-07-19 - 3.0.07 - Fix: Rendering of array type in detail
+* 2007-08-01 - 3.0.08 - Fix: xsl:template name="render-type"
+* Fix: typo - "Impotred WSDL" should be "Impotred WSDL"
+* 2007-08-16 - 3.0.09 - Fix: xsl:template name="render-type" - anti recursion
+* 2007-12-05 - 3.1.00 - Modularized
+* 2007-12-23 - 3.1.01 - Terminating message by WS without interface or service definition was removed
+* (seems to be a correct state)
+* 2008-08-20 - 3.1.02 - Woden-214: Anti-recursion bypassed in xsd:choice element
+* ====================================================================
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ws="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:ws2="http://www.w3.org/ns/wsdl"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:local="http://tomi.vanek.sk/xml/wsdl-viewer"
+ version="1.0"
+ exclude-result-prefixes="ws ws2 xsd soap local">
+
+ <xsl:output method="xml" version="1.0" encoding="utf-8" indent="no"
+ omit-xml-declaration="no"
+ media-type="text/html"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
+
+ <xsl:strip-space elements="*"/>
+
+ <xsl:param name="wsdl-viewer.version">3.1.01</xsl:param>
+
+
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-global.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:param name="ENABLE-SERVICE-PARAGRAPH" select="true()"/>
+ <xsl:param name="ENABLE-OPERATIONS-PARAGRAPH" select="true()"/>
+ <xsl:param name="ENABLE-SRC-CODE-PARAGRAPH" select="true()"/>
+ <xsl:param name="ENABLE-ABOUT-PARAGRAPH" select="true()"/>
+ <xsl:param name="ENABLE-OPERATIONS-TYPE" select="true()"/>
+ <xsl:param name="ENABLE-LINK" select="true()"/>
+ <xsl:param name="ENABLE-INOUTFAULT" select="true()"/>
+ <xsl:param name="ENABLE-STYLEOPTYPEPATH" select="true()"/>
+ <xsl:param name="ENABLE-DESCRIPTION" select="true()"/>
+ <xsl:param name="ENABLE-PORTTYPE-NAME" select="true()"/>
+ <xsl:param name="ENABLE-ANTIRECURSION-PROTECTION" select="true()"/>
+ <xsl:param name="ANTIRECURSION-DEPTH">3</xsl:param>
+ <xsl:variable name="GENERATED-BY">Generated by wsdl-viewer.xsl</xsl:variable>
+ <xsl:variable name="PORT-TYPE-TEXT">Port type</xsl:variable>
+ <xsl:variable name="IFACE-TEXT">Interface</xsl:variable>
+ <xsl:variable name="SOURCE-CODE-TEXT">Source code</xsl:variable>
+ <xsl:variable name="RECURSIVE"> ... is recursive</xsl:variable>
+ <xsl:variable name="SRC-PREFIX">src.</xsl:variable>
+ <xsl:variable name="SRC-FILE-PREFIX">src.file.</xsl:variable>
+ <xsl:variable name="OPERATIONS-PREFIX">op.</xsl:variable>
+ <xsl:variable name="PORT-PREFIX">port.</xsl:variable>
+ <xsl:variable name="IFACE-PREFIX">iface.</xsl:variable>
+ <xsl:variable name="global.wsdl-name"
+ select="/*/*[(local-name() = 'import' or local-name() = 'include') and @location][1]/@location"/>
+ <xsl:variable name="consolidated-wsdl" select="/* | document($global.wsdl-name)/*"/>
+ <xsl:variable name="global.xsd-name"
+ select="($consolidated-wsdl/*[local-name() = 'types']//xsd:import[@schemaLocation] | $consolidated-wsdl/*[local-name() = 'types']//xsd:include[@schemaLocation])[1]/@schemaLocation"/>
+ <xsl:variable name="consolidated-xsd"
+ select="(document($global.xsd-name)/xsd:schema/xsd:*|/*/*[local-name() = 'types']/xsd:schema/xsd:*)[local-name() = 'complexType' or local-name() = 'element' or local-name() = 'simpleType']"/>
+ <xsl:variable name="global.service-name"
+ select="concat($consolidated-wsdl/ws:service/@name, $consolidated-wsdl/ws2:service/@name)"/>
+ <xsl:variable name="global.binding-name"
+ select="concat($consolidated-wsdl/ws:binding/@name, $consolidated-wsdl/ws2:binding/@name)"/>
+ <xsl:variable name="html-title">
+ <xsl:apply-templates select="/*" mode="html-title.render"/>
+ </xsl:variable>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-global.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-css.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:variable name="css">
+
+/**
+ wsdl-viewer.css
+*/
+
+/**
+=========================================
+ Body
+=========================================
+*/
+html {
+ background-color: teal;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+ height: auto;
+ color: white;
+ background-color: teal;
+ font: normal 80%/120% Arial, Helvetica, sans-serif;
+}
+
+#outer_box {
+ padding: 3px 3px 3px 194px;
+}
+
+#inner_box {
+ width: auto;
+ background-color: white;
+ color: black;
+ border: 1px solid navy;
+}
+
+/**
+=========================================
+ Fixed box with links
+=========================================
+*/
+#outer_links {
+ position: fixed;
+ left: 0px;
+ top: 0px;
+ margin: 3px;
+ padding: 1px;
+ z-index: 200;
+ width: 180px;
+ height: auto;
+ background-color: gainsboro;
+ padding-top: 2px;
+ border: 1px solid navy;
+}
+
+* html #outer_links /* Override above rule for IE */
+{
+ position: absolute;
+ width: 188px;
+ top: expression(offsetParent.scrollTop + 0);
+}
+
+#links {
+ margin: 1px;
+ padding: 3px;
+ background-color: white;
+ height: 350px;
+ overflow: auto;
+ border: 1px solid navy;
+}
+
+#links ul {
+ left: -999em;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ z-index: 100;
+}
+
+#links li {
+ margin: 0;
+ padding: 2px 4px;
+ width: auto;
+ z-index: 100;
+}
+
+#links ul li {
+ margin: 0;
+ padding: 2px 4px;
+ width: auto;
+ z-index: 100;
+}
+
+#links a {
+ display: block;
+ padding: 0 2px;
+ color: blue;
+ width: auto;
+ border: 1px solid white;
+ text-decoration: none;
+ white-space: nowrap;
+}
+
+#links a:hover {
+ color: white;
+ background-color: gray;
+ border: 1px solid gray;
+}
+
+
+/**
+=========================================
+ Navigation tabs
+=========================================
+*/
+
+#outer_nav {
+ background-color: yellow;
+ padding: 0;
+ margin: 0;
+}
+
+#nav {
+ height: 100%;
+ width: auto;
+ margin: 0;
+ padding: 0;
+ background-color: gainsboro;
+ border-top: 1px solid gray;
+ border-bottom: 3px solid gray;
+ z-index: 100;
+ font: bold 90%/120% Arial, Helvetica, sans-serif;
+ letter-spacing: 2px;
+}
+
+#nav ul {
+ background-color: gainsboro;
+ height: auto;
+ width: auto;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ z-index: 100;
+
+ border: 1px solid silver;
+ border-top-color: black;
+ border-width: 1px 0 9px;
+}
+
+#nav li {
+ display: inline;
+ padding: 0;
+ margin: 0;
+}
+
+#nav a {
+ position: relative;
+ top: 3px;
+ float:left;
+ width:auto;
+ padding: 8px 10px 6px 10px;
+ margin: 3px 3px 0;
+ border: 1px solid gray;
+ border-width: 2px 2px 3px 2px;
+
+ color: black;
+ background-color: silver;
+ text-decoration:none;
+ text-transform: uppercase;
+}
+
+#nav a:hover {
+ margin-top: 1px;
+ padding-top: 9px;
+ padding-bottom: 7px;
+ color: blue;
+ background-color: gainsboro;
+}
+
+#nav a.current:link,
+#nav a.current:visited,
+#nav a.current:hover {
+ background: white;
+ color: black;
+ text-shadow:none;
+ margin-top: 0;
+ padding-top: 11px;
+ padding-bottom: 9px;
+ border-bottom-width: 0;
+ border-color: red;
+}
+
+#nav a:active {
+ background-color: silver;
+ color: white;
+}
+
+
+
+/**
+=========================================
+ Content
+=========================================
+*/
+#header {
+ margin: 0;
+ padding: .5em 4em;
+ color: white;
+ background-color: red;
+ border: 1px solid darkred;
+}
+
+#content {
+ margin: 0;
+ padding: 0 2em .5em;
+}
+
+#footer {
+ clear: both;
+ margin: 0;
+ padding: .5em 2em;
+ color: gray;
+ background-color: gainsboro;
+ font-size: 80%;
+ border-top: 1px dotted gray;
+ text-align: right
+}
+
+.single_column {
+ padding: 10px 10px 10px 10px;
+ /*margin: 0px 33% 0px 0px; */
+ margin: 3px 0;
+}
+
+#flexi_column {
+ padding: 10px 10px 10px 10px;
+ /*margin: 0px 33% 0px 0px; */
+ margin: 0px 212px 0px 0px;
+}
+
+#fix_column {
+ float: right;
+ padding: 10px 10px 10px 10px;
+ margin: 0px;
+ width: 205px;
+ /*width: 30%; */
+ voice-family: "\"}\"";
+ voice-family:inherit;
+ /* width: 30%; */
+ width: 205px;
+}
+html&gt;body #rightColumn {
+ width: 205px; /* ie5win fudge ends */
+} /* Opera5.02 shows a 2px gap between. N6.01Win sometimes does.
+ Depends on amount of fill and window size and wind direction. */
+
+/**
+=========================================
+ Label / value
+=========================================
+*/
+
+.page {
+ border-bottom: 3px dotted navy;
+ margin: 0;
+ padding: 10px 0 20px 0;
+}
+
+.value, .label {
+ margin: 0;
+ padding: 0;
+}
+
+.label {
+ float: left;
+ width: 140px;
+ text-align: right;
+ font-weight: bold;
+ padding-bottom: .5em;
+ margin-right: 0;
+ color: darkblue;
+}
+
+.value {
+ margin-left: 147px;
+ color: darkblue;
+ padding-bottom: .5em;
+}
+
+strong, strong a {
+ color: darkblue;
+ font-weight: bold;
+ letter-spacing: 1px;
+ margin-left: 2px;
+}
+
+
+/**
+=========================================
+ Links
+=========================================
+*/
+
+a.local:link,
+a.local:visited {
+ color: blue;
+ margin-left: 10px;
+ border-bottom: 1px dotted blue;
+ text-decoration: none;
+ font-style: italic;
+}
+
+a.local:hover {
+ background-color: gainsboro;
+ color: darkblue;
+ padding-bottom: 1px;
+ border-bottom: 1px solid darkblue;
+}
+
+a.target:link,
+a.target:visited,
+a.target:hover
+{
+ text-decoration: none;
+ background-color: transparent;
+ border-bottom-type: none;
+}
+
+/**
+=========================================
+ Box, Shadow
+=========================================
+*/
+
+.box {
+ padding: 6px;
+ color: black;
+ background-color: gainsboro;
+ border: 1px solid gray;
+}
+
+.shadow {
+ background: silver;
+ position: relative;
+ top: 5px;
+ left: 4px;
+}
+
+.shadow div {
+ position: relative;
+ top: -5px;
+ left: -4px;
+}
+
+/**
+=========================================
+ Floatcontainer
+=========================================
+*/
+
+.spacer
+{
+ display: block;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ margin: 0;
+ padding: 0;
+ border-style: none;
+ clear: both;
+ visibility:hidden;
+}
+
+.floatcontainer:after {
+ content: ".";
+ display: block;
+ height: 0;
+ font-size:0;
+ clear: both;
+ visibility:hidden;
+}
+.floatcontainer{
+ display: inline-table;
+} /* Mark Hadley's fix for IE Mac */ /* Hides from IE Mac \*/ *
+html .floatcontainer {
+ height: 1%;
+}
+.floatcontainer{
+ display:block;
+} /* End Hack
+*/
+
+/**
+=========================================
+ Source code
+=========================================
+*/
+
+.indent {
+ margin: 2px 0 2px 20px;
+}
+
+.xml-element, .xml-proc, .xml-comment {
+ margin: 2px 0;
+ padding: 2px 0 2px 0;
+}
+
+.xml-element {
+ word-spacing: 3px;
+ color: red;
+ font-weight: bold;
+ font-style:normal;
+ border-left: 1px dotted silver;
+}
+
+.xml-element div {
+ margin: 2px 0 2px 40px;
+}
+
+.xml-att {
+ color: blue;
+ font-weight: bold;
+}
+
+.xml-att-val {
+ color: blue;
+ font-weight: normal;
+}
+
+.xml-proc {
+ color: darkred;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.xml-comment {
+ color: green;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.xml-text {
+ color: green;
+ font-weight: normal;
+ font-style: normal;
+}
+
+
+/**
+=========================================
+ Heading
+=========================================
+*/
+h1, h2, h3 {
+ margin: 10px 10px 2px;
+ font-family: Georgia, Times New Roman, Times, Serif;
+ font-weight: normal;
+ }
+
+h1 {
+ font-weight: bold;
+ letter-spacing: 3px;
+ font-size: 220%;
+ line-height: 100%;
+}
+
+h2 {
+ font-weight: bold;
+ font-size: 175%;
+ line-height: 200%;
+}
+
+h3 {
+ font-size: 150%;
+ line-height: 150%;
+ font-style: italic;
+}
+
+/**
+=========================================
+ Content formatting
+=========================================
+*/
+.port {
+ margin-bottom: 10px;
+ padding-bottom: 10px;
+ border-bottom: 1px dashed gray;
+}
+
+.operation {
+ margin-bottom: 20px;
+ padding-bottom: 10px;
+ border-bottom: 1px dashed gray;
+}
+
+
+/* --------------------------------------------------------
+ Printing
+*/
+
+/*
+@media print
+{
+ #outer_links, #outer_nav {
+ display: none;
+ }
+*/
+
+ #outer_box {
+ padding: 3px;
+ }
+/* END print media definition
+}
+*/
+
+</xsl:variable>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-css.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-util.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="@*" mode="qname.normalized">
+ <xsl:variable name="local" select="substring-after(., ':')"/>
+ <xsl:choose>
+ <xsl:when test="$local">
+ <xsl:value-of select="$local"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="ws:definitions | ws2:description" mode="html-title.render">
+ <xsl:choose>
+ <xsl:when test="$global.service-name">
+ <xsl:value-of select="concat('Web Service: ', $global.service-name)"/>
+ </xsl:when>
+ <xsl:when test="$global.binding-name">
+ <xsl:value-of select="concat('WS Binding: ', $global.binding-name)"/>
+ </xsl:when>
+ <xsl:when test="ws2:interface/@name">
+ <xsl:value-of select="concat('WS Interface: ', ws2:interface/@name)"/>
+ </xsl:when>
+ <xsl:otherwise>Web Service Fragment</xsl:otherwise>
+ <!-- <xsl:otherwise><xsl:message terminate="yes">Syntax error in element <xsl:call-template name="src.syntax-error.path"/></xsl:message>
+ </xsl:otherwise>
+-->
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="src.syntax-error">
+ <xsl:message terminate="yes">Syntax error by WSDL source rendering in element <xsl:call-template name="src.syntax-error.path"/>
+ </xsl:message>
+ </xsl:template>
+ <xsl:template name="src.syntax-error.path">
+ <xsl:for-each select="parent::*">
+ <xsl:call-template name="src.syntax-error.path"/>
+ </xsl:for-each>
+ <xsl:value-of select="concat('/', name(), '[', position(), ']')"/>
+ </xsl:template>
+ <xsl:template match="*[local-name(.) = 'documentation']" mode="documentation.render">
+ <xsl:if test="$ENABLE-DESCRIPTION and string-length(.) &gt; 0">
+ <div class="label">Description:</div>
+ <div class="value">
+ <xsl:value-of select="." disable-output-escaping="yes"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="render.source-code-link">
+ <xsl:if test="$ENABLE-SRC-CODE-PARAGRAPH and $ENABLE-LINK">
+ <a class="local" href="{concat('#', $SRC-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$SOURCE-CODE-TEXT"/>
+ </a>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="about.detail">
+ <xsl:param name="version"/>
+ <div>
+ This page has been generated by <big>wsdl-viewer.xsl</big>, version <xsl:value-of select="$version"/>
+ <br/>
+ Author: <a href="http://tomi.vanek.sk/">tomi vanek</a>
+ <br/>
+ Download at <a href="http://tomi.vanek.sk/xml/wsdl-viewer.xsl">http://tomi.vanek.sk/xml/wsdl-viewer.xsl</a>.<br/>
+ <br/>
+ The transformation was inspired by the article<br/>
+ Uche Ogbuji: <a href="http://www-106.ibm.com/developerworks/library/ws-trans/index.html">WSDL processing with XSLT</a>
+ <br/>
+ </div>
+ </xsl:template>
+ <xsl:template name="processor-info.render">
+ <xsl:text>
+</xsl:text>
+ <xsl:text>This document was generated by </xsl:text>
+ <a href="{system-property('xsl:vendor-url')}">
+ <xsl:value-of select="system-property('xsl:vendor')"/>
+ </a>
+ <xsl:text> XSLT engine.
+</xsl:text>
+
+ <xsl:text>The engine processed the WSDL in XSLT </xsl:text>
+ <xsl:value-of select="format-number(system-property('xsl:version'), '#.0')"/>
+ <xsl:text> compliant mode.
+</xsl:text>
+
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-util.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-service.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="ws:service|ws2:service" mode="service-start">
+ <div class="indent">
+ <div class="label">Target Namespace:</div>
+ <div class="value">
+ <xsl:value-of select="$consolidated-wsdl/@targetNamespace"/>
+ </div>
+ <xsl:apply-templates select="*[local-name(.) = 'documentation']" mode="documentation.render"/>
+ <xsl:apply-templates select="ws:port|ws2:endpoint" mode="service"/>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws2:endpoint" mode="service">
+ <xsl:variable name="binding-name">
+ <xsl:apply-templates select="@binding" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:variable name="binding" select="$consolidated-wsdl/ws2:binding[@name = $binding-name]"/>
+
+ <xsl:variable name="binding-type" select="$binding/@type"/>
+ <xsl:variable name="binding-protocol" select="$binding/@*[local-name() = 'protocol']"/>
+ <xsl:variable name="protocol">
+ <xsl:choose>
+ <xsl:when test="starts-with($binding-type, 'http://schemas.xmlsoap.org/wsdl/soap')">SOAP 1.1</xsl:when>
+ <xsl:when test="starts-with($binding-type, 'http://www.w3.org/2005/08/wsdl/soap')">SOAP 1.2</xsl:when>
+ <xsl:when test="starts-with($binding-type, 'http://schemas.xmlsoap.org/wsdl/mime')">MIME</xsl:when>
+ <xsl:when test="starts-with($binding-type, 'http://schemas.xmlsoap.org/wsdl/http')">HTTP</xsl:when>
+ <xsl:otherwise>Unknown</xsl:otherwise>
+ </xsl:choose>
+
+ <!-- TODO: Add all bindings to transport protocols -->
+ <xsl:choose>
+ <xsl:when test="starts-with($binding-protocol, 'http://www.w3.org/2003/05/soap/bindings/HTTP')"> over HTTP</xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+ </xsl:variable>
+
+ <div class="label">Location:</div>
+ <div class="value">
+ <xsl:value-of select="@address"/>
+ </div>
+
+ <div class="label">Protocol:</div>
+ <div class="value">
+ <xsl:value-of select="$protocol"/>
+ </div>
+
+ <xsl:apply-templates select="$binding" mode="service"/>
+
+ <xsl:variable name="iface-name">
+ <xsl:apply-templates select="../@interface" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface[@name = $iface-name]" mode="service"/>
+
+ </xsl:template>
+ <xsl:template match="ws2:interface" mode="service">
+ <h3>Interface <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:text> </xsl:text>
+ <small>
+ <xsl:if test="$ENABLE-OPERATIONS-PARAGRAPH">
+ <a class="local" href="#{concat($PORT-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$PORT-TYPE-TEXT"/>
+ </a>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ </small>
+ </xsl:if>
+ </h3>
+
+ <xsl:variable name="base-iface-name">
+ <xsl:apply-templates select="@extends" mode="qname.normalized"/>
+ </xsl:variable>
+
+ <xsl:if test="$base-iface-name">
+ <div class="label">Extends: </div>
+ <div class="value">
+ <xsl:value-of select="$base-iface-name"/>
+ </div>
+ </xsl:if>
+
+ <xsl:variable name="base-iface"
+ select="$consolidated-wsdl/ws2:interface[@name = $base-iface-name]"/>
+
+ <div class="label">Operations:</div>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <ol style="line-height: 180%;">
+ <xsl:apply-templates select="$base-iface/ws2:operation | ws2:operation" mode="service">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws:port" mode="service">
+ <xsl:variable name="binding-name">
+ <xsl:apply-templates select="@binding" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:variable name="binding" select="$consolidated-wsdl/ws:binding[@name = $binding-name]"/>
+
+ <xsl:variable name="binding-uri"
+ select="namespace-uri( $binding/*[local-name() = 'binding'] )"/>
+ <xsl:variable name="protocol">
+ <xsl:choose>
+ <xsl:when test="starts-with($binding-uri, 'http://schemas.xmlsoap.org/wsdl/soap')">SOAP</xsl:when>
+ <xsl:when test="starts-with($binding-uri, 'http://schemas.xmlsoap.org/wsdl/mime')">MIME</xsl:when>
+ <xsl:when test="starts-with($binding-uri, 'http://schemas.xmlsoap.org/wsdl/http')">HTTP</xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="port-type-name">
+ <xsl:apply-templates select="$binding/@type" mode="qname.normalized"/>
+ </xsl:variable>
+
+ <xsl:variable name="port-type"
+ select="$consolidated-wsdl/ws:portType[@name = $port-type-name]"/>
+
+
+ <h3>Port <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:text> </xsl:text>
+ <small>
+ <xsl:if test="$ENABLE-OPERATIONS-PARAGRAPH">
+ <a class="local" href="#{concat($PORT-PREFIX, generate-id($port-type))}">
+ <xsl:value-of select="$PORT-TYPE-TEXT"/>
+ </a>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ </small>
+ </xsl:if>
+ </h3>
+
+ <div class="label">Location:</div>
+ <div class="value">
+ <xsl:value-of select="*[local-name() = 'address']/@location"/>
+ </div>
+
+ <div class="label">Protocol:</div>
+ <div class="value">
+ <xsl:value-of select="$protocol"/>
+ </div>
+
+ <xsl:apply-templates select="$binding" mode="service"/>
+
+ <div class="label">Operations:</div>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <ol style="line-height: 180%;">
+ <xsl:apply-templates select="$consolidated-wsdl/ws:portType[@name = $port-type-name]/ws:operation"
+ mode="service">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws:operation|ws2:operation" mode="service">
+ <li>
+ <big>
+ <i>
+ <xsl:value-of select="@name"/>
+ </i>
+ </big>
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:if test="$ENABLE-OPERATIONS-PARAGRAPH">
+ <a class="local" href="{concat('#', $OPERATIONS-PREFIX, generate-id(.))}">Detail</a>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ </xsl:if>
+ </li>
+ </xsl:template>
+ <xsl:template match="ws:binding|ws2:binding" mode="service">
+ <xsl:variable name="real-binding" select="*[local-name() = 'binding']|self::ws2:*"/>
+
+ <xsl:if test="$real-binding/@style">
+ <div class="label">Default style:</div>
+ <div class="value">
+ <xsl:value-of select="$real-binding/@style"/>
+ </div>
+ </xsl:if>
+
+
+ <xsl:if test="$real-binding/@transport|$real-binding/*[local-name() = 'protocol']">
+ <xsl:variable name="protocol"
+ select="concat($real-binding/@transport, $real-binding/*[local-name() = 'protocol'])"/>
+ <div class="label">Transport protocol:</div>
+ <div class="value">
+ <xsl:choose>
+ <xsl:when test="$protocol = 'http://schemas.xmlsoap.org/soap/http'">SOAP over HTTP</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$protocol"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="$real-binding/@verb">
+ <div class="label">Default method:</div>
+ <div class="value">
+ <xsl:value-of select="$real-binding/@verb"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-service.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-operations.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="ws2:interface" mode="operations">
+ <xsl:if test="$ENABLE-PORTTYPE-NAME">
+ <h3>
+ <a name="{concat($IFACE-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$IFACE-TEXT"/>
+ <xsl:text>
+</xsl:text>
+ <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ </a>
+ <xsl:call-template name="render.source-code-link"/>
+ </h3>
+ </xsl:if>
+
+ <ol>
+ <xsl:apply-templates select="ws2:operation" mode="operations">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </xsl:template>
+ <xsl:template match="ws2:operation" mode="operations">
+ <xsl:variable name="binding-info"
+ select="$consolidated-wsdl/ws2:binding[@interface = current()/../@name or substring-after(@interface, ':') = current()/../@name]/ws2:operation[@ref = current()/@name or substring-after(@ref, ':') = current()/@name]"/>
+ <li>
+ <xsl:if test="position() != last()">
+ <xsl:attribute name="class">operation</xsl:attribute>
+ </xsl:if>
+ <big>
+ <b>
+ <a name="{concat($OPERATIONS-PREFIX, generate-id(.))}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </b>
+ </big>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <xsl:call-template name="render.source-code-link"/>
+ </div>
+ <xsl:apply-templates select="ws2:documentation" mode="documentation.render"/>
+
+ <xsl:if test="$ENABLE-STYLEOPTYPEPATH">
+ <!-- TODO: add the operation attributes - according the WSDL 2.0 spec. -->
+ </xsl:if>
+ <xsl:apply-templates select="ws2:input|ws2:output|../ws2:fault[@name = ws2:infault/@ref or @name = ws2:outfault/@ref]"
+ mode="operations.message">
+ <xsl:with-param name="binding-data" select="$binding-info"/>
+ </xsl:apply-templates>
+ </li>
+ </xsl:template>
+ <xsl:template match="ws2:input|ws2:output|ws2:fault" mode="operations.message">
+ <xsl:param name="binding-data"/>
+ <xsl:if test="$ENABLE-INOUTFAULT">
+ <div class="label">
+ <xsl:value-of select="concat(translate(substring(local-name(.), 1, 1), 'abcdefghijklmnoprstuvwxyz', 'ABCDEFGHIJKLMNOPRSTUVWXYZ'), substring(local-name(.), 2), ':')"/>
+ </div>
+
+ <div class="value">
+ <xsl:variable name="type-name">
+ <xsl:apply-templates select="@element" mode="qname.normalized"/>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="render.source-code-link"/>
+
+ <xsl:variable name="type-tree"
+ select="$consolidated-xsd[@name = $type-name and not(xsd:simpleType)][1]"/>
+ <xsl:apply-templates select="$type-tree" mode="operations.message.part"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="ws:portType" mode="operations">
+ <div>
+ <xsl:if test="position() != last()">
+ <xsl:attribute name="class">port</xsl:attribute>
+ </xsl:if>
+ <xsl:if test="$ENABLE-PORTTYPE-NAME">
+ <h3>
+ <a name="{concat($PORT-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$PORT-TYPE-TEXT"/>
+ <xsl:text>
+</xsl:text>
+ <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ </a>
+ <xsl:call-template name="render.source-code-link"/>
+ </h3>
+ </xsl:if>
+ <ol>
+ <xsl:apply-templates select="ws:operation" mode="operations">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws:operation" mode="operations">
+ <xsl:variable name="binding-info"
+ select="$consolidated-wsdl/ws:binding[@type = current()/../@name or substring-after(@type, ':') = current()/../@name]/ws:operation[@name = current()/@name]"/>
+ <li>
+ <xsl:if test="position() != last()">
+ <xsl:attribute name="class">operation</xsl:attribute>
+ </xsl:if>
+ <big>
+ <b>
+ <a name="{concat($OPERATIONS-PREFIX, generate-id(.))}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </b>
+ </big>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <xsl:call-template name="render.source-code-link"/>
+ </div>
+
+ <xsl:if test="$ENABLE-DESCRIPTION and string-length(ws:documentation) &gt; 0">
+ <div class="label">Description:</div>
+ <div class="value">
+ <xsl:value-of select="ws:documentation" disable-output-escaping="yes"/>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="$ENABLE-STYLEOPTYPEPATH">
+ <xsl:variable name="binding-operation" select="$binding-info/*[local-name() = 'operation']"/>
+ <xsl:if test="$binding-operation/@style">
+ <div class="label">Style:</div>
+ <div class="value">
+ <xsl:value-of select="$binding-operation/@style"/>
+ </div>
+ </xsl:if>
+
+ <div class="label">Operation type:</div>
+ <div class="value">
+ <xsl:choose>
+ <xsl:when test="$binding-info/ws:input[not(../ws:output)]">
+ <i>One-way.</i> The endpoint receives a message.</xsl:when>
+ <xsl:when test="$binding-info/ws:input[following-sibling::ws:output]">
+ <i>Request-response.</i> The endpoint receives a message, and sends a correlated message.</xsl:when>
+ <xsl:when test="$binding-info/ws:input[preceding-sibling::ws:output]">
+ <i>Solicit-response.</i> The endpoint sends a message, and receives a correlated message.</xsl:when>
+ <xsl:when test="$binding-info/ws:output[not(../ws:input)]">
+ <i>Notification.</i> The endpoint sends a message.</xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+ </div>
+
+ <xsl:if test="string-length($binding-operation/@soapAction) &gt; 0">
+ <div class="label">SOAP action:</div>
+ <div class="value">
+ <xsl:value-of select="$binding-operation/@soapAction"/>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="$binding-operation/@location">
+ <div class="label">HTTP path:</div>
+ <div class="value">
+ <xsl:value-of select="$binding-operation/@location"/>
+ </div>
+ </xsl:if>
+ </xsl:if>
+ <xsl:apply-templates select="ws:input|ws:output|ws:fault" mode="operations.message">
+ <xsl:with-param name="binding-data" select="$binding-info"/>
+ </xsl:apply-templates>
+ </li>
+ </xsl:template>
+ <xsl:template match="ws:input|ws:output|ws:fault" mode="operations.message">
+ <xsl:param name="binding-data"/>
+ <xsl:if test="$ENABLE-INOUTFAULT">
+ <div class="label">
+ <xsl:value-of select="concat(translate(substring(local-name(.), 1, 1), 'abcdefghijklmnoprstuvwxyz', 'ABCDEFGHIJKLMNOPRSTUVWXYZ'), substring(local-name(.), 2), ':')"/>
+ </div>
+
+ <xsl:variable name="msg-local-name" select="substring-after(@message, ':')"/>
+ <xsl:variable name="msg-name">
+ <xsl:choose>
+ <xsl:when test="$msg-local-name">
+ <xsl:value-of select="$msg-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="msg" select="$consolidated-wsdl/ws:message[@name = $msg-name]"/>
+ <xsl:choose>
+ <xsl:when test="$msg">
+ <xsl:apply-templates select="$msg" mode="operations.message">
+ <xsl:with-param name="binding-data"
+ select="$binding-data/ws:*[local-name(.) = local-name(current())]/*"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <div class="value">
+ <i>none</i>
+ </div>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="ws:message" mode="operations.message">
+ <xsl:param name="binding-data"/>
+ <div class="value">
+ <xsl:value-of select="@name"/>
+ <xsl:if test="$binding-data">
+ <xsl:text> (</xsl:text>
+ <xsl:value-of select="name($binding-data)"/>
+ <xsl:variable name="use" select="$binding-data/@use"/>
+ <xsl:if test="$use">
+ <xsl:text>, use = </xsl:text>
+ <xsl:value-of select="$use"/>
+ </xsl:if>
+ <xsl:variable name="part" select="$binding-data/@part"/>
+ <xsl:if test="$part">
+ <xsl:text>, part = </xsl:text>
+ <xsl:value-of select="$part"/>
+ </xsl:if>
+ <xsl:text>)</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ </div>
+
+ <xsl:apply-templates select="ws:part" mode="operations.message"/>
+ </xsl:template>
+ <xsl:template match="ws:part" mode="operations.message">
+ <div class="value box" style="margin-bottom: 3px">
+ <xsl:choose>
+ <xsl:when test="string-length(@name) &gt; 0">
+ <b>
+ <xsl:value-of select="@name"/>
+ </b>
+
+ <xsl:variable name="elem-or-type">
+ <xsl:choose>
+ <xsl:when test="@type">
+ <xsl:value-of select="@type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@element"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="type-local-name" select="substring-after($elem-or-type, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="$elem-or-type">
+ <xsl:value-of select="$elem-or-type"/>
+ </xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:variable name="part-type"
+ select="$consolidated-xsd[@name = $type-name and not(xsd:simpleType)][1]"/>
+ <xsl:apply-templates select="$part-type" mode="operations.message.part"/>
+
+ </xsl:when>
+ <xsl:otherwise>
+ <i>none</i>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-operations.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-xsd-tree.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="xsd:simpleType" mode="operations.message.part"/>
+ <xsl:template name="recursion.should.continue">
+ <xsl:param name="anti.recursion"/>
+ <xsl:param name="recursion.label"/>
+ <xsl:param name="recursion.count">1</xsl:param>
+ <xsl:variable name="has.recursion" select="contains($anti.recursion, $recursion.label)"/>
+ <xsl:variable name="anti.recursion.fragment"
+ select="substring-after($anti.recursion, $recursion.label)"/>
+ <xsl:choose>
+ <xsl:when test="$recursion.count &gt; $ANTIRECURSION-DEPTH"/>
+
+ <xsl:when test="not($ENABLE-ANTIRECURSION-PROTECTION) or string-length($anti.recursion) = 0 or not($has.recursion)">
+ <xsl:text>1</xsl:text>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion.fragment"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ <xsl:with-param name="recursion.count" select="$recursion.count + 1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="xsd:complexType" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <small style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </small>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:template>
+ <xsl:template match="xsd:complexContent" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:complexType[descendant::xsd:attribute[ not(@*[local-name() = 'arrayType']) ]]"
+ mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <ul type="circle">
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </ul>
+ </xsl:when>
+ <xsl:otherwise>
+ <small style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </small>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="xsd:restriction | xsd:extension" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="type-local-name" select="substring-after(@base, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="@base">
+ <xsl:value-of select="@base"/>
+ </xsl:when>
+ <xsl:otherwise>unknown type</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="base-type" select="$consolidated-xsd[@name = $type-name][1]"/>
+ <!-- xsl:if test="not($type/@abstract)">
+ <xsl:apply-templates select="$type"/>
+ </xsl:if -->
+ <xsl:if test="$base-type != 'Array'">
+ <xsl:apply-templates select="$base-type" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:union" mode="operations.message.part">
+ <xsl:call-template name="process-union">
+ <xsl:with-param name="set" select="@memberTypes"/>
+ </xsl:call-template>
+ </xsl:template>
+ <xsl:template name="process-union">
+ <xsl:param name="set"/>
+ <xsl:if test="$set">
+ <xsl:variable name="item" select="substring-before($set, ' ')"/>
+ <xsl:variable name="the-rest" select="substring-after($set, ' ')"/>
+
+ <xsl:variable name="type-local-name" select="substring-after($item, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$item"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="process-union">
+ <xsl:with-param name="set" select="$the-rest"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="xsd:sequence" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <ul type="square">
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </ul>
+ </xsl:template>
+ <xsl:template match="xsd:all|xsd:any|xsd:choice" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="list-type">
+ <xsl:choose>
+ <xsl:when test="self::xsd:all">disc</xsl:when>
+ <xsl:when test="self::xsd:any">circle</xsl:when>
+ <xsl:otherwise>square</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:element name="ul">
+ <xsl:attribute name="style">
+ <xsl:value-of select="concat('list-style-type:', $list-type)"/>
+ </xsl:attribute>
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:element>
+ </xsl:template>
+ <xsl:template match="xsd:element[parent::xsd:schema]" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <xsl:variable name="type-name">
+ <xsl:call-template name="xsd.element-type"/>
+ </xsl:variable>
+ <xsl:variable name="elem-type"
+ select="$consolidated-xsd[generate-id() != generate-id(current()) and $type-name and @name=$type-name and contains(local-name(), 'Type')][1]"/>
+
+ <xsl:if test="$type-name != @name">
+ <xsl:apply-templates select="$elem-type" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+
+ <xsl:if test="not($elem-type)">
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+ </xsl:if>
+
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <small style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </small>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:template>
+ <xsl:template match="xsd:element | xsd:attribute" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <!--
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+-->
+ <li>
+ <xsl:variable name="local-ref" select="concat(@name, substring-after(@ref, ':'))"/>
+ <xsl:variable name="elem-name">
+ <xsl:choose>
+ <xsl:when test="@name">
+ <xsl:value-of select="@name"/>
+ </xsl:when>
+ <xsl:when test="$local-ref">
+ <xsl:value-of select="$local-ref"/>
+ </xsl:when>
+ <xsl:when test="@ref">
+ <xsl:value-of select="@ref"/>
+ </xsl:when>
+ <xsl:otherwise>anonymous</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:value-of select="$elem-name"/>
+
+ <xsl:variable name="type-name">
+ <xsl:call-template name="xsd.element-type"/>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:variable name="elem-type"
+ select="$consolidated-xsd[@name = $type-name and contains(local-name(), 'Type')][1]"/>
+ <xsl:apply-templates select="$elem-type | *" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </li>
+ </xsl:template>
+ <xsl:template match="xsd:attribute[ @*[local-name() = 'arrayType'] ]"
+ mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="array-local-name"
+ select="substring-after(@*[local-name() = 'arrayType'], ':')"/>
+ <xsl:variable name="type-local-name" select="substring-before($array-local-name, '[')"/>
+ <xsl:variable name="array-type" select="$consolidated-xsd[@name = $type-local-name][1]"/>
+
+ <xsl:variable name="recursion.label" select="concat('[', $type-local-name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <xsl:apply-templates select="$array-type" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <small style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </small>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="xsd.element-type">
+ <xsl:variable name="ref-or-type">
+ <xsl:choose>
+ <xsl:when test="@type">
+ <xsl:value-of select="@type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@ref"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="type-local-name" select="substring-after($ref-or-type, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="$ref-or-type">
+ <xsl:value-of select="$ref-or-type"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:value-of select="$type-name"/>
+ </xsl:template>
+ <xsl:template match="xsd:documentation" mode="operations.message.part">
+ <div style="color:green">
+ <xsl:value-of select="." disable-output-escaping="yes"/>
+ </div>
+ </xsl:template>
+ <xsl:template name="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:param name="type-local-name"/>
+
+ <xsl:if test="$ENABLE-OPERATIONS-TYPE">
+ <xsl:variable name="properties">
+ <xsl:if test="self::xsd:element | self::xsd:attribute[parent::xsd:complexType]">
+ <xsl:variable name="min">
+ <xsl:if test="@minOccurs = '0'">optional</xsl:if>
+ </xsl:variable>
+ <xsl:variable name="max">
+ <xsl:if test="@maxOccurs = 'unbounded'">unbounded</xsl:if>
+ </xsl:variable>
+ <xsl:variable name="nillable">
+ <xsl:if test="@nillable">nillable</xsl:if>
+ </xsl:variable>
+
+ <xsl:if test="(string-length($min) + string-length($max) + string-length($nillable) + string-length(@use)) &gt; 0">
+ <xsl:text> - </xsl:text>
+ <xsl:value-of select="$min"/>
+ <xsl:if test="string-length($min) and string-length($max)">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$max"/>
+ <xsl:if test="(string-length($min) + string-length($max)) &gt; 0 and string-length($nillable)">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$nillable"/>
+ <xsl:if test="(string-length($min) + string-length($max) + string-length($nillable)) &gt; 0 and string-length(@use)">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="@use"/>
+ <xsl:text>; </xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:variable>
+
+ <xsl:variable name="recursion.label" select="concat('[', $type-local-name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ <xsl:with-param name="recursion.count" select="$ANTIRECURSION-DEPTH"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:if test="string-length($recursion.test) != 0">
+ <small style="color:blue">
+ <xsl:value-of select="$properties"/>
+ <xsl:variable name="elem-type"
+ select="$consolidated-xsd[@name = $type-local-name and (not(contains(local-name(current()), 'element')) or contains(local-name(), 'Type'))][1]"/>
+ <xsl:if test="string-length($type-local-name) &gt; 0">
+ <xsl:call-template name="render-type.write-name">
+ <xsl:with-param name="type-local-name" select="$type-local-name"/>
+ </xsl:call-template>
+ </xsl:if>
+
+ <xsl:choose>
+ <xsl:when test="$elem-type">
+
+ <xsl:apply-templates select="$elem-type" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+
+ <xsl:apply-templates select="*" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </small>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="render-type.write-name">
+ <xsl:param name="type-local-name"/>
+ <xsl:text> type </xsl:text>
+ <big>
+ <i>
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </i>
+ </big>
+ </xsl:template>
+ <xsl:template match="*" mode="render-type"/>
+ <xsl:template match="xsd:element | xsd:complexType | xsd:simpleType | xsd:complexContent"
+ mode="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:apply-templates select="*" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:restriction[ parent::xsd:simpleType ]" mode="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="type-local-name" select="substring-after(@base, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="@base">
+ <xsl:value-of select="@base"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:text> - </xsl:text>
+ <xsl:call-template name="render-type.write-name">
+ <xsl:with-param name="type-local-name" select="$type-local-name"/>
+ </xsl:call-template>
+ <xsl:text> with </xsl:text>
+ <xsl:value-of select="local-name()"/>
+ <xsl:apply-templates select="*" mode="render-type">