<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:tns="http://java.sun.com/xml/ns/jax-rpc/ri/dd"
        targetNamespace="http://java.sun.com/xml/ns/jax-rpc/ri/dd"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        version="1.0">

    <xsd:element name="webServices">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="endpoint" type="tns:endpointType" minOccurs="0" maxOccurs="unbounded"/>
                <xsd:element name="endpointMapping" type="tns:endpointMappingType" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
            <xsd:attribute name="version" type="xsd:string" use="required"/>
            <xsd:attribute name="targetNamespaceBase" type="xsd:string"/>
            <xsd:attribute name="typeNamespaceBase" type="xsd:string"/>
            <xsd:attribute name="urlPatternBase" type="xsd:string"/>
        </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="endpointType">
        <xsd:sequence>
            <xsd:element name="handlerChains" type="tns:handlerChainsType" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="required"/>
        <xsd:attribute name="displayName" type="xsd:string"/>
        <xsd:attribute name="description" type="xsd:string"/>
        <xsd:attribute name="interface" type="xsd:string"/>
        <xsd:attribute name="implementation" type="xsd:string"/>
        <xsd:attribute name="model" type="xsd:anyURI"/>
    </xsd:complexType>

    <xsd:complexType name="endpointMappingType">
        <xsd:sequence>
        </xsd:sequence>
        <xsd:attribute name="endpointName" type="xsd:string" use="required"/>
        <xsd:attribute name="urlPattern" type="xsd:string" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="handlerChainsType">
        <xsd:sequence>
            <xsd:element name="chain" type="tns:chainType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="chainType">
        <xsd:sequence>
            <xsd:element name="handler" type="tns:handlerType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="runAt" type="tns:runAtType" use="required"/>
        <xsd:attribute name="roles" type="tns:roleListType"/>
    </xsd:complexType>

    <xsd:simpleType name="roleListType">
        <xsd:list itemType="xsd:anyURI"/>
    </xsd:simpleType>

    <xsd:complexType name="handlerType">
        <xsd:sequence>
            <xsd:element name="property" type="tns:propertyType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="className" type="xsd:string" use="required"/>
        <xsd:attribute name="headers" type="tns:headerListType"/>
    </xsd:complexType>

    <xsd:simpleType name="headerListType">
        <xsd:list itemType="xsd:QName"/>
    </xsd:simpleType>

    <xsd:complexType name="propertyType">
        <xsd:sequence>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="required"/>
        <xsd:attribute name="value" type="xsd:string" use="required"/>
    </xsd:complexType>

    <xsd:simpleType name ="runAtType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="client"/>
            <xsd:enumeration value="server"/>
        </xsd:restriction>
    </xsd:simpleType>

</xsd:schema>
