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

<!--
    1. AddRequest is of AddRequestType
    2. AddRequestType extends from AbstractParameterType and it AddRequestType has more stuff defined in a sequence, in
    addition to the extension.
    3. AbstractParameterType has primitive types only
-->

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
           targetNamespace="http://ws.apache.org/schemas/axis2" xmlns="http://ws.apache.org/schemas/axis2"
           xmlns:ns="http://ws.apache.org/schemas/axis2" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="AddRequest" type="AddRequestType"/>
    <xs:complexType name="AddRequestType">
        <xs:complexContent>
            <xs:extension base="ns:AbstractParameterType">
                <xs:sequence>
                    <xs:element maxOccurs="1" minOccurs="1" name="ParameterThree" type="xs:int"/>
                    <xs:element maxOccurs="1" minOccurs="1" name="ParameterFour" type="xs:string"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType abstract="true" name="AbstractParameterType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="ParameterOne" type="xs:int"/>
            <xs:element maxOccurs="1" minOccurs="1" name="ParameterTwo" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>