<?xml version="1.0" encoding="UTF-8" ?>
<!--
  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.
-->

<xsd:schema
        targetNamespace="http://cxf.apache.org/configuration/beans"
        xmlns:tns="http://cxf.apache.org/configuration/beans"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified">


    <xsd:attributeGroup name="beanAttributes">
        <xsd:attribute name="name" type="xsd:string">
            <xsd:annotation>
                <xsd:documentation>
                    A unique identifier for the bean. This can also be a list of identifiers.
                    See documentation for attribute name in attribute group beanAttributes
                    in http://www.springframework.org/schema/beans/spring-beans.xsd
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="abstract" type="xsd:boolean">
            <xsd:annotation>
                <xsd:documentation>
                    Specifies if the bean is an abstract bean. Abstract beans act as parents for
                    concrete bean definitions and are not instantiated. The default is "false".
                    Setting this to "true" instructs the bean factory not to instantiate the bean.
                    See documentation for attribute abstract in attribute group beanAttributes
                    in http://www.springframework.org/schema/beans/spring-beans.xsd
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="depends-on" type="xsd:string">
            <xsd:annotation>
                <xsd:documentation>
                    A list of beans that the bean depends on being instantiated before it
                    can be instantiated.
                    See documentation for attribute depends-on in attribute group beanAttributes
                    in http://www.springframework.org/schema/beans/spring-beans.xsd
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="createdFromAPI" type="xsd:boolean">
            <xsd:annotation>
                <xsd:documentation>
                    Specifies that the user created that bean using CXF APIs like
                    Endpoint.publish or Service.getPort.
                    The default is "false".
                    Setting this to "true" does the following: Changes the internal name of the
                    bean by appending either ".jaxws-client" or ".jaxws-endpoint" to the bean's
                    id. Makes the bean abstract.
                    See documentation for attribute abstract in attribute group beanAttributes
                    in http://www.springframework.org/schema/beans/spring-beans.xsd
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:attributeGroup>

    <xsd:complexType name="ClassOrBeanType">
        <xsd:attribute name="class" type="xsd:string"/>
        <xsd:attribute name="bean"  type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="identifiedType" abstract="true">
        <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>

</xsd:schema>