<!--
  ~ 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.
  -->

<definitions xmlns:s1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
             xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:s="http://www.w3.org/2001/XMLSchema"
             xmlns:tns="http://xmlsoap.org/Ping"
             xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
             xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
             xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
             targetNamespace="http://xmlsoap.org/Ping"
             xmlns="http://schemas.xmlsoap.org/wsdl/">
    <types>
        <s:schema>
       <s:import
         namespace="http://xmlsoap.org/Ping" 
         schemaLocation="ping-mod.xsd" />
     </s:schema>

        <s:schema elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <s:attribute name="Id" type="s:string"/>
        </s:schema>
    </types>
    <message name="PingRequest">
        <part name="ping" element="tns:Ping"/>
    </message>
    <message name="PingResponse">
        <part name="pingResponse" element="tns:PingResponse"/>
    </message>
    <portType name="PingPort">
        <operation name="Ping">
            <input message="tns:PingRequest"/>
            <output message="tns:PingResponse"/>
        </operation>
    </portType>
    <binding name="PingBinding" type="tns:PingPort">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="Ping">
            <soap:operation soapAction="Ping" style="document"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
    </binding>
    <service name="PingService">
        <port name="Ping1" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/Ping1"/>
        </port>
        <port name="Ping2" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/Ping2"/>
        </port>
        <port name="Ping2a" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/Ping2a"/>
        </port>
        <port name="Ping3" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/Ping3"/>
        </port>
        <port name="Ping4" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/Ping4"/>
        </port>
        <port name="Ping5" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/Ping5"/>
        </port>
        <port name="Ping6" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/Ping6"/>
        </port>
        <port name="Ping7" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/Ping7"/>
        </port>
        <port name="STPing1" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/STPing1"/>
        </port>
        <port name="STPing3" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/STPing3"/>
        </port>
        <port name="STPing4" binding="tns:PingBinding">
            <soap:address location="http://localhost:9080/pingservice/STPing4"/>
        </port>
        
    </service>
</definitions>
