瀏覽代碼

HPCC-26680 ESDL tool not honoring exceptions_inline

Generated wsdl and xsd from the command-line esdl tool don't include
the inline Exceptions element in response elements that are marked in
the ecm files with the exceptions_inline attribute.

Update the xslt file that creates the xsd/wsdl to output the exceptions
element inline by default when it is in the ecm markup. Provide a parameter
to turn off exceptions inline in the stylesheet and in the esdl tool. For
compatibility with existing DESDL service behavior, modify the ESDL binding
code to turn off exceptions inline until full support is enabled with ticket
(HPCC-27342).

Correct the generated wsdl to define the wsdl namespace.
Add esdl test cases to exercise exceptions_inline behavior.

Signed-off-by: Terrence Asselin <terrence.asselin@lexisnexisrisk.com>
Terrence Asselin 3 年之前
父節點
當前提交
99b40579ee

+ 2 - 0
esp/services/esdl_svc_engine/esdl_binding.cpp

@@ -2168,12 +2168,14 @@ void EsdlBindingImpl::initEsdlServiceInfo(IEsdlDefService &srvdef)
 
     IProperties *xsdparams = createProperties(false);
     xsdparams->setProp( "all_annot_Param", "true()" );
+    xsdparams->setProp( "no_exceptions_inline", "true()" );
     m_xsdgen->setTransformParams(EsdlXslToXsd, xsdparams);
 
     IProperties *wsdlparams = createProperties(false);
     wsdlparams->setProp( "location", StringBuffer().append('\'').append(getWsdlAddress()).append('\'').str() );
     wsdlparams->setProp( "create_wsdl", "true()");
     wsdlparams->setProp( "all_annot_Param", "true()" );
+    wsdlparams->setProp( "no_exceptions_inline", "true()" );
     m_xsdgen->setTransformParams(EsdlXslToWsdl, wsdlparams);
 
     StringBuffer xsltpath(getCFD());

+ 5 - 1
esp/xslt/esxdl2xsd.xslt

@@ -25,6 +25,7 @@
     <xsl:param name="version" select="/esxdl/@version"/>
     <xsl:param name="no_annot_Param" select="false()"/>
     <xsl:param name="all_annot_Param" select="false()"/>
+    <xsl:param name="no_exceptions_inline" select="false()"/>
 
     <!--
         Note: This version of the stylesheet assumes that the XML input has been processed
@@ -349,6 +350,9 @@
             <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
             <xsd:complexType>
                 <xsd:all>
+                    <xsl:if test="@exceptions_inline and not($no_exceptions_inline)">
+                        <xsd:element name="Exceptions" type="tns:ArrayOfEspException" minOccurs="0" maxOccurs="1"/>
+                    </xsl:if>
                     <xsl:apply-templates select="EsdlElement|EsdlArray|EsdlList|EsdlEnum"/>
                 </xsd:all>
             </xsd:complexType>
@@ -449,7 +453,7 @@
         </xsd:schema>
     </xsl:template>
     <xsl:template name="CreateWsdl">
-        <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/">
+        <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
             <xsl:attribute name="targetNamespace"><xsl:value-of select="$tnsParam"/></xsl:attribute>
             <xsl:copy-of select="namespace::tns"/>
             <wsdl:types>

+ 26 - 1
testing/esp/esdlcmd/esdlcmd-test.py

