<!--

    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<definitions
  name="HelloTest"
  targetNamespace="urn:test"
  xmlns="http://schemas.xmlsoap.org/wsdl/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:ttns="urn:test:types"
  xmlns:tns="urn:test">
  
  <types>
    <xsd:schema targetNamespace="urn:test:types">

      <xsd:element name="Test1Request" type="ttns:Test1RequestType"/>
      <xsd:complexType name="Test1RequestType">
        <xsd:sequence>
            <xsd:element name="test1RequestParamA" type="xsd:string"/>
            <xsd:element name="test1RequestParamB" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>

      <xsd:element name="Test2Request" type="ttns:Test2RequestType"/>
      <xsd:complexType name="Test2RequestType">
        <xsd:sequence>
            <xsd:element name="test2RequestParamA" type="xsd:string"/>
            <xsd:element name="test2RequestParamB" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>

      <xsd:element name="Test1Response" type="ttns:Test1ResponseType"/>
      <xsd:complexType name="Test1ResponseType">
        <xsd:sequence>
            <xsd:element name="test1ResponseParamA" type="xsd:int"/>
            <xsd:element name="test1ResponseParamB" type="xsd:int"/>
        </xsd:sequence>
      </xsd:complexType>

    <xsd:element name="FaultOneReason" type="ttns:FaultOne"/>
    <xsd:complexType name="FaultOne">
        <xsd:sequence>
            <xsd:element name="messageID1" type="xsd:string"/>
            <xsd:element name="message1" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="FaultTwoReason" type="ttns:FaultTwo"/>
    <xsd:complexType name="FaultTwo">
        <xsd:sequence>
            <xsd:element name="messageID2" type="xsd:string"/>
            <xsd:element name="message2" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="FaultThreeReason" type="ttns:FaultThree"/>
    <xsd:complexType name="FaultThree">
        <xsd:sequence>
            <xsd:element name="messageID3" type="xsd:string"/>
            <xsd:element name="message3" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>

    </xsd:schema>

  </types>

  <message name="Test1Request">
    <part name="params1" element="ttns:Test1Request"/>
  </message>

  <message name="Test2Request">
    <part name="params2" element="ttns:Test2Request"/>
  </message>
  
  <message name="Test1Response">
    <part name="result" element="ttns:Test1Response"/>
  </message>  

  <message name="FaultOne">
    <part name="reason1" element="ttns:FaultOneReason"/>
    <part name="reason3" element="ttns:FaultThreeReason"/>
  </message>
  
  <message name="FaultTwo">
    <part name="reason" element="ttns:FaultTwoReason"/>
  </message>

  
  <portType name="Test">
    <operation name="test1">
      <input message="tns:Test1Request"/>
      <output message="tns:Test1Response"/>
      <fault name="FaultTwo" message="tns:FaultTwo"/>
    </operation>  
  </portType>
  
  <binding name="TestBinding" type="tns:Test">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="test1">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal" part="params1"/>
          <soap:header message="tns:Test2Request" part="params2" use="literal">
            <soap:headerfault message="tns:FaultOne" part="reason1" use="literal"/>
            <soap:headerfault message="tns:FaultOne" part="reason3" use="literal"/>
          </soap:header>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
      <fault name="FaultTwo">
        <soap:fault name="FaultTwo" use="literal"/>
      </fault>
    </operation>      
  </binding>
    
  <service name="TestService">
    <port name="TestPort" binding="tns:TestBinding">
      <soap:address location="http://test.org/test"/>
    </port>
  </service>
  
</definitions>
