<!--
  ~  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:axis2="http://services.samples"
                  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
                  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
                  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
                  xmlns:ns1="http://services.samples/xsd"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  targetNamespace="http://services.samples">
    <wsdl:documentation>SimpleStockQuoteService</wsdl:documentation>
    <wsdl:types>
        <xs:schema xmlns:ax21="http://services.samples/xsd"
                   xmlns:xs="http://www.w3.org/2001/XMLSchema"
                   targetNamespace="http://services.samples/xsd" attributeFormDefault="qualified"
                   elementFormDefault="qualified">
            <xs:element name="getQuote">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="request" type="ax21:GetQuote"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="GetQuote" type="ax21:GetQuote"/>
            <xs:complexType name="GetQuote">
                <xs:sequence>
                    <xs:element name="symbol" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
            <xs:element name="getQuoteResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="return" type="ax21:GetQuoteResponse"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="GetQuoteResponse" type="ax21:GetQuoteResponse"/>
            <xs:complexType name="GetQuoteResponse">
                <xs:sequence>
                    <xs:element name="change" type="xs:double"/>
                    <xs:element name="earnings" type="xs:double"/>
                    <xs:element name="high" type="xs:double"/>
                    <xs:element name="last" type="xs:double"/>
                    <xs:element name="lastTradeTimestamp" type="xs:string"/>
                    <xs:element name="low" type="xs:double"/>
                    <xs:element name="marketCap" type="xs:double"/>
                    <xs:element name="name" type="xs:string"/>
                    <xs:element name="open" type="xs:double"/>
                    <xs:element name="peRatio" type="xs:double"/>
                    <xs:element name="percentageChange" type="xs:double"/>
                    <xs:element name="prevClose" type="xs:double"/>
                    <xs:element name="symbol" type="xs:string"/>
                    <xs:element name="volume" type="xs:int"/>
                </xs:sequence>
            </xs:complexType>
            <xs:element name="placeOrder">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="order" type="ax21:PlaceOrder"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="PlaceOrder" type="ax21:PlaceOrder"/>
            <xs:complexType name="PlaceOrder">
                <xs:sequence>
                    <xs:element name="price" type="xs:double"/>
                    <xs:element name="quantity" type="xs:int"/>
                    <xs:element name="symbol" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="placeOrderMessage">
        <wsdl:part name="part1" element="ns1:placeOrder"/>
    </wsdl:message>
    <wsdl:message name="getQuoteMessage">
        <wsdl:part name="part1" element="ns1:getQuote"/>
    </wsdl:message>
    <wsdl:message name="getQuoteResponseMessage">
        <wsdl:part name="part1" element="ns1:getQuoteResponse"/>
    </wsdl:message>
    <wsdl:portType name="SimpleStockQuoteServicePortType">
        <wsdl:operation name="placeOrder">
            <wsdl:input xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
                        message="axis2:placeOrderMessage" wsaw:Action="urn:placeOrder"/>
        </wsdl:operation>
        <wsdl:operation name="getQuote">
            <wsdl:input xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
                        message="axis2:getQuoteMessage" wsaw:Action="urn:getQuote"/>
            <wsdl:output xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
                         message="axis2:getQuoteResponseMessage"
                         wsaw:Action="http://services.samples/SimpleStockQuoteServicePortType/getQuoteResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="SimpleStockQuoteServiceSOAP11Binding"
                  type="axis2:SimpleStockQuoteServicePortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="placeOrder">
            <soap:operation soapAction="urn:placeOrder" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
        </wsdl:operation>
        <wsdl:operation name="getQuote">
            <soap:operation soapAction="urn:getQuote" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="SimpleStockQuoteServiceSOAP12Binding"
                  type="axis2:SimpleStockQuoteServicePortType">
        <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="placeOrder">
            <soap12:operation soapAction="urn:placeOrder" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
        </wsdl:operation>
        <wsdl:operation name="getQuote">
            <soap12:operation soapAction="urn:getQuote" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="SimpleStockQuoteService">
        <wsdl:port name="SimpleStockQuoteServiceSOAP11port_http"
                   binding="axis2:SimpleStockQuoteServiceSOAP11Binding">
            <soap:address location="http://10.0.0.4:9000/axis2/services/SimpleStockQuoteService"/>
        </wsdl:port>
        <wsdl:port name="SimpleStockQuoteServiceSOAP12port_http"
                   binding="axis2:SimpleStockQuoteServiceSOAP12Binding">
            <soap12:address location="http://10.0.0.4:9000/axis2/services/SimpleStockQuoteService"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>