@@ -351,7 +351,32 @@ def main():
 
         # cpp
         TestCaseCode(run_settings, 'wstest-cpp-installdir', 'cpp', 'ws_test.ecm', 'WsTest',
-                     xsl_base_path)
+                     xsl_base_path),
+
+        # Testing exceptions_inline output
+        TestCaseXSD(run_settings, 'wsexctest1-wsdl-default', 'wsdl', 'ws_exc_test_1.ecm', 'WsExcTest1',
+                    xsl_base_path),
+
+        TestCaseXSD(run_settings, 'wsexctest2-wsdl-default', 'wsdl', 'ws_exc_test_2.ecm', 'WsExcTest2',
+                    xsl_base_path),
+
+        TestCaseXSD(run_settings, 'wsexctest3-wsdl-default', 'wsdl', 'ws_exc_test_3.ecm', 'WsExcTest3',
+                    xsl_base_path),
+
+        TestCaseXSD(run_settings, 'wsexctest3-wsdl-no-exc', 'wsdl', 'ws_exc_test_3.ecm', 'WsExcTest3',
+                    xsl_base_path, ['--no-exceptions-inline']),
+
+        TestCaseXSD(run_settings, 'wsexctest1-xsd-default', 'xsd', 'ws_exc_test_1.ecm', 'WsExcTest1',
+                    xsl_base_path),
+
+        TestCaseXSD(run_settings, 'wsexctest2-xsd-default', 'xsd', 'ws_exc_test_2.ecm', 'WsExcTest2',
+                    xsl_base_path),
+
+        TestCaseXSD(run_settings, 'wsexctest3-xsd-default', 'xsd', 'ws_exc_test_3.ecm', 'WsExcTest3',
+                    xsl_base_path),
+
+        TestCaseXSD(run_settings, 'wsexctest3-xsd-no-exc', 'xsd', 'ws_exc_test_3.ecm', 'WsExcTest3',
+                    xsl_base_path, ['--no-exceptions-inline']),
 
     ]
 

+ 50 - 0
testing/esp/esdlcmd/inputs/ws_exc_test_1.ecm

@@ -0,0 +1,50 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2022 HPCC Systems®.
+
+    Licensed 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.
+############################################################################## */
+
+// This test contains markup that should not modify the xsd/wsdl with any
+// Exceptions element in the method responses.
+
+ESPrequest SoapFaultExceptionsRequest
+{
+    string RequestString;
+};
+
+ESPresponse SoapFaultExceptionsResponse
+{
+    string ResponseString;
+};
+
+ESPrequest SoapFaultExceptionsTwoRequest
+{
+    string RequestString;
+};
+
+ESPresponse SoapFaultExceptionsTwoResponse
+{
+    string ResponseString;
+};
+
+ESPservice [
+    auth_feature("DEFERRED"),
+    version("1"),
+    default_client_version("1"),
+    exceptions_inline("./smc_xslt/exceptions.xslt"),
+] WsExcTest1
+{
+    ESPmethod SoapFaultExceptions(SoapFaultExceptionsRequest, SoapFaultExceptionsResponse);
+    ESPmethod [exceptions_inline] SoapFaultExceptionsTwo(SoapFaultExceptionsTwoRequest, SoapFaultExceptionsTwoResponse);
+};

+ 50 - 0
testing/esp/esdlcmd/inputs/ws_exc_test_2.ecm

@@ -0,0 +1,50 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2022 HPCC Systems®.
+
+    Licensed 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.
+############################################################################## */
+
+// This test contains markup that should not modify the xsd/wsdl with any
+// Exceptions element in the method responses.
+
+ESPrequest SoapFaultExceptionsRequest
+{
+    string RequestString;
+};
+
+ESPresponse SoapFaultExceptionsResponse
+{
+    string ResponseString;
+};
+
+ESPrequest SoapFaultExceptionsTwoRequest
+{
+    string RequestString;
+};
+
+ESPresponse SoapFaultExceptionsTwoResponse
+{
+    string ResponseString;
+};
+
+ESPservice [
+    auth_feature("DEFERRED"),
+    version("1"),
+    default_client_version("1"),
+    http_exceptions_inline("./smc_xslt/exceptions.xslt"),
+] WsExcTest2
+{
+    ESPmethod SoapFaultExceptions(SoapFaultExceptionsRequest, SoapFaultExceptionsResponse);
+    ESPmethod [exceptions_inline] SoapFaultExceptionsTwo(SoapFaultExceptionsTwoRequest, SoapFaultExceptionsTwoResponse);
+};

+ 52 - 0
testing/esp/esdlcmd/inputs/ws_exc_test_3.ecm

@@ -0,0 +1,52 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2022 HPCC Systems®.
+
+    Licensed 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.
+############################################################################## */
+
+// This test contains markup that will modify the xsd/wsdl with an
+// Exceptions element in the selected method responses.
+// It also shows unmodified methods in the same service.
+
+ESPrequest SoapFaultExceptionsRequest
+{
+    string RequestString;
+};
+
+ESPresponse SoapFaultExceptionsResponse
+{
+    string ResponseString;
+};
+
+ESPrequest InlineExceptionsRequest
+{
+    string RequestString;
+};
+
+ESPresponse [exceptions_inline] InlineExceptionsResponse
+{
+    // an Exceptions element should be added here in the xsd/wsdl
+    // when its output is enabled.
+    string ResponseString;
+};
+
+ESPservice [
+    auth_feature("DEFERRED"),
+    version("1"),
+    default_client_version("1"),
+] WsExcTest3
+{
+    ESPmethod SoapFaultExceptions(SoapFaultExceptionsRequest, SoapFaultExceptionsResponse);
+    ESPmethod InlineExceptions(InlineExceptionsRequest, InlineExceptionsResponse);
+};

