<!--
  ~ 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.
  -->

<!-- This schema is used to generate the JAX-B artifacts for the JAXBWrapperTests -->
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema"
	targetNamespace="urn://stock1.test.org"
	xmlns:tns="urn://stock1.test.org" >
	<s:element name="getPrice" type="tns:getPrice" />
	<s:complexType name="getPrice">
      <s:complexContent>
        <s:restriction base="s:anyType">
          <s:sequence>
            <s:element name="fund" type="s:string"/>
            <s:element name="holdings." type="s:string"/>
            <s:element name="nav" type="s:string"/>
          </s:sequence>
        </s:restriction>
      </s:complexContent>
    </s:complexType>
    
    <s:element name="getPriceResponse" type="tns:StockPrice" />
	<s:complexType name="StockPrice">
      <s:complexContent>
        <s:restriction base="s:anyType">
          <s:sequence>
            <s:element name="price" type="s:string"/>
          </s:sequence>
        </s:restriction>
      </s:complexContent>
    </s:complexType>
</s:schema>