<!--
  ~ 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:definitions xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
                  xmlns:ns0="http://axisversion.sample/xsd"
                  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
                  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
                  xmlns:ns1="http://org.apache.axis2/xsd"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema"
                  xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  targetNamespace="http://axisversion.sample/xsd">
  <wsdl:types>
    <xs:schema xmlns:ns="http://axisversion.sample/xsd" attributeFormDefault="qualified"
               elementFormDefault="unqualified" targetNamespace="http://axisversion.sample/xsd">
      <xs:element name="ExceptionFault">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="Exception" nillable="true"
                        type="xs:anyType"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="getVersionResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>
  </wsdl:types>
  <wsdl:message name="getVersionRequest"/>
  <wsdl:message name="getVersionResponse">
    <wsdl:part name="parameters" element="ns0:getVersionResponse"/>
  </wsdl:message>
  <wsdl:message name="getVersionFault">
    <wsdl:part name="parameters" element="ns0:ExceptionFault"/>
  </wsdl:message>
  <wsdl:portType name="VersionPortType">
    <wsdl:operation name="getVersion">
      <wsdl:input message="ns0:getVersionRequest" wsaw:Action="urn:getVersion"/>
      <wsdl:output message="ns0:getVersionResponse" wsaw:Action="urn:getVersionResponse"/>
      <wsdl:fault message="ns0:getVersionFault" name="getVersionFault"
                  wsaw:Action="urn:getVersionFault"/>
    </wsdl:operation>

    <!-- This should turn into "fooBar()" -->
    <wsdl:operation name="foo-bar">
      <wsdl:input message="getVersionRequest"/>
    </wsdl:operation>

    <!-- This should turn into "fooBaR2()" -->
    <wsdl:operation name="Foo-ba.r2">
      <wsdl:input message="getVersionRequest"/>
    </wsdl:operation>

  </wsdl:portType>
  <wsdl:binding name="VersionSOAP11Binding" type="ns0:VersionPortType">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <wsdl:operation name="getVersion">
      <soap:operation soapAction="urn:getVersion" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
      <wsdl:fault name="getVersionFault">
        <soap:fault use="literal" name="getVersionFault"/>
      </wsdl:fault>
    </wsdl:operation>
    <wsdl:operation name="foo-bar">
      <soap:operation soapAction="urn:foo-bar" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
    </wsdl:operation>
    <wsdl:operation name="Foo-ba.r2">
      <soap:operation soapAction="urn:foo-bar" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
    </wsdl:operation>

  </wsdl:binding>
  <wsdl:service name="Version">
    <wsdl:port name="VersionSOAP11port_http" binding="ns0:VersionSOAP11Binding">
      <soap:address location="http://127.0.0.1:8000/axis2/services/Version"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>