+ 143 - 0
testing/esp/esdlcmd/key/wsexctest1-wsdl-default.wsdl

@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:hpccsystems:ws:wsexctest1" targetNamespace="urn:hpccsystems:ws:wsexctest1">
+  <wsdl:types>
+    <xsd:schema elementFormDefault="qualified" targetNamespace="urn:hpccsystems:ws:wsexctest1">
+      <xsd:element name="string" nillable="true" type="xsd:string"/>
+      <xsd:complexType name="EspException">
+        <xsd:all>
+          <xsd:element name="Code" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Audience" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Message" type="xsd:string" minOccurs="0"/>
+        </xsd:all>
+      </xsd:complexType>
+      <xsd:complexType name="ArrayOfEspException">
+        <xsd:sequence>
+          <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Exception" type="tns:EspException" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:element name="Exceptions" type="tns:ArrayOfEspException"/>
+      <xsd:element name="WsExcTest1PingRequest">
+        <xsd:complexType>
+          <xsd:all/>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsRequest">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsTwoRequest">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="WsExcTest1PingResponse">
+        <xsd:complexType>
+          <xsd:all/>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsResponse">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsTwoResponse">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="EspSoapFault">
+    <wsdl:part name="parameters" element="tns:Exceptions"/>
+  </wsdl:message>
+  <wsdl:message name="PingSoapIn">
+    <wsdl:part name="parameters" element="tns:WsExcTest1PingRequest"/>
+  </wsdl:message>
+  <wsdl:message name="PingSoapOut">
+    <wsdl:part name="parameters" element="tns:WsExcTest1PingResponse"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsSoapIn">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsRequest"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsSoapOut">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsResponse"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsTwoSoapIn">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsTwoRequest"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsTwoSoapOut">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsTwoResponse"/>
+  </wsdl:message>
+  <wsdl:portType name="WsExcTest1ServiceSoap">
+    <wsdl:operation name="Ping">
+      <wsdl:input message="tns:PingSoapIn"/>
+      <wsdl:output message="tns:PingSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptions">
+      <wsdl:input message="tns:SoapFaultExceptionsSoapIn"/>
+      <wsdl:output message="tns:SoapFaultExceptionsSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptionsTwo">
+      <wsdl:input message="tns:SoapFaultExceptionsTwoSoapIn"/>
+      <wsdl:output message="tns:SoapFaultExceptionsTwoSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="WsExcTest1ServiceSoap" type="tns:WsExcTest1ServiceSoap">
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <wsdl:operation name="Ping">
+      <soap:operation style="document" soapAction="WsExcTest1/Ping?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptions">
+      <soap:operation style="document" soapAction="WsExcTest1/SoapFaultExceptions?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptionsTwo">
+      <soap:operation style="document" soapAction="WsExcTest1/SoapFaultExceptionsTwo?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="WsExcTest1">
+    <wsdl:port name="WsExcTest1ServiceSoap" binding="tns:WsExcTest1ServiceSoap">
+      <soap:address location="localhost"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>

+ 57 - 0
testing/esp/esdlcmd/key/wsexctest1-xsd-default.xsd

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:hpccsystems:ws:wsexctest1" elementFormDefault="qualified" targetNamespace="urn:hpccsystems:ws:wsexctest1">
+  <xsd:element name="string" nillable="true" type="xsd:string"/>
+  <xsd:complexType name="EspException">
+    <xsd:all>
+      <xsd:element name="Code" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Audience" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Message" type="xsd:string" minOccurs="0"/>
+    </xsd:all>
+  </xsd:complexType>
+  <xsd:complexType name="ArrayOfEspException">
+    <xsd:sequence>
+      <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Exception" type="tns:EspException" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="Exceptions" type="tns:ArrayOfEspException"/>
+  <xsd:element name="WsExcTest1PingRequest">
+    <xsd:complexType>
+      <xsd:all/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsRequest">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsTwoRequest">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="WsExcTest1PingResponse">
+    <xsd:complexType>
+      <xsd:all/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsResponse">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsTwoResponse">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+</xsd:schema>

