<!--
  ~ 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: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:types>
		<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ax21="http://services.samples/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://services.samples/xsd">
			<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="getQuoteMessage">
		<wsdl:part name="part1" element="ns1:getQuote"/>
	</wsdl:message>
	<wsdl:message name="getQuoteResponseMessage">
		<wsdl:part name="part1" element="ns1:getQuoteResponse"/>
	</wsdl:message>
	<wsdl:message name="placeOrderMessage">
		<wsdl:part name="part1" element="ns1:placeOrder"/>
	</wsdl:message>
	<wsdl:portType name="SimpleStockQuoteServicePortType">
		<wsdl:operation name="getQuote">
			<wsdl:input message="axis2:getQuoteMessage"/>
			<wsdl:output message="axis2:getQuoteResponseMessage"/>
		</wsdl:operation>
		<wsdl:operation name="placeOrder">
			<wsdl:input message="axis2:placeOrderMessage"/>
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:binding name="SimpleStockQuoteServiceSOAP11Binding" type="axis2:SimpleStockQuoteServicePortType">
		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
		<wsdl:operation name="getQuote">
			<soap:operation soapAction="urn:getQuote" style="document"/>
			<wsdl:input>
				<soap:body use="literal" namespace="http://services.samples"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" namespace="http://services.samples"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="placeOrder">
			<soap:operation soapAction="urn:placeOrder" style="document"/>
			<wsdl:input>
				<soap:body use="literal" namespace="http://services.samples"/>
			</wsdl:input>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:service name="SimpleStockQuoteService">
		<wsdl:port name="SimpleStockQuoteServiceSOAP11port" binding="axis2:SimpleStockQuoteServiceSOAP11Binding">
			<soap:address location="http://localhost:8080/axis2/services/SimpleStockQuoteService"/>
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>