+ 143 - 0
testing/esp/esdlcmd/key/wsexctest2-wsdl-default.wsdl

@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:hpccsystems:ws:wsexctest2" targetNamespace="urn:hpccsystems:ws:wsexctest2">
+  <wsdl:types>
+    <xsd:schema elementFormDefault="qualified" targetNamespace="urn:hpccsystems:ws:wsexctest2">
+      <xsd:element name="string" nillable="true" type="xsd:string"/>
+      <xsd:complexType name="EspException">
+        <xsd:all>
+          <xsd:element name="Code" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Audience" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Message" type="xsd:string" minOccurs="0"/>
+        </xsd:all>
+      </xsd:complexType>
+      <xsd:complexType name="ArrayOfEspException">
+        <xsd:sequence>
+          <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Exception" type="tns:EspException" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:element name="Exceptions" type="tns:ArrayOfEspException"/>
+      <xsd:element name="WsExcTest2PingRequest">
+        <xsd:complexType>
+          <xsd:all/>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsRequest">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsTwoRequest">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="WsExcTest2PingResponse">
+        <xsd:complexType>
+          <xsd:all/>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsResponse">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsTwoResponse">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="EspSoapFault">
+    <wsdl:part name="parameters" element="tns:Exceptions"/>
+  </wsdl:message>
+  <wsdl:message name="PingSoapIn">
+    <wsdl:part name="parameters" element="tns:WsExcTest2PingRequest"/>
+  </wsdl:message>
+  <wsdl:message name="PingSoapOut">
+    <wsdl:part name="parameters" element="tns:WsExcTest2PingResponse"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsSoapIn">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsRequest"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsSoapOut">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsResponse"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsTwoSoapIn">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsTwoRequest"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsTwoSoapOut">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsTwoResponse"/>
+  </wsdl:message>
+  <wsdl:portType name="WsExcTest2ServiceSoap">
+    <wsdl:operation name="Ping">
+      <wsdl:input message="tns:PingSoapIn"/>
+      <wsdl:output message="tns:PingSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptions">
+      <wsdl:input message="tns:SoapFaultExceptionsSoapIn"/>
+      <wsdl:output message="tns:SoapFaultExceptionsSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptionsTwo">
+      <wsdl:input message="tns:SoapFaultExceptionsTwoSoapIn"/>
+      <wsdl:output message="tns:SoapFaultExceptionsTwoSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="WsExcTest2ServiceSoap" type="tns:WsExcTest2ServiceSoap">
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <wsdl:operation name="Ping">
+      <soap:operation style="document" soapAction="WsExcTest2/Ping?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptions">
+      <soap:operation style="document" soapAction="WsExcTest2/SoapFaultExceptions?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptionsTwo">
+      <soap:operation style="document" soapAction="WsExcTest2/SoapFaultExceptionsTwo?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="WsExcTest2">
+    <wsdl:port name="WsExcTest2ServiceSoap" binding="tns:WsExcTest2ServiceSoap">
+      <soap:address location="localhost"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>

+ 57 - 0
testing/esp/esdlcmd/key/wsexctest2-xsd-default.xsd

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:hpccsystems:ws:wsexctest2" elementFormDefault="qualified" targetNamespace="urn:hpccsystems:ws:wsexctest2">
+  <xsd:element name="string" nillable="true" type="xsd:string"/>
+  <xsd:complexType name="EspException">
+    <xsd:all>
+      <xsd:element name="Code" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Audience" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Message" type="xsd:string" minOccurs="0"/>
+    </xsd:all>
+  </xsd:complexType>
+  <xsd:complexType name="ArrayOfEspException">
+    <xsd:sequence>
+      <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Exception" type="tns:EspException" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="Exceptions" type="tns:ArrayOfEspException"/>
+  <xsd:element name="WsExcTest2PingRequest">
+    <xsd:complexType>
+      <xsd:all/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsRequest">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsTwoRequest">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="WsExcTest2PingResponse">
+    <xsd:complexType>
+      <xsd:all/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsResponse">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsTwoResponse">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+</xsd:schema>

+ 144 - 0
testing/esp/esdlcmd/key/wsexctest3-wsdl-default.wsdl

@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:hpccsystems:ws:wsexctest3" targetNamespace="urn:hpccsystems:ws:wsexctest3">
+  <wsdl:types>
+    <xsd:schema elementFormDefault="qualified" targetNamespace="urn:hpccsystems:ws:wsexctest3">
+      <xsd:element name="string" nillable="true" type="xsd:string"/>
+      <xsd:complexType name="EspException">
+        <xsd:all>
+          <xsd:element name="Code" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Audience" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Message" type="xsd:string" minOccurs="0"/>
+        </xsd:all>
+      </xsd:complexType>
+      <xsd:complexType name="ArrayOfEspException">
+        <xsd:sequence>
+          <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Exception" type="tns:EspException" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:element name="Exceptions" type="tns:ArrayOfEspException"/>
+      <xsd:element name="InlineExceptionsRequest">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="WsExcTest3PingRequest">
+        <xsd:complexType>
+          <xsd:all/>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsRequest">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="InlineExceptionsResponse">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element name="Exceptions" type="tns:ArrayOfEspException" minOccurs="0" maxOccurs="1"/>
+            <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="WsExcTest3PingResponse">
+        <xsd:complexType>
+          <xsd:all/>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsResponse">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="EspSoapFault">
+    <wsdl:part name="parameters" element="tns:Exceptions"/>
+  </wsdl:message>
+  <wsdl:message name="InlineExceptionsSoapIn">
+    <wsdl:part name="parameters" element="tns:InlineExceptionsRequest"/>
+  </wsdl:message>
+  <wsdl:message name="InlineExceptionsSoapOut">
+    <wsdl:part name="parameters" element="tns:InlineExceptionsResponse"/>
+  </wsdl:message>
+  <wsdl:message name="PingSoapIn">
+    <wsdl:part name="parameters" element="tns:WsExcTest3PingRequest"/>
+  </wsdl:message>
+  <wsdl:message name="PingSoapOut">
+    <wsdl:part name="parameters" element="tns:WsExcTest3PingResponse"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsSoapIn">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsRequest"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsSoapOut">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsResponse"/>
+  </wsdl:message>
+  <wsdl:portType name="WsExcTest3ServiceSoap">
+    <wsdl:operation name="InlineExceptions">
+      <wsdl:input message="tns:InlineExceptionsSoapIn"/>
+      <wsdl:output message="tns:InlineExceptionsSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+    <wsdl:operation name="Ping">
+      <wsdl:input message="tns:PingSoapIn"/>
+      <wsdl:output message="tns:PingSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptions">
+      <wsdl:input message="tns:SoapFaultExceptionsSoapIn"/>
+      <wsdl:output message="tns:SoapFaultExceptionsSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="WsExcTest3ServiceSoap" type="tns:WsExcTest3ServiceSoap">
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <wsdl:operation name="InlineExceptions">
+      <soap:operation style="document" soapAction="WsExcTest3/InlineExceptions?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="Ping">
+      <soap:operation style="document" soapAction="WsExcTest3/Ping?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptions">
+      <soap:operation style="document" soapAction="WsExcTest3/SoapFaultExceptions?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="WsExcTest3">
+    <wsdl:port name="WsExcTest3ServiceSoap" binding="tns:WsExcTest3ServiceSoap">
+      <soap:address location="localhost"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>

+ 143 - 0
testing/esp/esdlcmd/key/wsexctest3-wsdl-no-exc.wsdl

@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:hpccsystems:ws:wsexctest3" targetNamespace="urn:hpccsystems:ws:wsexctest3">
+  <wsdl:types>
+    <xsd:schema elementFormDefault="qualified" targetNamespace="urn:hpccsystems:ws:wsexctest3">
+      <xsd:element name="string" nillable="true" type="xsd:string"/>
+      <xsd:complexType name="EspException">
+        <xsd:all>
+          <xsd:element name="Code" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Audience" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Message" type="xsd:string" minOccurs="0"/>
+        </xsd:all>
+      </xsd:complexType>
+      <xsd:complexType name="ArrayOfEspException">
+        <xsd:sequence>
+          <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="Exception" type="tns:EspException" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:element name="Exceptions" type="tns:ArrayOfEspException"/>
+      <xsd:element name="InlineExceptionsRequest">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="WsExcTest3PingRequest">
+        <xsd:complexType>
+          <xsd:all/>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsRequest">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="InlineExceptionsResponse">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="WsExcTest3PingResponse">
+        <xsd:complexType>
+          <xsd:all/>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="SoapFaultExceptionsResponse">
+        <xsd:complexType>
+          <xsd:all>
+            <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+          </xsd:all>
+        </xsd:complexType>
+      </xsd:element>
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="EspSoapFault">
+    <wsdl:part name="parameters" element="tns:Exceptions"/>
+  </wsdl:message>
+  <wsdl:message name="InlineExceptionsSoapIn">
+    <wsdl:part name="parameters" element="tns:InlineExceptionsRequest"/>
+  </wsdl:message>
+  <wsdl:message name="InlineExceptionsSoapOut">
+    <wsdl:part name="parameters" element="tns:InlineExceptionsResponse"/>
+  </wsdl:message>
+  <wsdl:message name="PingSoapIn">
+    <wsdl:part name="parameters" element="tns:WsExcTest3PingRequest"/>
+  </wsdl:message>
+  <wsdl:message name="PingSoapOut">
+    <wsdl:part name="parameters" element="tns:WsExcTest3PingResponse"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsSoapIn">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsRequest"/>
+  </wsdl:message>
+  <wsdl:message name="SoapFaultExceptionsSoapOut">
+    <wsdl:part name="parameters" element="tns:SoapFaultExceptionsResponse"/>
+  </wsdl:message>
+  <wsdl:portType name="WsExcTest3ServiceSoap">
+    <wsdl:operation name="InlineExceptions">
+      <wsdl:input message="tns:InlineExceptionsSoapIn"/>
+      <wsdl:output message="tns:InlineExceptionsSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+    <wsdl:operation name="Ping">
+      <wsdl:input message="tns:PingSoapIn"/>
+      <wsdl:output message="tns:PingSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptions">
+      <wsdl:input message="tns:SoapFaultExceptionsSoapIn"/>
+      <wsdl:output message="tns:SoapFaultExceptionsSoapOut"/>
+      <wsdl:fault name="excfault" message="tns:EspSoapFault"/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="WsExcTest3ServiceSoap" type="tns:WsExcTest3ServiceSoap">
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <wsdl:operation name="InlineExceptions">
+      <soap:operation style="document" soapAction="WsExcTest3/InlineExceptions?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="Ping">
+      <soap:operation style="document" soapAction="WsExcTest3/Ping?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="SoapFaultExceptions">
+      <soap:operation style="document" soapAction="WsExcTest3/SoapFaultExceptions?ver_=0.000000"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="excfault">
+        <soap:fault name="excfault" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="WsExcTest3">
+    <wsdl:port name="WsExcTest3ServiceSoap" binding="tns:WsExcTest3ServiceSoap">
+      <soap:address location="localhost"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>

+ 58 - 0
testing/esp/esdlcmd/key/wsexctest3-xsd-default.xsd

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:hpccsystems:ws:wsexctest3" elementFormDefault="qualified" targetNamespace="urn:hpccsystems:ws:wsexctest3">
+  <xsd:element name="string" nillable="true" type="xsd:string"/>
+  <xsd:complexType name="EspException">
+    <xsd:all>
+      <xsd:element name="Code" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Audience" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Message" type="xsd:string" minOccurs="0"/>
+    </xsd:all>
+  </xsd:complexType>
+  <xsd:complexType name="ArrayOfEspException">
+    <xsd:sequence>
+      <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Exception" type="tns:EspException" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="Exceptions" type="tns:ArrayOfEspException"/>
+  <xsd:element name="InlineExceptionsRequest">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="WsExcTest3PingRequest">
+    <xsd:complexType>
+      <xsd:all/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsRequest">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="InlineExceptionsResponse">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element name="Exceptions" type="tns:ArrayOfEspException" minOccurs="0" maxOccurs="1"/>
+        <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="WsExcTest3PingResponse">
+    <xsd:complexType>
+      <xsd:all/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsResponse">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+</xsd:schema>

+ 57 - 0
testing/esp/esdlcmd/key/wsexctest3-xsd-no-exc.xsd

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:hpccsystems:ws:wsexctest3" elementFormDefault="qualified" targetNamespace="urn:hpccsystems:ws:wsexctest3">
+  <xsd:element name="string" nillable="true" type="xsd:string"/>
+  <xsd:complexType name="EspException">
+    <xsd:all>
+      <xsd:element name="Code" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Audience" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Message" type="xsd:string" minOccurs="0"/>
+    </xsd:all>
+  </xsd:complexType>
+  <xsd:complexType name="ArrayOfEspException">
+    <xsd:sequence>
+      <xsd:element name="Source" type="xsd:string" minOccurs="0"/>
+      <xsd:element name="Exception" type="tns:EspException" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="Exceptions" type="tns:ArrayOfEspException"/>
+  <xsd:element name="InlineExceptionsRequest">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="WsExcTest3PingRequest">
+    <xsd:complexType>
+      <xsd:all/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsRequest">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="RequestString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="InlineExceptionsResponse">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="WsExcTest3PingResponse">
+    <xsd:complexType>
+      <xsd:all/>
+    </xsd:complexType>
+  </xsd:element>
+  <xsd:element name="SoapFaultExceptionsResponse">
+    <xsd:complexType>
+      <xsd:all>
+        <xsd:element minOccurs="0" name="ResponseString" type="xsd:string"/>
+      </xsd:all>
+    </xsd:complexType>
+  </xsd:element>
+</xsd:schema>

+ 1 - 0
tools/esdlcmd/esdlcmd_common.hpp

@@ -108,6 +108,7 @@ typedef IEsdlCommand *(*EsdlCommandFactory)(const char *cmdname);
 #define ESDLOPT_WSDL_ADDRESS            "--wsdl-address"
 #define ESDLOPT_UNVERSIONED_NAMESPACE   "--unversioned-ns"
 #define ESDLOPT_UNVERSIONED_NAMESPACE_S "-uvns"
+#define ESDLOPT_NO_EXCEPT_INLINE        "--no-exceptions-inline"
 
 #define DEFAULT_NAMESPACE_BASE          "urn:hpccsystems:ws"
 #define ESDLOPTLIST_DELIMITER           ";"

+ 14 - 0
tools/esdlcmd/esdlcmd_core.cpp

@@ -113,6 +113,8 @@ public:
         StringAttr oneOption;
         if (iter.matchOption(oneOption, ESDLOPT_INCLUDE_PATH) || iter.matchOption(oneOption, ESDLOPT_INCLUDE_PATH_S))
             return false;  //Return false to negate allowing the include path options from parent class
+        if (iter.matchFlag(optNoExceptionsInline, ESDLOPT_NO_EXCEPT_INLINE))
+            return true;
 
         if (EsdlConvertCmd::parseCommandLineOption(iter))
             return true;
@@ -276,6 +278,7 @@ public:
         puts("   --no-arrayof                         Supresses the use of the arrrayof element. arrayof optimizes the XML output to include 'ArrayOf...'" );
         puts("                                        structure definitions for those EsdlArray elements with no item_tag attribute. Works in conjunction" );
         puts("                                        with an optimized stylesheet that doesn't generate these itself. This defaults to on.");
+        puts("   --no-exceptions-inline               Do not modify the interface to include an Exceptions element inline in the response.");
     }
 
     virtual void usage()
@@ -342,6 +345,11 @@ public:
         {
             params->setProp( "no_annot_Param", "true()" );
         }
+
+        if( optNoExceptionsInline )
+        {
+            params->setProp( "no_exceptions_inline", "true()" );
+        }
     }
 
     virtual void outputToFile()
@@ -449,6 +457,7 @@ public:
     bool optNoCollapse;
     bool optNoArrayOf;
     bool optUnversionedNamespace;
+    bool optNoExceptionsInline;
 
 protected:
     StringBuffer outputBuffer;
@@ -578,6 +587,11 @@ public:
 
         params->setProp( "create_wsdl", "true()" );
         setXpathQuotedParam(params, "location", optWsdlAddress.str());
+
+        if( optNoExceptionsInline )
+        {
+            params->setProp( "no_exceptions_inline", "true()" );
+        }
     }
 
 public: