<?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 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="urn:activemq:core"
            targetNamespace="urn:activemq:core"
            attributeFormDefault="unqualified"
            elementFormDefault="qualified"
            version="1.0">

   <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>

   <xsd:element name="core" type="configurationType"/>

   <xsd:complexType name="configurationType">
      <xsd:all>
         <xsd:element name="name" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Node name. If set, it will be used in topology notifications.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="system-property-prefix" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  This defines the prefix which we will use to parse System properties for the configuration. Default=
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="internal-naming-prefix" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Artemis uses internal queues and addresses for implementing certain behaviours.  These queues and addresses
                  will be prefixed by default with "$.activemq.internal" to avoid naming clashes with user namespacing.
                  This can be overridden by setting this value to a valid Artemis address.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="amqp-use-core-subscription-naming" type="xsd:boolean" maxOccurs="1" minOccurs="0" default="false">
            <xsd:annotation>
               <xsd:documentation>
                  This enables making AMQP subscription queue names, match core queue names, for better interoperability between protocols.
                  Note: Enabling this to an existing broker if pre-existing amqp durable subscriptions already existed will require
                  clients to re-subscribe and to clean up old subscription names.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="resolve-protocols" type="xsd:boolean" default="true" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  If true then the ActiveMQ Artemis Server will make use of any Protocol Managers that are in available
                  on the classpath. If false then only the core protocol will be available, unless in Embedded mode
                  where users can inject their own Protocol Managers.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-datasync" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  that means the server will use fdatasync to confirm writes on the disk.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="persistence-enabled" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that the server will use the file based journal for persistence.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="scheduled-thread-pool-max-size" type="xsd:int" default="5" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Maximum number of threads to use for the scheduled thread pool
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="thread-pool-max-size" type="xsd:int" default="30" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Maximum number of threads to use for the thread pool. -1 means 'no limits'.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="graceful-shutdown-enabled" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that graceful shutdown is enabled
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="graceful-shutdown-timeout" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how long (in ms) to wait for clients to disconnect before shutting down the server
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="security-enabled" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that security is enabled
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="security-invalidation-interval" type="xsd:long" default="10000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how long (in ms) to wait before invalidating an entry in the authentication or authorization cache
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="authentication-cache-size" type="xsd:long" default="1000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how large to make the authentication cache
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="authorization-cache-size" type="xsd:long" default="1000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how large to make the authorization cache
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-lock-acquisition-timeout" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how long (in ms) to wait to acquire a file lock on the journal
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="wild-card-routing-enabled" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that the server supports wild card routing
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="management-address" type="xsd:string" default="jms.queue.activemq.management" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the name of the management address to send management messages to. It is prefixed with "jms.queue" so
                  that JMS clients can send messages to it.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="management-notification-address" type="xsd:string" default="activemq.notifications"
                      maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the name of the address that consumers bind to receive management notifications
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="cluster-user" type="xsd:string" default="ACTIVEMQ.CLUSTER.ADMIN.USER" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Cluster username. It applies to all cluster configurations.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="cluster-password" maxOccurs="1" minOccurs="0" type="xsd:string" default="CHANGE ME!!">
            <xsd:annotation>
               <xsd:documentation>
                  Cluster password. It applies to all cluster configurations.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="password-codec" type="xsd:string"
                      default="org.apache.activemq.artemis.utils.DefaultSensitiveStringCodec" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Class name and its parameters for the Decoder used to decode the masked password. Ignored if
                  mask-password is false. The format of this property is a full qualified class name optionally followed
                  by key/value pairs.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="mask-password" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  This option controls whether passwords in server configuration need be masked. If set to "true" the
                  passwords are masked.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="log-delegate-factory-class-name" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: the name of the factory class to use for log delegation
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="jmx-management-enabled" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that the management API is available via JMX
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="jmx-domain" type="xsd:string" default="org.apache.activemq" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the JMX domain used to registered ActiveMQ Artemis MBeans in the MBeanServer
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="jmx-use-broker-name" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Whether or not to use the broker name in the JMX properties
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="message-counter-enabled" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that message counters are enabled
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="message-counter-sample-period" type="xsd:long" default="10000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the sample period (in ms) to use for message counters
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="message-counter-max-day-history" type="xsd:int" default="10" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how many days to keep message counter history
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="connection-ttl-override" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  if set, this will override how long (in ms) to keep a connection alive without receiving a ping. -1
                  disables this setting.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="connection-ttl-check-interval" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how often (in ms) to check connections for ttl violation
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="configuration-file-refresh-period" type="xsd:long" default="5000" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how often (in ms) to check the configuration file for modifications
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="temporary-queue-namespace" type="xsd:string" default="" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the namespace to use for looking up address settings for temporary queues
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="async-connection-execution-enabled" type="xsd:boolean" default="true" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  should certain incoming packets on the server be handed off to a thread from the thread pool for
                  processing or should they be handled on the remoting thread?
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="transaction-timeout" type="xsd:long" default="300000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how long (in ms) before a transaction can be removed from the resource manager after create time
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="transaction-timeout-scan-period" type="xsd:long" default="1000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how often (in ms) to scan for timeout transactions
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="message-expiry-scan-period" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how often (in ms) to scan for expired messages
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="message-expiry-thread-priority" type="xsd:int" default="3" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: the priority of the thread expiring messages
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="address-queue-scan-period" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how often (in ms) to scan for addresses and queues that need to be deleted
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="id-cache-size" type="xsd:int" default="20000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the size of the cache for pre-creating message ID's
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="persist-id-cache" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that ID's are persisted to the journal
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="remoting-incoming-interceptors" type="class-name-sequenceType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  a list of &lt;class-name/&gt; elements with the names of classes to use for intercepting incoming
                  remoting packets
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="remoting-outgoing-interceptors" type="class-name-sequenceType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  a list of &lt;class-name/&gt; elements with the names of classes to use for intercepting outgoing
                  remoting packets
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="persist-delivery-count-before-delivery" type="xsd:boolean" default="false" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  True means that the delivery count is persisted before delivery. False means that this only happens
                  after a message has been cancelled.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-redelivery-records" type="xsd:long" default="10" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The default for this value is 10, however the recommended set for this is 1.
                  The system will add a store update for every redelivery happening on the system.
                  It is recommended to keep max-redelivery-records=1 in situations where you are operating with very short redelivery delays as you will be creating unecessary records on the journal.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="populate-validated-user" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that the server will add the name of the validated user to messages it sends
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="reject-empty-validated-user" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that the server will not allow any message that doesn't have a validated user, in JMS this is JMSXUserID
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="mqtt-session-scan-interval" type="xsd:long" default="5000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how often (in ms) to scan for expired MQTT sessions
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element ref="connectors" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="acceptors" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="broadcast-groups" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="discovery-groups" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="diverts" maxOccurs="1" minOccurs="0"/>

         <!-- QUEUES -->
         <xsd:element name="queues" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: a list of pre configured queues to create
               </xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="queue" maxOccurs="unbounded" minOccurs="0">
                     <xsd:complexType>
                        <xsd:all>
                           <xsd:element name="address" type="xsd:string" maxOccurs="1" minOccurs="0">
                              <xsd:annotation>
                                 <xsd:documentation>
                                    address for the queue
                                 </xsd:documentation>
                              </xsd:annotation>
                           </xsd:element>
                           <xsd:element name="user" type="xsd:string" maxOccurs="1" minOccurs="0">
                              <xsd:annotation>
                                 <xsd:documentation>
                                    user to associate for creating the queue
                                 </xsd:documentation>
                              </xsd:annotation>
                           </xsd:element>
                           <xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
                           <xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
                              <xsd:annotation>
                                 <xsd:documentation>
                                    whether the queue is durable (persistent)
                                 </xsd:documentation>
                              </xsd:annotation>
                           </xsd:element>
                        </xsd:all>
                        <xsd:attribute name="name" type="xsd:string" use="required">
                           <xsd:annotation>
                              <xsd:documentation>
                                 unique name of this queue
                              </xsd:documentation>
                           </xsd:annotation>
                        </xsd:attribute>
                        <xsd:attribute name="max-consumers" type="xsd:integer" use="optional"/>
                        <xsd:attribute name="purge-on-no-consumers" type="xsd:boolean" use="optional"/>
                        <xsd:attribute name="exclusive" type="xsd:boolean" use="optional"/>
                        <xsd:attribute name="group-rebalance" type="xsd:boolean" use="optional"/>
                        <xsd:attribute name="group-rebalance-pause-dispatch" type="xsd:boolean" use="optional"/>
                        <xsd:attribute name="group-buckets" type="xsd:int" use="optional"/>
                        <xsd:attribute name="group-first-key" type="xsd:string" use="optional"/>
                        <xsd:attribute name="last-value" type="xsd:boolean" use="optional"/>
                        <xsd:attribute name="last-value-key" type="xsd:string" use="optional"/>
                        <xsd:attribute name="non-destructive" type="xsd:boolean" use="optional"/>
                        <xsd:attribute name="consumers-before-dispatch" type="xsd:int" use="optional"/>
                        <xsd:attribute name="delay-before-dispatch" type="xsd:long" use="optional"/>
                        <xsd:attributeGroup ref="xml:specialAttrs"/>
                     </xsd:complexType>
                  </xsd:element>
               </xsd:sequence>
               <xsd:attributeGroup ref="xml:specialAttrs"/>
            </xsd:complexType>
         </xsd:element>

         <xsd:element ref="bridges" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="federations" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="ha-policy" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="cluster-connections" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="broker-connections" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="connection-routers" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="grouping-handler" maxOccurs="1" minOccurs="0"/>

         <xsd:element name="paging-directory" type="xsd:string" default="data/paging" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the directory to store paged messages in
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="bindings-directory" type="xsd:string" default="data/bindings" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the directory to store the persisted bindings to
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="create-bindings-dir" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that the server will create the bindings directory on start up
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="page-max-concurrent-io" type="xsd:int" default="5" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The max number of concurrent reads allowed on paging
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="read-whole-page" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Whether the whole page is read while getting message after page cache is evicted.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-directory" type="xsd:string" default="data/journal" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the directory to store the journal files in
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-retention-directory" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the directory to store journal-retention message in and rention configuraion.
               </xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
               <xsd:simpleContent>
                  <xsd:extension base="xsd:string">
                     <xsd:attribute name="unit" use="optional">
                        <xsd:annotation>
                           <xsd:documentation>
                              This configures the period type to use on limit. By default it is DAYS.
                           </xsd:documentation>
                        </xsd:annotation>
                        <xsd:simpleType>
                           <xsd:restriction base="xsd:string">
                              <xsd:enumeration value="DAYS"/>
                              <xsd:enumeration value="HOURS"/>
                              <xsd:enumeration value="MINUTES"/>
                              <xsd:enumeration value="SECONDS"/>
                           </xsd:restriction>
                        </xsd:simpleType>
                     </xsd:attribute>
                     <xsd:attribute name="period" type="xsd:integer" use="optional">
                        <xsd:annotation>
                           <xsd:documentation>
                              The amount of time used to keep files.
                           </xsd:documentation>
                        </xsd:annotation>
                     </xsd:attribute>
                     <xsd:attribute name="storage-limit" type="xsd:string" use="optional">
                        <xsd:annotation>
                           <xsd:documentation>
                              Size (in bytes) before we starting removing files from the retention area.
                              this is an extra protection on top of the period.
                              Notice we first remove files based on period and if you're using more storage then you
                              configured we start removing older files.
                              By default this is unlimited (not filled).
                              Supports byte notation like "K", "Mb", "MiB", "GB", etc.
                           </xsd:documentation>
                        </xsd:annotation>
                     </xsd:attribute>
                  </xsd:extension>
               </xsd:simpleContent>
            </xsd:complexType>
         </xsd:element>

         <xsd:element name="node-manager-lock-directory" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the directory to store the node manager lock file
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="create-journal-dir" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that the journal directory will be created
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-type" default="ASYNCIO" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the type of journal to use
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="ASYNCIO"/>
                  <xsd:enumeration value="NIO"/>
                  <xsd:enumeration value="MAPPED"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>

         <xsd:element name="journal-buffer-timeout" type="xsd:long" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The timeout (in nanoseconds) used to flush internal buffers on the journal. The exact default value
                  depend on whether the journal is ASYNCIO or NIO.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-device-block-size" type="xsd:long" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The size in bytes used by the device. This is usually translated as fstat/st_blksize
                  And this is a way to bypass the value returned as st_blksize.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-buffer-size" type="xsd:string" default="501760" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The size (in bytes) of the internal buffer on the journal.
                  Supports byte notation like "K", "Mb", "MiB", "GB", etc.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-sync-transactional" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  if true wait for transaction data to be synchronized to the journal before returning response to
                  client
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-sync-non-transactional" type="xsd:boolean" default="true" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  if true wait for non transaction data to be synced to the journal before returning response to client.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="log-journal-write-rate" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Whether to log messages about the journal write rate
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-file-size" default="10485760" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The size (in bytes) of each journal file.
                  Supports byte notation like "K", "Mb", "MiB", "GB", etc.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-min-files" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how many journal files to pre-create
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-pool-files" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how many journal files to pre-create
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-compact-percentage" type="xsd:int" default="30" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The percentage of live data on which we consider compacting the journal
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-compact-min-files" type="xsd:int" default="10" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The minimal number of data files before we can start compacting
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-max-io" type="xsd:int" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the maximum number of write requests that can be in the AIO queue at any one time. Default is 500 for
                  AIO and 1 for NIO.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="journal-file-open-timeout" type="xsd:int" default="5" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the length of time in seconds to wait when opening a new Journal file before timing out and failing
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="server-dump-interval" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Interval to log server specific information (e.g. memory usage etc)
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="global-max-messages" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Number of messages before all addresses will enter into their Full Policy configured.
                  It works in conjunction with global-max-size, being watever value hits its maximum first.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="global-max-size" type="xsd:string" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Size (in bytes) before all addresses will enter into their Full Policy configured upon messages being
                  produced.
                  Supports byte notation like "K", "Mb", "MiB", "GB", etc.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-disk-usage" type="xsd:int" default="90" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Max percentage of disk usage before the system blocks or fails clients.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="disk-scan-period" type="xsd:long" default="5000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how often (in ms) to scan the disks for full disks.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="memory-warning-threshold" type="xsd:int" default="25" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Percentage of available memory which will trigger a warning log
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="memory-measure-interval" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  frequency to sample JVM memory in ms (or -1 to disable memory sampling)
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="large-messages-directory" type="xsd:string" default="data/largemessages"
                      maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the directory to store large messages
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element ref="store" maxOccurs="1" minOccurs="0"/>

         <xsd:element name="critical-analyzer" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  should analyze response time on critical paths and decide for broker log, shutdown or halt.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="critical-analyzer-timeout" type="xsd:long" default="120000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The default timeout used on analyzing timeouts on the critical path.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="critical-analyzer-check-period" type="xsd:long" default="0" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The timeout here will be defaulted to half critical-analyzer-timeout, calculation happening at runtime
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="critical-analyzer-policy" default="LOG" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Should the server log, be shutdown or halted upon critical analysis failure.
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="LOG"/>
                  <xsd:enumeration value="HALT"/>
                  <xsd:enumeration value="SHUTDOWN"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>

         <xsd:element name="page-sync-timeout" type="xsd:int" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The timeout (in nanoseconds) used to sync pages. The exact default value
                  depend on whether the journal is ASYNCIO or NIO.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="suppress-session-notifications" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Whether or not to suppress SESSION_CREATED and SESSION_CLOSED notifications.
                  Set to true to reduce notification overhead. However, these are required to
                  enforce unique client ID utilization in a cluster for MQTT clients.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element ref="security-settings" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="broker-plugins" maxOccurs="1" minOccurs="0"/>

         <xsd:element name="metrics-plugin" maxOccurs="1" minOccurs="0">
            <xsd:complexType>
               <xsd:annotation>
                  <xsd:documentation>
                     DEPRECATED: use metrics instead. A metrics plugin
                  </xsd:documentation>
               </xsd:annotation>
               <xsd:sequence>
                  <xsd:element ref="property" maxOccurs="unbounded" minOccurs="0">
                     <xsd:annotation>
                        <xsd:documentation>
                           properties to configure a plugin
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
               <xsd:attribute name="class-name" type="xsd:string" use="required">
                  <xsd:annotation>
                     <xsd:documentation>
                        the name of the metrics plugin class to instantiate
                     </xsd:documentation>
                  </xsd:annotation>
               </xsd:attribute>
               <xsd:attributeGroup ref="xml:specialAttrs"/>
            </xsd:complexType>
         </xsd:element>

         <xsd:element ref="metrics" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="address-settings" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="resource-limit-settings" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="connector-services" maxOccurs="1" minOccurs="0"/>

         <xsd:element ref="addresses" maxOccurs="1" minOccurs="0"/>

         <xsd:element name="network-check-list" type="xsd:string" default="" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  A comma separated list of IPs to be used to validate if the broker should be kept up
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="network-check-URL-list" type="xsd:string" default="" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  A comma separated list of URLs to be used to validate if the broker should be kept up
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="network-check-period" type="xsd:long" default="10000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  A frequency in milliseconds to how often we should check if the network is still up
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="network-check-timeout" type="xsd:long" default="1000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  A timeout used in milliseconds to be used on the ping.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="network-check-NIC" type="xsd:string" default="" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The network interface card name to be used to validate the address.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="network-check-ping-command" type="xsd:string" default="" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The ping command used to ping IPV4 addresses.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="network-check-ping6-command" type="xsd:string" default="" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The ping command used to ping IPV6 addresses.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element ref="wildcard-addresses" maxOccurs="1" minOccurs="0"/>

      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:element name="local-bind-address" type="xsd:string">
      <xsd:annotation>
         <xsd:documentation>
            local bind address that the datagram socket is bound to
         </xsd:documentation>
      </xsd:annotation>
   </xsd:element>

   <xsd:element name="local-bind-port" type="xsd:int" default="-1">
      <xsd:annotation>
         <xsd:documentation>
            local port to which the datagram socket is bound to
         </xsd:documentation>
      </xsd:annotation>
   </xsd:element>

   <!-- BROADCAST GROUP CONFIGURATION -->
   <xsd:element name="broadcast-groups">
      <xsd:annotation>
         <xsd:documentation>
            a list of broadcast groups to create
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="broadcast-group" type="broadcastGroupType" maxOccurs="unbounded" minOccurs="0"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="broadcastGroupType">
      <xsd:sequence>
         <xsd:element ref="local-bind-address" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  a local address to which the datagram socket is bound
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element ref="local-bind-port" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  a local port to which the datagram socket is bound
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="group-address" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  multicast address to which the data will be broadcast
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="group-port" type="xsd:int" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  UDP port number used for broadcasting
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="broadcast-period" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  period in milliseconds between consecutive broadcasts
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="jgroups-file" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Name of JGroups configuration file. If specified, the server uses JGroups for broadcasting.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="jgroups-channel" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Name of JGroups Channel. If specified, the server uses the named channel for broadcasting.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/>
      </xsd:sequence>

      <xsd:attribute name="name" type="xsd:ID" use="required">
         <xsd:annotation>
            <xsd:documentation>
               a unique name for the broadcast group
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <!-- DISCOVERY GROUP CONFIGURATION -->
   <xsd:element name="discovery-groups">
      <xsd:annotation>
         <xsd:documentation>
            a list of discovery groups to create
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="discovery-group" type="discoveryGroupType" maxOccurs="unbounded" minOccurs="0">
               <xsd:annotation>
                  <xsd:documentation>
                     a discovery group specification element
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="discoveryGroupType">
      <xsd:all>
         <xsd:element name="group-address" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Multicast IP address of the group to listen on
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="group-port" type="xsd:int" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  UDP port number of the multi cast group
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="jgroups-file" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Name of a JGroups configuration file. If specified, the server uses JGroups for discovery.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="jgroups-channel" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Name of a JGroups Channel. If specified, the server uses the named channel for discovery.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="refresh-timeout" type="xsd:int" default="10000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Period the discovery group waits after receiving the last broadcast from a particular server before
                  removing that servers connector pair entry from its list.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element ref="local-bind-address" maxOccurs="1" minOccurs="0"/>
         <xsd:element ref="local-bind-port" maxOccurs="1" minOccurs="0"/>
         <xsd:element name="initial-wait-timeout" type="xsd:int" default="10000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  time to wait for an initial broadcast to give us at least one node in the cluster
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>

      <xsd:attribute name="name" type="xsd:ID" use="required">
         <xsd:annotation>
            <xsd:documentation>
               a unique name for the discovery group
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:element name="discovery-group-ref">
      <xsd:complexType>
         <xsd:attribute name="discovery-group-name" type="xsd:IDREF"/>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="class-name-sequenceType">
      <xsd:annotation>
         <xsd:documentation>
            unlimited sequence of &lt;class-name/&gt;
         </xsd:documentation>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element maxOccurs="unbounded" minOccurs="1" name="class-name" type="xsd:string">
            <xsd:annotation>
               <xsd:documentation>
                  the fully qualified name of the interceptor class
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="paramType">
      <xsd:attribute name="key" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               Key of a configuration parameter
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="value" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               Value of a configuration parameter
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <!-- BRIDGE CONFIGURATION -->
   <xsd:element name="bridges">
      <xsd:annotation>
         <xsd:documentation>
            a list of bridges to create
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="bridge" type="bridgeType" maxOccurs="unbounded" minOccurs="0"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="bridgeType">
      <xsd:sequence>
         <xsd:element name="queue-name" type="xsd:string" maxOccurs="1" minOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  name of queue that this bridge consumes from
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="forwarding-address" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  address to forward to. If omitted original address is used
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="ha" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether this bridge supports fail-over
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>

         <xsd:element name="transformer-class-name" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  optional name of transformer class
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="transformer" type="transformerType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  optional transformer configuration
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="min-large-message-size" type="xsd:string" default="102400" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Any message larger than this size (in bytes) is considered a large message (to be sent in
                  chunks).
                  Supports byte notation like "K", "Mb", "MiB", "GB", etc.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="check-period" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The period (in milliseconds) a bridge's client will check if it failed to receive a ping from the
                  server. -1 disables this check.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="connection-ttl" type="xsd:long" default="60000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how long to keep a connection alive in the absence of any data arriving from the client. This should
                  be greater than the ping period.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="retry-interval" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  period (in ms) between successive retries
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="retry-interval-multiplier" type="xsd:double" default="1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  multiplier to apply to successive retry intervals
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-retry-interval" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Limit to the retry-interval growth (due to retry-interval-multiplier)
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="initial-connect-attempts" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  maximum number of initial connection attempts, -1 means 'no limits'
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="reconnect-attempts" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  maximum number of retry attempts, -1 means 'no limits'
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="failover-on-server-shutdown" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: This setting has no impact, but it's being left here to avoid XML parsing errors for users
                  who still have it set. Failover on shutdown is controlled via the ha-policy set on the *broker* to
                  which the bridge connects.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="use-duplicate-detection" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  should duplicate detection headers be inserted in forwarded messages?
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="confirmation-window-size" type="xsd:string" maxOccurs="1" minOccurs="0" default="1048576">
            <xsd:annotation>
               <xsd:documentation>
                  Once the bridge has received this many bytes, it sends a confirmation.
                  Supports byte notation like "K", "Mb", "MiB", "GB", etc.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="producer-window-size" type="xsd:string" maxOccurs="1" minOccurs="0" default="1048576">
            <xsd:annotation>
               <xsd:documentation>
                  Producer flow control.
                  Supports byte notation like "K", "Mb", "MiB", "GB", etc.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="user" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  username, if unspecified the cluster-user is used
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="password" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  password, if unspecified the cluster-password is used
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="reconnect-attempts-same-node" default="10" type="xsd:int" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Upon reconnection this configures the number of time the same node on the topology will be retried
                  before resetting the server locator and using the initial connectors
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="routing-type" type="component-routing-type" default="PASS" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how should the routing-type on the bridged messages be set?
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="concurrency" type="xsd:int" default="1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Number of concurrent workers, more workers can help increase throughput on high latency networks.
                  Defaults to 1
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:choice>
            <xsd:element name="static-connectors" maxOccurs="1" minOccurs="1">
               <xsd:complexType>
                  <xsd:sequence>
                     <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="1"/>
                  </xsd:sequence>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
            <xsd:element name="discovery-group-ref" maxOccurs="1" minOccurs="1">
               <xsd:complexType>
                  <xsd:attribute name="discovery-group-name" type="xsd:IDREF" use="required">
                     <xsd:annotation>
                        <xsd:documentation>
                           name of discovery group used by this bridge
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:attribute>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
         </xsd:choice>
      </xsd:sequence>

      <xsd:attribute name="name" type="xsd:ID" use="required">
         <xsd:annotation>
            <xsd:documentation>
               unique name for this bridge
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <!-- FEDERATION CONFIGURATION -->
   <xsd:element name="federations">
      <xsd:annotation>
         <xsd:documentation>
            a list of federations to create
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="federation" type="federationType" maxOccurs="unbounded" minOccurs="0"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="federationType">
      <xsd:sequence>
         <xsd:element name="upstream" type="upstreamType" minOccurs="0" maxOccurs="unbounded" />
         <xsd:element name="downstream" type="downstreamType" minOccurs="0" maxOccurs="unbounded" />
         <xsd:element name="policy-set" type="policySetType" minOccurs="0" maxOccurs="unbounded" />
         <xsd:element name="queue-policy" type="queuePolicyType" minOccurs="0" maxOccurs="unbounded" />
         <xsd:element name="address-policy" type="addressPolicyType" minOccurs="0" maxOccurs="unbounded" />
         <xsd:element name="transformer" type="federationTransformerType" minOccurs="0" maxOccurs="unbounded" />
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:ID" use="required" />
      <xsd:attribute name="user" type="xsd:string" use="optional" />
      <xsd:attribute name="password" type="xsd:string" use="optional" />
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="downstreamType">
      <xsd:complexContent>
         <xsd:extension base="streamType">
            <xsd:sequence>
               <xsd:element name="upstream-connector-ref" type="xsd:string" maxOccurs="1" minOccurs="1">
                  <xsd:annotation>
                     <xsd:documentation>
                        Name of the transport connector reference to use for the new upstream connection
                        back to this broker.
                     </xsd:documentation>
                  </xsd:annotation>
               </xsd:element>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

   <xsd:complexType name="upstreamType">
      <xsd:complexContent>
         <xsd:extension base="streamType"/>
      </xsd:complexContent>
   </xsd:complexType>

   <xsd:complexType name="streamType">
      <xsd:sequence>

         <xsd:element name="ha" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether this connection supports fail-over
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="circuit-breaker-timeout" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether this connection supports fail-over
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="share-connection" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  if there is a downstream and upstream connection configured for the same broker then
                  the same connection will be shared as long as both stream configs set this flag to true
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="connection-ttl" type="xsd:long" default="60000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how long to keep a connection alive in the absence of any data arriving from the client
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="call-timeout" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait for a reply
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="retry-interval" type="xsd:long" default="500" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  period (in ms) between successive retries
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="retry-interval-multiplier" type="xsd:double" default="1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  multiplier to apply to the retry-interval
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-retry-interval" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Maximum value for retry-interval
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="initial-connect-attempts" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How many attempts should be made to connect initially
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="reconnect-attempts" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How many attempts should be made to reconnect after failure
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="check-period" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The period (in milliseconds) used to check if the federation connection has failed to receive pings from
                  another server
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="call-failover-timeout" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait for a reply if in the middle of a fail-over. -1 means wait forever.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:choice>
            <xsd:element name="static-connectors" maxOccurs="1" minOccurs="1">
               <xsd:complexType>
                  <xsd:sequence>
                     <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="1"/>
                  </xsd:sequence>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
            <xsd:element name="discovery-group-ref" maxOccurs="1" minOccurs="1">
               <xsd:complexType>
                  <xsd:attribute name="discovery-group-name" type="xsd:IDREF" use="required">
                     <xsd:annotation>
                        <xsd:documentation>
                           name of discovery group used by this connection
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:attribute>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
         </xsd:choice>
         <xsd:element name="policy" type="policyRefType" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="priority-adjustment" type="xsd:int" use="optional" />
      <xsd:attribute name="user" type="xsd:string" use="optional">
         <xsd:annotation>
            <xsd:documentation>
               username, if unspecified the federated user is used
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="password" type="xsd:string" use="optional">
         <xsd:annotation>
            <xsd:documentation>
               password, if unspecified the federated password is used
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="name" type="xsd:ID" use="required">
         <xsd:annotation>
            <xsd:documentation>
               unique name for this upstream
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="policySetType">
      <xsd:sequence>
         <xsd:element name="policy" type="policyRefType" minOccurs="0" maxOccurs="unbounded" />
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:ID" use="required" />
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="policyRefType">
      <xsd:attribute name="ref" type="xsd:string" use="required" />
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="queuePolicyType">
      <xsd:sequence>
         <xsd:element name="include" type="queueMatchType" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element name="exclude" type="queueMatchType" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="transformer-ref" type="xsd:string" use="optional" />
      <xsd:attribute name="priority-adjustment" type="xsd:int" use="optional" />
      <xsd:attribute name="include-federated" type="xsd:boolean" use="optional" />
      <xsd:attribute name="name" type="xsd:ID" use="required" />
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="queueMatchType">
      <xsd:attribute name="queue-match" type="xsd:string" use="required" />
      <xsd:attribute name="address-match" type="xsd:string" use="required" />
      <xsd:attributeGroup ref="xml:specialAttrs" />
   </xsd:complexType>

   <xsd:complexType name="addressPolicyType">
      <xsd:sequence>
         <xsd:element name="include" type="addressMatchType" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element name="exclude" type="addressMatchType" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="transformer-ref" type="xsd:string" use="optional" />
      <xsd:attribute name="auto-delete" type="xsd:boolean" use="optional" />
      <xsd:attribute name="auto-delete-delay" type="xsd:long" use="optional" />
      <xsd:attribute name="auto-delete-message-count" type="xsd:long" use="optional" />
      <xsd:attribute name="max-hops" type="xsd:int" use="optional" />
      <xsd:attribute name="name" type="xsd:ID" use="required" />
      <xsd:attribute name="enable-divert-bindings" type="xsd:boolean" use="optional" />
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="addressMatchType">
      <xsd:attribute name="address-match" type="xsd:string" use="required" />
      <xsd:attributeGroup ref="xml:specialAttrs" />
   </xsd:complexType>

   <xsd:complexType name="federationTransformerType">
      <xsd:sequence>
         <xsd:element name="class-name" type="xsd:string" maxOccurs="1" minOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  optional name of transformer class
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element ref="property"  maxOccurs="unbounded" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  properties to configure the transformer class
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:ID" use="required" />
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <!-- TRANSFORMER CONFIGURATION -->
   <xsd:complexType name="transformerType">
      <xsd:sequence>
         <xsd:element name="class-name" type="xsd:string" maxOccurs="1" minOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  optional name of transformer class
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element ref="property"  maxOccurs="unbounded" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  properties to configure the transformer class
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:element name="property">
      <xsd:complexType>
         <xsd:attribute name="key" type="xsd:string" use="required">
            <xsd:annotation>
               <xsd:documentation>
                  key for the property
               </xsd:documentation>
            </xsd:annotation>
         </xsd:attribute>
         <xsd:attribute name="value" type="xsd:string" use="required">
            <xsd:annotation>
               <xsd:documentation>
                  value for the property
               </xsd:documentation>
            </xsd:annotation>
         </xsd:attribute>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <!-- CLUSTER CONNECTION CONFIGURATION -->
   <xsd:element name="cluster-connections">
      <xsd:annotation>
         <xsd:documentation>
            a list of cluster connections
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:choice maxOccurs="unbounded">
               <xsd:element name="cluster-connection-uri" type="cluster-connectionUriType"/>
               <xsd:element name="cluster-connection" type="cluster-connectionType">
               </xsd:element>
            </xsd:choice>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:element name="broker-connections">
      <xsd:annotation>
         <xsd:documentation>
            A list of connections the broker will make towards other servers.
            Currently the only connection type supported is amqpConnection
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence maxOccurs="unbounded">
            <xsd:element name="amqp-connection" type="amqp-connectionUriType"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:element name="connection-routers">
      <xsd:annotation>
         <xsd:documentation>
            A list of connection routers
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="connection-router" type="connectionRouterType" maxOccurs="unbounded" minOccurs="0"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="connectionRouterType">
      <xsd:sequence maxOccurs="unbounded">
         <xsd:element name="key-type" type="connectionRouterKeyType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the optional target key
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="key-filter" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the filter for the target key
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="local-target-filter" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the filter to get the local target
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="cache" type="connectionRouterCacheType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the time period for a cache entry to remain active
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="policy" type="connectionRouterPolicyType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the policy configuration
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="pool" type="connectionRouterPoolType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the pool configuration
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="key-transformer" type="connectionRouterKeyTransformerType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the key transformer configuration
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               a unique name for the connection router
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:simpleType name="connectionRouterKeyType">
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="CLIENT_ID"/>
         <xsd:enumeration value="SNI_HOST"/>
         <xsd:enumeration value="SOURCE_IP"/>
         <xsd:enumeration value="USER_NAME"/>
      </xsd:restriction>
   </xsd:simpleType>

   <xsd:complexType name="connectionRouterCacheType">
      <xsd:sequence maxOccurs="unbounded">
         <xsd:element name="persisted" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that the cache entries are persisted
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="timeout" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the timeout (in milliseconds) before removing cache entries
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="connectionRouterPolicyType">
      <xsd:sequence>
         <xsd:element ref="property" maxOccurs="unbounded" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  properties to configure a policy
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:ID" use="required">
         <xsd:annotation>
            <xsd:documentation>
               the name of the policy
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="connectionRouterKeyTransformerType">
      <xsd:sequence>
         <xsd:element ref="property" maxOccurs="unbounded" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  properties to configure a key transformer
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:ID" use="required">
         <xsd:annotation>
            <xsd:documentation>
               the name of the policy
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="connectionRouterPoolType">
      <xsd:sequence maxOccurs="unbounded">
         <xsd:element name="username" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the username to access the targets
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="password" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the password to access the targets
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="check-period" type="xsd:long" default="5000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the period (in milliseconds) used to check if a target is ready
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="quorum-size" type="xsd:long" default="1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the minimum number of ready targets
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="quorum-timeout" type="xsd:long" default="3000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the timeout (in milliseconds) used to get the minimum number of ready targets
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="local-target-enabled" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  true means that the local target is enabled
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:choice>
            <xsd:element name="cluster-connection" type="xsd:string" maxOccurs="1" minOccurs="1">
               <xsd:annotation>
                  <xsd:documentation>
                     the name of a cluster connection
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>
            <xsd:element name="static-connectors" maxOccurs="1" minOccurs="1">
               <xsd:complexType>
                  <xsd:sequence>
                     <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="1"/>
                  </xsd:sequence>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
            <xsd:element name="discovery-group-ref" maxOccurs="1" minOccurs="1">
               <xsd:complexType>
                  <xsd:attribute name="discovery-group-name" type="xsd:IDREF" use="required">
                     <xsd:annotation>
                        <xsd:documentation>
                           name of discovery group used by this bridge
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:attribute>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
         </xsd:choice>
      </xsd:sequence>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="amqp-connectionUriType">
      <xsd:sequence>
         <xsd:choice maxOccurs="unbounded">
            <xsd:element name="sender" type="amqp-address-match-type"/>
            <xsd:element name="receiver" type="amqp-address-match-type"/>
            <xsd:element name="peer" type="amqp-address-match-type"/>
            <xsd:element name="mirror" type="amqp-mirror-type"/>
         </xsd:choice>
      </xsd:sequence>
      <xsd:attribute name="uri" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               uri of the amqp connection
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="auto-start" type="xsd:boolean" default="true">
         <xsd:annotation>
            <xsd:documentation>
               should the broker connection be started when the server is started.
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="reconnect-attempts" type="xsd:int" default="-1">
         <xsd:annotation>
            <xsd:documentation>
               How many attempts should be made to reconnect after failure
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="retry-interval" type="xsd:long" default="5000">
         <xsd:annotation>
            <xsd:documentation>
               period (in ms) between successive retries
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="user" type="xsd:string" default="">
         <xsd:annotation>
            <xsd:documentation>
               User name used to connect. If not defined it will try an anonymous connection.
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="password" type="xsd:string" default="">
         <xsd:annotation>
            <xsd:documentation>
               Password used to connect. If not defined it will try an anonymous connection.
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>

      <xsd:attribute name="name" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               name of the amqp connection
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="amqp-address-match-type">
      <xsd:attribute name="address-match" type="xsd:string" use="optional">
         <xsd:annotation>
            <xsd:documentation>
               address expression to match addresses
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="queue-name" type="xsd:string" use="optional">
         <xsd:annotation>
            <xsd:documentation>
               This is the exact queue name to be used.
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
   </xsd:complexType>

   <xsd:complexType name="amqp-mirror-type">
      <xsd:annotation>
         <xsd:documentation>
            This will determine that queues are mirrored towards this next broker.
            All events will be send towards this AMQP connection acting like a replica.
         </xsd:documentation>
      </xsd:annotation>

      <xsd:attribute name="message-acknowledgements" type="xsd:boolean" use="optional" default="true">
         <xsd:annotation>
            <xsd:documentation>
               Should mirror acknowledgements towards the other server
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="queue-creation" type="xsd:boolean" use="optional" default="true">
         <xsd:annotation>
            <xsd:documentation>
               Should mirror queue creation events for addresses and queues.
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="queue-removal" type="xsd:boolean" use="optional" default="true">
         <xsd:annotation>
            <xsd:documentation>
               Should mirror queue deletion events for addresses and queues.
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="durable" type="xsd:boolean" use="optional" default="true">
         <xsd:annotation>
            <xsd:documentation>
               This property will determine if the mirror will use a durable queue or not as a Store and Forward Queue.
               This is true by default.
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="sync" type="xsd:boolean" use="optional" default="false">
         <xsd:annotation>
            <xsd:documentation>
               If this is true, client blocking operations will be waiting a response from the mirror before the unblocking the operation.
               This is false by default.
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="address-filter" type="xsd:string" use="optional">
         <xsd:annotation>
            <xsd:documentation>
               This defines a filter that mirror will use to determine witch events will be forwarded toward
               target server based on source address.
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>

   </xsd:complexType>

   <xsd:complexType name="cluster-connectionUriType">
      <xsd:attribute name="address" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               uri of the cluster connection
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="name" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               name of the cluster connection
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="cluster-connectionType">
      <xsd:sequence>
         <xsd:element name="address" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  name of the address this cluster connection applies to
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="connector-ref" type="xsd:string" maxOccurs="1" minOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  Name of the connector reference to use.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="check-period" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The period (in milliseconds) used to check if the cluster connection has failed to receive pings from
                  another server
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="connection-ttl" type="xsd:long" default="60000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how long to keep a connection alive in the absence of any data arriving from the client
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="min-large-message-size" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Messages larger than this are considered large-messages.
                  Supports byte notation like "K", "Mb", "MiB", "GB", etc.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="call-timeout" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait for a reply
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="retry-interval" type="xsd:long" default="500" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  period (in ms) between successive retries
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="retry-interval-multiplier" type="xsd:double" default="1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  multiplier to apply to the retry-interval
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-retry-interval" type="xsd:long" default="2000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Maximum value for retry-interval
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="initial-connect-attempts" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How many attempts should be made to connect initially
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="reconnect-attempts" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How many attempts should be made to reconnect after failure
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="use-duplicate-detection" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  should duplicate detection headers be inserted in forwarded messages?
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="forward-when-no-consumers" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: use message-load-balancing-type instead. Select STRICT to mimic
                  forward-when-no-consumers=true and ON_DEMAND to mimic forward-when-no-consumers=false.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="message-load-balancing" default="ON_DEMAND" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how should messages be load balanced between servers in a cluster?
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="OFF"/>
                  <xsd:enumeration value="STRICT"/>
                  <xsd:enumeration value="ON_DEMAND"/>
                  <xsd:enumeration value="OFF_WITH_REDISTRIBUTION"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>

         <xsd:element name="max-hops" type="xsd:int" default="1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  maximum number of hops cluster topology is propagated
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="confirmation-window-size" type="xsd:string" default="1048576" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The size (in bytes) of the window used for confirming data from the server connected to.
                  Supports byte notation like "K", "Mb", "MiB", "GB", etc.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="producer-window-size" type="xsd:string" maxOccurs="1" minOccurs="0" default="1048576">
            <xsd:annotation>
               <xsd:documentation>
                  Producer flow control.
                  Supports byte notation like "K", "Mb", "MiB", "GB", etc.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="call-failover-timeout" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait for a reply if in the middle of a fail-over. -1 means wait forever.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="notification-interval" type="xsd:long" default="1000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how often the cluster connection will notify the cluster of its existence right after joining the
                  cluster
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="notification-attempts" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how many times this cluster connection will notify the cluster of its existence right after joining
                  the cluster
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="scale-down-connector" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The connector to use for scaling down or when as backup in SCALE_DOWN mode
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:choice>
            <xsd:element name="static-connectors" maxOccurs="1" minOccurs="0">
               <xsd:complexType>
                  <xsd:sequence>
                     <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/>
                  </xsd:sequence>
                  <xsd:attribute name="allow-direct-connections-only" default="false" type="xsd:boolean" use="optional">
                     <xsd:annotation>
                        <xsd:documentation>
                           restricts cluster connections to the listed connector-ref's
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:attribute>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
            <xsd:element name="discovery-group-ref" maxOccurs="1" minOccurs="0">
               <xsd:complexType>
                  <xsd:attribute name="discovery-group-name" type="xsd:IDREF" use="required">
                     <xsd:annotation>
                        <xsd:documentation>
                           name of discovery group used by this cluster-connection
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:attribute>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
         </xsd:choice>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:ID" use="required">
         <xsd:annotation>
            <xsd:documentation>
               unique name for this cluster connection
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="uri" type="xsd:string" use="optional">
         <xsd:annotation>
            <xsd:documentation>
               The URI for the cluster connection options
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="cluster-connection-uri-type">
      <xsd:attribute name="name" type="xsd:ID" use="required">
         <xsd:annotation>
            <xsd:documentation>
               unique name for this cluster connection
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="uri" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               The URI for the cluster connection options
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <!-- DIVERT CONFIGURATION -->
   <xsd:element name="diverts">
      <xsd:annotation>
         <xsd:documentation>
            a list of diverts to use
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="divert" type="divertType" maxOccurs="unbounded" minOccurs="0"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="divertType">
      <xsd:all>
         <xsd:element name="transformer-class-name" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  an optional class name of a transformer
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="transformer" type="transformerType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  optional transformer configuration
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="exclusive" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether this is an exclusive divert
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="routing-name" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the routing name for the divert
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="address" type="xsd:string" maxOccurs="1" minOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  the address this divert will divert from
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="forwarding-address" type="xsd:string" maxOccurs="1" minOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  the forwarding address for the divert
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>

         <xsd:element name="routing-type" type="component-routing-type" default="STRIP" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how should the routing-type on the diverted messages be set?
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>

      <xsd:attribute name="name" type="xsd:ID" use="required">
         <xsd:annotation>
            <xsd:documentation>
               a unique name for the divert
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <!-- STORE CONFIGURATION -->
   <xsd:element name="store" type="storeType">
      <xsd:annotation>
         <xsd:documentation>
            The Store Type used by the server
         </xsd:documentation>
      </xsd:annotation>
   </xsd:element>

   <xsd:complexType name="storeType">
      <xsd:choice>
         <xsd:element name="file-store" type="fileStoreType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  Use a file based store for persisting journal, paging and large messages
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="database-store" type="databaseStoreType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  Use a database for persisting journal, paging and large messages
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:choice>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="fileStoreType">
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="databaseStoreType">
      <xsd:all>
         <xsd:element name="jdbc-driver-class-name" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The JDBC Driver class name
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="jdbc-connection-url" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The JDBC Connection URL e.g. jdbc:mysql://localhost:3306/
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="jdbc-user" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The JDBC User to use for connecting to the database, NB this will only work with drivers where support
                  DriverManager.getConnection(String url, String user, String password). This can be encrypted.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="jdbc-password" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The JDBC Password to use for connecting to the database, NB this will only work with drivers where support
                  DriverManager.getConnection(String url, String user, String password). This can be encrypted.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="data-source-class-name" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The DataSource class name
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="data-source-properties" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  A list of options for the DataSource
               </xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="data-source-property" type="propertyType" minOccurs="1" maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>
                           A key-value pair option for the DataSource
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
         <xsd:element name="message-table-name" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The table name used to store message journal entries
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="bindings-table-name" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The table name used to store bindings journal entries
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="large-message-table-name" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The table name used to large message files
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="page-store-table-name" type="xsd:string" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The table name used to large message files
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="node-manager-store-table-name" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The table name used to hold shared store data
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="jdbc-network-timeout" type="xsd:int" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The JDBC network connection timeout in milliseconds.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="jdbc-lock-renew-period" type="xsd:int" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The period in milliseconds of the keep alive service of a JDBC lock.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="jdbc-lock-expiration" type="xsd:int" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The time in milliseconds a JDBC lock is considered valid without keeping it alive.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="jdbc-journal-sync-period" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The JDBC jouranl sync period in milliseconds.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="jdbc-allowed-time-diff" type="xsd:long" minOccurs="0" maxOccurs="1" default="250">
            <xsd:annotation>
               <xsd:documentation>
                  The maximal time offset between the broker and the database in milliseconds when requesting the
                  current time of the database while updating and validating live and backup locks.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="propertyType">
      <xsd:attribute name="key" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               Configuration option key
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attribute name="value" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               Configuration option value
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
   </xsd:complexType>

   <!-- HA POLICY CONFIGURATION -->
   <xsd:element name="ha-policy">
      <xsd:annotation>
         <xsd:documentation>
            The HA policy of this server
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:choice>
            <xsd:element name="live-only" type="haLiveOnlyPolicyType" minOccurs="0" maxOccurs="1">
               <xsd:annotation>
                  <xsd:documentation>
                     A live only server with no HA capabilities apart from scale down.
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>
            <xsd:element name="replication" type="haReplicationType" minOccurs="0" maxOccurs="1">
               <xsd:annotation>
                  <xsd:documentation>
                     Configuration for a replicated server, either master, slave or colocated.
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>
            <xsd:element name="shared-store" type="haSharedStoreType" minOccurs="0" maxOccurs="1">
               <xsd:annotation>
                  <xsd:documentation>
                     Configuration for a shared store server, either master, slave or colocated.
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>
         </xsd:choice>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="distributed-primitive-manager">
      <xsd:all>
         <xsd:element name="class-name" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The distributed-primitive-manager class name
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="properties" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  A list of options for the distributed-primitive-manager
               </xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="property" type="propertyType" minOccurs="1" maxOccurs="unbounded">
                     <xsd:annotation>
                        <xsd:documentation>
                           A key-value pair option for the distributed-primitive-manager
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:element>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
      </xsd:all>
   </xsd:complexType>

   <xsd:complexType name="haReplicationType">
      <xsd:choice>
         <xsd:element name="master" type="replicatedPolicyType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  A live server configured to replicate.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="slave" type="replicaPolicyType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  A backup server configured to replicate.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="colocated" type="haColocationReplicationType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  a replicated lives server that will allow requests to create colocated replicated backup servers.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="primary" type="asyncPrimaryPolicyType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  A primary server configured to replicate.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backup" type="asyncBackupPolicyType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  A backup server configured to replicate.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:choice>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="haColocationReplicationType">
      <xsd:all>
         <xsd:element name="request-backup" type="xsd:boolean" minOccurs="0" maxOccurs="1" default="false">
            <xsd:annotation>
               <xsd:documentation>
                  If true then the server will request a backup on another node
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backup-request-retries" type="xsd:int" minOccurs="0" maxOccurs="1" default="-1">
            <xsd:annotation>
               <xsd:documentation>
                  How many times the live server will try to request a backup, -1 means for ever.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backup-request-retry-interval" type="xsd:long" minOccurs="0" maxOccurs="1" default="5000">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait for retries between attempts to request a backup server.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="max-backups" type="xsd:int" minOccurs="0" maxOccurs="1" default="1">
            <xsd:annotation>
               <xsd:documentation>
                  Whether or not this live server will accept backup requests from other live servers.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backup-port-offset" type="xsd:int" minOccurs="0" maxOccurs="1" default="100">
            <xsd:annotation>
               <xsd:documentation>
                  The offset to use for the Connectors and Acceptors when creating a new backup server.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="excludes" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the connectors that shouldn't have their ports offset, typically remote connectors or the
                  connector used in the cluster connection if scaling down
               </xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="1"/>
               </xsd:sequence>
               <xsd:attributeGroup ref="xml:specialAttrs"/>
            </xsd:complexType>
         </xsd:element>
         <xsd:element name="master" type="replicatedPolicyType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The configuration for the live replicated server.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="slave" type="replicaPolicyType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The configuration for any slaves created.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="haColocationSharedStoreType">
      <xsd:all>
         <xsd:element name="request-backup" type="xsd:boolean" minOccurs="0" maxOccurs="1" default="false">
            <xsd:annotation>
               <xsd:documentation>
                  If true then the server will request a backup on another node
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backup-request-retries" type="xsd:int" minOccurs="0" maxOccurs="1" default="-1">
            <xsd:annotation>
               <xsd:documentation>
                  How many times the live server will try to request a backup, -1 means for ever.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backup-request-retry-interval" type="xsd:long" minOccurs="0" maxOccurs="1" default="5000">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait for retries between attempts to request a backup server.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="max-backups" type="xsd:int" minOccurs="0" maxOccurs="1" default="1">
            <xsd:annotation>
               <xsd:documentation>
                  Whether or not this live server will accept backup requests from other live servers.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backup-port-offset" type="xsd:int" minOccurs="0" maxOccurs="1" default="100">
            <xsd:annotation>
               <xsd:documentation>
                  The offset to use for the Connectors and Acceptors when creating a new backup server.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="master" type="sharedStoreMasterPolicyType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The configuration for the live shared store server.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="slave" type="sharedStoreSlavePolicyType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The configuration for any shared store backups created.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="haSharedStoreType">
      <xsd:choice>
         <xsd:element name="master" type="sharedStoreMasterPolicyType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  A shared store live server configuration.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="slave" type="sharedStoreSlavePolicyType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  A shared store backup server configuration.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="colocated" type="haColocationSharedStoreType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  A shared store colocated configuration
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:choice>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="haLiveOnlyPolicyType">
      <xsd:all>
         <xsd:element name="scale-down" type="scaleDownType" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The scale down configuration of this live server.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="replicatedPolicyType">
      <xsd:all>
         <xsd:element name="group-name" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  used for replication, if set, (remote) backup servers will only pair with live servers with matching
                  group-name
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="cluster-name" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Name of the cluster configuration to use for replication. This setting is only necessary in case you
                  configure multiple cluster connections. It is used by a replicating backups and by live servers that
                  may attempt fail-back.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="max-saved-replicated-journals-size" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  This option specifies how many replication backup directories will be kept when server starts as replica.
                  Every time when server starts as replica all former data moves to 'oldreplica.{id}' directory, where id is growing backup index,
                  this parameter sets the maximum number of such directories kept on disk.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="check-for-live-server" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Whether to check the cluster for a (live) server using our own server ID when starting
                  up. This option is only necessary for performing 'fail-back' on replicating
                  servers. Strictly speaking this setting only applies to live servers and not to
                  backups.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="initial-replication-sync-timeout" type="xsd:long" default="30000" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The amount of time to wait for the replica to acknowledge it has received all the necessary data from
                  the replicating server at the final step of the initial replication synchronization process.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="vote-on-replication-failure" type="xsd:boolean" default="false" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  Whether or not this live broker should vote to remain as live if replication is lost.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="quorum-size" type="xsd:integer" default="-1" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The quorum size used for voting after replication loss, -1 means use the current cluster size
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="vote-retries" type="xsd:integer" default="12" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  If we start as a replica and lose connection to the master, how many times should we attempt to vote
                  for quorum before restarting
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="vote-retry-wait" type="xsd:long" default="5000" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait (in milliseconds) between each vote
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="quorum-vote-wait" type="xsd:integer" default="30" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait (in seconds) for vote results
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="retry-replication-wait" type="xsd:long" default="2000" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  If we start as a replica how long to wait (in milliseconds) before trying to replicate again after failing to find a replica
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="replicaPolicyType">
      <xsd:all>
         <xsd:element name="group-name" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  used for replication, if set, (remote) backup servers will only pair with live servers with matching
                  group-name
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="cluster-name" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Name of the cluster configuration to use for replication. This setting is only necessary in case you
                  configure multiple cluster connections. It is used by a replicating backups and by live servers that
                  may attempt fail-back.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="max-saved-replicated-journals-size" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  This option specifies how many replication backup directories will be kept when server starts as replica.
                  Every time when server starts as replica all former data moves to 'oldreplica.{id}' directory, where id is growing backup index,
                  this parameter sets the maximum number of such directories kept on disk.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="scale-down" type="scaleDownType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  if provided then this backup will scale down rather than becoming live after fail over.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="restart-backup" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Will this server, if a backup, restart once it has been stopped because of failback or scaling down.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="allow-failback" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Whether a server will automatically stop when a another places a request to take over
                  its place. The use case is when a regular server stops and its backup takes over its
                  duties, later the main server restarts and requests the server (the former backup) to
                  stop operating.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="failback-delay" type="xsd:long" default="5000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: if we have to start as a replicated server this is the delay to wait before fail-back
                  occurs
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="initial-replication-sync-timeout" type="xsd:long" default="30000" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  If we have to start as a replicated server this is the amount of time to wait for the replica to
                  acknowledge it has received all the necessary data from the replicating server at the final step
                  of the initial replication synchronization process.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="vote-on-replication-failure" type="xsd:boolean" default="false" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  If we have to start as a replicated server decide whether or not this live broker should vote to remain
                  as live if replication is lost.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="quorum-size" type="xsd:integer" default="-1" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  If we have to start as a replicated server or we are a backup and lose connection to live, the quorum size
                  used for voting after replication loss, -1 means use the current cluster size
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="vote-retries" type="xsd:integer" default="12" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  If we lose connection to the master, how many times should we attempt to vote for quorum before restarting
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="vote-retry-wait" type="xsd:long" default="5000" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait (in milliseconds) between each vote
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="retry-replication-wait" type="xsd:long" default="2000" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait (in milliseconds) before trying to replicate again after failing to find a replica
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="quorum-vote-wait" type="xsd:integer" default="30" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait (in seconds) for vote results
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="asyncPrimaryPolicyType">
      <xsd:all>
         <xsd:element name="manager" type="distributed-primitive-manager" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  It's the manager used to manager distributed locks used for this type of replication.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="group-name" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  used for replication, if set, (remote) backup servers will only pair with live servers with matching
                  group-name
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="cluster-name" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Name of the cluster configuration to use for replication. This setting is only necessary in case you
                  configure multiple cluster connections. It is used by a replicating backups and by live servers that
                  may attempt fail-back.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="coordination-id" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The common identity to use for coordination that is shared across instances that will replicate.
                  The value will be used as the internal server nodeId and as the identity of entities in the
                  distributed-primitive-manager.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="initial-replication-sync-timeout" type="xsd:long" default="30000" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The amount of time to wait for the replica to acknowledge it has received all the necessary data from
                  the replicating server at the final step of the initial replication synchronization process.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="retry-replication-wait" type="xsd:long" default="2000" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  If we start as a replica how long to wait (in milliseconds) before trying to replicate again after failing to find a replica
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="max-saved-replicated-journals-size" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  This option specifies how many replication backup directories will be kept when server starts as replica.
                  Every time when server starts as replica all former data moves to 'oldreplica.{id}' directory, where id is growing backup index,
                  this parameter sets the maximum number of such directories kept on disk.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="asyncBackupPolicyType">
      <xsd:all>
         <xsd:element name="manager" type="distributed-primitive-manager" minOccurs="1" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  It's the manager used to manager distributed locks used for this type of replication.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="group-name" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  used for replication, if set, (remote) backup servers will only pair with live servers with matching
                  group-name
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="cluster-name" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Name of the cluster configuration to use for replication. This setting is only necessary in case you
                  configure multiple cluster connections. It is used by a replicating backups and by live servers that
                  may attempt fail-back.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="max-saved-replicated-journals-size" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  This option specifies how many replication backup directories will be kept when server starts as replica.
                  Every time when server starts as replica all former data moves to 'oldreplica.{id}' directory, where id is growing backup index,
                  this parameter sets the maximum number of such directories kept on disk.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="allow-failback" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Whether a server will automatically stop when a another places a request to take over
                  its place. The use case is when a regular server stops and its backup takes over its
                  duties, later the main server restarts and requests the server (the former backup) to
                  stop operating.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="initial-replication-sync-timeout" type="xsd:long" default="30000" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  If we have to start as a replicated server this is the amount of time to wait for the replica to
                  acknowledge it has received all the necessary data from the replicating server at the final step
                  of the initial replication synchronization process.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="retry-replication-wait" type="xsd:long" default="2000" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait (in milliseconds) before trying to replicate again after failing to find a replica
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="colocatedReplicaPolicyType">
      <xsd:all>
         <xsd:element name="group-name" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  used for replication, if set, (remote) backup servers will only pair with live servers with matching
                  group-name
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="cluster-name" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Name of the cluster configuration to use for replication. This setting is only necessary in case you
                  configure multiple cluster connections. It is used by a replicating backups and by live servers that
                  may attempt fail-back.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="max-saved-replicated-journals-size" type="xsd:int" default="2" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  This option specifies how many replication backup directories will be kept when server starts as replica.
                  Every time when server starts as replica all former data moves to 'oldreplica.{id}' directory, where id is growing backup index,
                  this parameter sets the maximum number of such directories kept on disk.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="scale-down" type="scaleDownType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  if provided then this backup will scale down rather than becoming live after fail over.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="restart-backup" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Will this server, if a backup, restart once it has been stopped because of failback or scaling down.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="sharedStoreMasterPolicyType">
      <xsd:all>
         <xsd:element name="failback-delay" type="xsd:long" default="5000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: delay to wait before fail-back occurs on (live's) restart
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="failover-on-shutdown" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Will this backup server come live on a normal server shutdown
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="wait-for-activation" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Will the master startup wait until it is activated
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="sharedStoreSlavePolicyType">
      <xsd:all>
         <xsd:element name="allow-failback" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Whether a server will automatically stop when a another places a request to take over
                  its place. The use case is when a regular server stops and its backup takes over its
                  duties, later the main server restarts and requests the server (the former backup) to
                  stop operating.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="failback-delay" type="xsd:long" default="5000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: delay to wait before fail-back occurs on (live's) restart
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="failover-on-shutdown" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Will this backup server come live on a normal server shutdown
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="scale-down" type="scaleDownType" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  if provided then this backup will scale down rather than becoming live after fail over.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="restart-backup" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Will this server, if a backup, restart once it has been stopped because of failback or scaling down.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="colocatedPolicyType">
      <xsd:all>
         <xsd:element name="request-backup" type="xsd:boolean" minOccurs="0" maxOccurs="1" default="false">
            <xsd:annotation>
               <xsd:documentation>
                  If true then the server will request a backup on another node
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backup-request-retries" type="xsd:int" minOccurs="0" maxOccurs="1" default="-1">
            <xsd:annotation>
               <xsd:documentation>
                  How many times the live server will try to request a backup, -1 means for ever.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backup-request-retry-interval" type="xsd:long" minOccurs="0" maxOccurs="1" default="5000">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait for retries between attempts to request a backup server.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="max-backups" type="xsd:int" minOccurs="0" maxOccurs="1" default="1">
            <xsd:annotation>
               <xsd:documentation>
                  Whether or not this live server will accept backup requests from other live servers.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="backup-port-offset" type="xsd:int" minOccurs="0" maxOccurs="1" default="100">
            <xsd:annotation>
               <xsd:documentation>
                  The offset to use for the Connectors and Acceptors when creating a new backup server.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="scaleDownType">
      <xsd:sequence>
         <xsd:element name="enabled" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  its possible that you only want a server to partake in scale down as a receiver, via a group.
                  In this case set scale-down to false
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="group-name" type="xsd:string" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  The scale down group to scale down to, a server will only scale down to a server within the same group
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:choice>
            <xsd:element name="discovery-group-ref" maxOccurs="1" minOccurs="0">
               <xsd:complexType>
                  <xsd:attribute name="discovery-group-name" type="xsd:IDREF" use="required">
                     <xsd:annotation>
                        <xsd:documentation>
                           The discovery group to use for scale down, if not supplied then the scale-down-connectors or
                           first
                           invm connector will be used
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:attribute>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
            <xsd:element name="connectors" minOccurs="0" maxOccurs="1">
               <xsd:annotation>
                  <xsd:documentation>
                     A list of connectors to use for scaling down, if not supplied then the scale-down-discovery-group
                     or
                     first invm connector will be used
                  </xsd:documentation>
               </xsd:annotation>
               <xsd:complexType>
                  <xsd:sequence>
                     <xsd:element name="connector-ref" type="xsd:string" maxOccurs="unbounded" minOccurs="1"/>
                  </xsd:sequence>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
         </xsd:choice>
      </xsd:sequence>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:element name="grouping-handler" type="groupingHandlerType">
      <xsd:annotation>
         <xsd:documentation>
            Message Group configuration
         </xsd:documentation>
      </xsd:annotation>
   </xsd:element>

   <xsd:complexType name="groupingHandlerType">
      <xsd:all>
         <xsd:element name="type" maxOccurs="1" minOccurs="1">
            <xsd:annotation>
               <xsd:documentation>
                  Each cluster should choose 1 node to have a LOCAL grouping handler and all the other nodes should have
                  REMOTE handlers
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="LOCAL"/>
                  <xsd:enumeration value="REMOTE"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>
         <xsd:element name="address" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  A reference to a cluster connection address
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="timeout" type="xsd:int" default="5000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How long to wait for a decision
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="group-timeout" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How long a group binding will be used, -1 means for ever. Bindings are removed after this wait
                  elapses. On the remote node this is used to determine how often you should re-query the main
                  coordinator in order to update the last time used accordingly.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element name="reaper-period" type="xsd:long" default="30000" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How often the reaper will be run to check for timed out group bindings. Only valid for LOCAL handlers
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>
      <xsd:attribute name="name" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               A name identifying this grouping-handler
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <!-- ADDRESS SETTINGS CONFIGURATION -->
   <xsd:element name="address-settings">
      <xsd:annotation>
         <xsd:documentation>
            a list of address settings
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="address-setting" type="addressSettingType" maxOccurs="unbounded" minOccurs="0"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="addressSettingType">
      <xsd:annotation>
         <xsd:documentation>
            Complex type element to configure an address.
         </xsd:documentation>
      </xsd:annotation>
      <xsd:all>
         <xsd:element name="dead-letter-address" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the address to send dead messages to
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-create-dead-letter-resources" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not to automatically create the dead-letter-address and/or a corresponding queue
                  on that address when a message found to be undeliverable
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="dead-letter-queue-prefix" type="xsd:string" default="DLQ." maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the prefix to use for auto-created dead letter queues
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="dead-letter-queue-suffix" type="xsd:string" default="" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the suffix to use for auto-created dead letter queues
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="expiry-address" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the address to send expired messages to
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-create-expiry-resources" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not to automatically create the expiry-address and/or a corresponding queue
                  on that address when a message is sent to a matching queue
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="expiry-queue-prefix" type="xsd:string" default="EXP." maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the prefix to use for auto-created expiry queues
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="expiry-queue-suffix" type="xsd:string" default="" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the suffix to use for auto-created expiry queues
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="expiry-delay" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Overrides the expiration time for messages using the default value for expiration time. "-1"
                  disables this setting.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="min-expiry-delay" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Overrides the expiration time for messages using a lower value. "-1" disables this setting.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-expiry-delay" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Overrides the expiration time for messages using a higher value. "-1" disables this setting.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="redelivery-delay" type="xsd:long" default="0" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the time (in ms) to wait before redelivering a cancelled message.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="redelivery-delay-multiplier" type="xsd:double" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  multiplier to apply to the "redelivery-delay"
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="redelivery-collision-avoidance-factor" type="xsd:double" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  factor by which to modify the redelivery delay slightly to avoid collisions
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-redelivery-delay" type="xsd:long" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Maximum value for the redelivery-delay
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-delivery-attempts" type="xsd:int" default="10" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how many times to attempt to deliver a message before sending to dead letter address
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

            <xsd:element name="max-size-bytes" type="xsd:string" default="-1" maxOccurs="1" minOccurs="0">
               <xsd:annotation>
                  <xsd:documentation>
                     the maximum size (in bytes) for an address (-1 means no limits). This is used in PAGING, BLOCK and
                     FAIL policies.
                     Supports byte notation like "K", "Mb", "MiB", "GB", etc.
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>

         <xsd:element name="max-size-messages" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the maximum number of messages allowed on the address.  This is used in PAGING, BLOCK and FAIL policies. It does not support notations and it is a simple number of messages allowed.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="page-limit-bytes" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  After the address enters into page mode, this attribute will configure how many pages can be written into page before activating the page-full-policy.
                  Supports byte notation like "K", "Mb", "MiB", "GB", etc.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="page-limit-messages" type="xsd:long" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  After the address enters into page mode, this attribute will configure how many messages can be written into page before activating the page-full-policy.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-size-bytes-reject-threshold" type="xsd:long" default="-1" maxOccurs="1"
                      minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  used with the address full BLOCK policy, the maximum size (in bytes) an address can reach before
                  messages start getting rejected. Works in combination with max-size-bytes for AMQP protocol only.
                  Default = -1 (no limit).
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

            <xsd:element name="page-size-bytes" type="xsd:string" default="10485760" maxOccurs="1" minOccurs="0">
               <xsd:annotation>
                  <xsd:documentation>
                     The page size (in bytes) to use for an address.
                     Supports byte notation like "K", "Mb", "MiB", "GB", etc.
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>

         <xsd:element name="page-max-cache-size" default="5" type="xsd:int" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  Number of paging files to cache in memory to avoid IO during paging navigation
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-read-page-messages" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How many messages are we allowed to read from page into the Queue each time. We should read more data from pages as messages are acknowledged until it fills up the size.
                  Between this and max-read-page-bytes the system will stop reading based on whatever hits the mark first.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-read-page-bytes" type="xsd:string" default="20M" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How many bytes are we allowed to read from page into the Queue each time. We should read more data from pages as messages are acknowledged until it fills up the size.
                  Between this and max-read-page-messages the system will stop reading based on whatever hits the mark first.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="address-full-policy" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  what happens when an address where "max-size-bytes" is specified becomes full
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="DROP"/>
                  <xsd:enumeration value="FAIL"/>
                  <xsd:enumeration value="PAGE"/>
                  <xsd:enumeration value="BLOCK"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>

         <xsd:element name="page-full-policy" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  After entering page mode, a second limit will be set by page-limit-bytes and/or page-limit-messages. The page-full-policy will configure what to do when that limit is reached.
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="DROP"/>
                  <xsd:enumeration value="FAIL"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>

         <xsd:element name="message-counter-history-day-limit" type="xsd:int" default="0" maxOccurs="1"
                        minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how many days to keep message counter history for this address
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="last-value-queue" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  This is deprecated please use default-last-value-queue instead.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-last-value-queue" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether to treat the queues under the address as a last value queues by default
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-last-value-key" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the property to use as the key for a last value queue by default
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-non-destructive" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether the queue should be non-destructive by default
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-exclusive-queue" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether to treat the queues under the address as exclusive queues by default
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-group-rebalance" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether to rebalance groups when a consumer is added
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-group-rebalance-pause-dispatch" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether to pause dispatch when rebalancing groups
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-group-buckets" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  number of buckets to use for grouping, -1 (default) is unlimited and uses the raw group, 0 disables message groups.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-group-first-key" type="xsd:string" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  key used to mark a message is first in a group for a consumer
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-consumers-before-dispatch" type="xsd:int" default="0" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the default number of consumers needed before dispatch can start for queues under the address.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-delay-before-dispatch" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the default delay (in milliseconds) to wait before dispatching if number of consumers before
                  dispatch is not met for queues under the address.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="redistribution-delay" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how long (in ms) to wait after the last consumer is closed on a queue before redistributing
                  messages.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="send-to-dla-on-no-route" type="xsd:boolean" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  if there are no queues matching this address, whether to forward message to DLA (if it exists for
                  this address)
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="slow-consumer-threshold" type="xsd:long" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The minimum rate of message consumption allowed before a consumer is considered "slow."  Measurement
                  unit is defined by the slow-consumer-threshold-measurement-unit parameter.  By default this is
                  messages-per-seconds
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="slow-consumer-threshold-measurement-unit" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  The units used to measure the slow consumer threshold.  Default is messages-per-second.
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="MESSAGES_PER_SECOND"/>
                  <xsd:enumeration value="MESSAGES_PER_MINUTE"/>
                  <xsd:enumeration value="MESSAGES_PER_HOUR"/>
                  <xsd:enumeration value="MESSAGES_PER_DAY"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>

         <xsd:element name="slow-consumer-policy" default="NOTIFY" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  what happens when a slow consumer is identified
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="KILL"/>
                  <xsd:enumeration value="NOTIFY"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>

         <xsd:element name="slow-consumer-check-period" type="xsd:long" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  How often to check for slow consumers on a particular queue. Measured in seconds.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-create-jms-queues" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: whether or not to automatically create JMS queues when a producer sends or a consumer connects to a
                  queue
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-delete-jms-queues" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: whether or not to delete auto-created JMS queues when the queue has 0 consumers and 0 messages
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-create-jms-topics" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: whether or not to automatically create JMS topics when a producer sends or a consumer subscribes to
                  a topic
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-delete-jms-topics" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  DEPRECATED: whether or not to delete auto-created JMS topics when the last subscription is closed
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-create-queues" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not to automatically create a queue when a client sends a message to or attempts to consume
                  a message from a queue
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-delete-queues" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not to delete auto-created queues when the queue has 0 consumers and 0 messages
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-delete-created-queues" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not to delete created queues when the queue has 0 consumers and 0 messages
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-delete-queues-delay" type="xsd:long" default="0" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how long to wait (in milliseconds) before deleting auto-created queues after the queue has 0
                  consumers.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-delete-queues-message-count" type="xsd:long" default="0" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the message count the queue must be at or below before it can be evaluated to be auto deleted, 0 waits until empty queue (default) and -1 disables this check.
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-delete-queues-skip-usage-check" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not to check that the queue has actually be used before auto-deleting it
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="config-delete-queues" default="OFF" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                     What to do when a queue is no longer in broker.xml.
                  OFF = will do nothing queues will remain,
                  FORCE = delete queues even if messages remaining.
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="OFF"/>
                  <xsd:enumeration value="FORCE"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>

         <xsd:element name="auto-create-addresses" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not to automatically create addresses when a client sends a message to or attempts to
                  consume a message from a queue mapped to an address that doesn't exist
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-delete-addresses" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not to delete auto-created addresses when it no longer has any queues
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-delete-addresses-delay" type="xsd:long" default="0" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how long to wait (in milliseconds) before deleting auto-created addresses after they no longer
                  have any queues
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="auto-delete-addresses-skip-usage-check" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not to check that the address has actually be used before auto-deleting it
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="config-delete-addresses" default="OFF" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  What to do when an address is no longer in broker.xml.
                  OFF = will do nothing addresses will remain,
                  FORCE = delete address and its queues even if messages remaining.
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="OFF"/>
                  <xsd:enumeration value="FORCE"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>

         <xsd:element name="config-delete-diverts" default="OFF" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  What to do when a divert is no longer in broker.xml.
                  OFF = will do nothing queues will remain,
                  FORCE = delete queues even if messages remaining.
               </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="OFF"/>
                  <xsd:enumeration value="FORCE"/>
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:element>

         <xsd:element name="management-browse-page-size" type="xsd:int" default="200" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how many message a management resource can browse, list or filter
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="management-message-attribute-size-limit" type="xsd:int" default="256" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the size limit of any message attribute value returned from a browse ,list or filter. Attribute values that exceed with be truncated
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-purge-on-no-consumers" type="xsd:boolean" default="false" maxOccurs="1"
                        minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  purge the contents of the queue once there are no consumers
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-max-consumers" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the maximum number of consumers allowed on this queue at any one time
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-queue-routing-type" type="routing-type" default="MULTICAST" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the routing-type used on auto-created queues
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-address-routing-type" type="routing-type" default="MULTICAST" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the routing-type used on auto-created addresses
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-consumer-window-size" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the default window size for a consumer
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="default-ring-size" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the default ring-size value for any matching queue which doesn't have `ring-size` explicitly
                  defined
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="retroactive-message-count" type="xsd:long" default="0" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  the number of messages to preserve for future queues created on the matching address
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="enable-metrics" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not to enable metrics for metrics plugins on the matching address
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="enable-ingress-timestamp" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  whether or not the broker should set its own timestamp on incoming messages to the matching address
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

      </xsd:all>

      <xsd:attribute name="match" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               pattern for matching settings against addresses; can use wildards
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <!-- RESOURCE LIMIT CONFIGURATION -->
   <xsd:element name="resource-limit-settings">
      <xsd:annotation>
         <xsd:documentation>
            a list of resource limit settings
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="resource-limit-setting" type="resourceLimitSettingType" maxOccurs="unbounded" minOccurs="0"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="resourceLimitSettingType">
      <xsd:annotation>
         <xsd:documentation>
            Complex type element to configure resource limits for a particular user.
         </xsd:documentation>
      </xsd:annotation>
      <xsd:all>
         <xsd:element name="max-connections" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how many connections are allowed by the matched user (-1 means no limit, default is -1)
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>

         <xsd:element name="max-queues" type="xsd:int" default="-1" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  how many queues can be created by the matched user (-1 means no limit, default is -1)
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
      </xsd:all>

      <xsd:attribute name="match" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               the name of the user to whom the limits should be applied
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:element name="filter">
      <xsd:complexType>
         <xsd:annotation>
            <xsd:documentation>
               optional core filter expression (set through attribute)
            </xsd:documentation>
         </xsd:annotation>
         <xsd:attribute name="string" type="xsd:string" use="required">
            <xsd:annotation>
               <xsd:documentation>
                  optional core filter expression
               </xsd:documentation>
            </xsd:annotation>
         </xsd:attribute>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:element name="connector-services">
      <xsd:annotation>
         <xsd:documentation>
            a list of connector services
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="connector-service" type="connector-serviceType" maxOccurs="unbounded" minOccurs="0"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:complexType name="connector-serviceType">
      <xsd:sequence>
         <xsd:element maxOccurs="1" minOccurs="1" name="factory-class" type="xsd:string">
            <xsd:annotation>
               <xsd:documentation>
                  Name of the factory class of the ConnectorService
               </xsd:documentation>
            </xsd:annotation>
         </xsd:element>
         <xsd:element maxOccurs="unbounded" minOccurs="0" name="param" type="paramType"/>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:string" use="optional">
         <xsd:annotation>
            <xsd:documentation>
               name of the connector service
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="transportType">
      <xsd:simpleContent>
         <xsd:extension base="xsd:string">
            <xsd:attribute name="name" type="xsd:string">
            </xsd:attribute>
         </xsd:extension>
      </xsd:simpleContent>
   </xsd:complexType>

   <!-- 2.0 Addressing configuration -->
   <xsd:simpleType name="routing-type">
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="ANYCAST"/>
         <xsd:enumeration value="MULTICAST"/>
      </xsd:restriction>
   </xsd:simpleType>

   <xsd:simpleType name="component-routing-type">
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="ANYCAST"/>
         <xsd:enumeration value="MULTICAST"/>
         <xsd:enumeration value="STRIP"/>
         <xsd:enumeration value="PASS"/>
      </xsd:restriction>
   </xsd:simpleType>

   <xsd:complexType name="queueType">
      <xsd:all>
         <xsd:element ref="filter" maxOccurs="1" minOccurs="0"/>
         <xsd:element name="durable" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0" />
         <xsd:element name="user" type="xsd:string" maxOccurs="1" minOccurs="0" />
      </xsd:all>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="max-consumers" type="xsd:integer" use="optional"/>
      <xsd:attribute name="purge-on-no-consumers" type="xsd:boolean" use="optional"/>
      <xsd:attribute name="exclusive" type="xsd:boolean" use="optional"/>
      <xsd:attribute name="group-rebalance" type="xsd:boolean" use="optional"/>
      <xsd:attribute name="group-rebalance-pause-dispatch" type="xsd:boolean" use="optional"/>
      <xsd:attribute name="group-buckets" type="xsd:int" use="optional"/>
      <xsd:attribute name="group-first-key" type="xsd:string" use="optional"/>
      <xsd:attribute name="last-value" type="xsd:boolean" use="optional"/>
      <xsd:attribute name="last-value-key" type="xsd:string" use="optional"/>
      <xsd:attribute name="non-destructive" type="xsd:boolean" use="optional"/>
      <xsd:attribute name="consumers-before-dispatch" type="xsd:int" use="optional"/>
      <xsd:attribute name="delay-before-dispatch" type="xsd:long" use="optional"/>
      <xsd:attribute name="ring-size" type="xsd:long" use="optional"/>
      <xsd:attribute name="enabled" type="xsd:boolean" use="optional"/>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <xsd:complexType name="addressType">
      <xsd:all>
         <xsd:element name="anycast" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  a list of pre configured queues to create
               </xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="queue" type="queueType" maxOccurs="unbounded" minOccurs="0" />
               </xsd:sequence>
               <xsd:attributeGroup ref="xml:specialAttrs"/>
            </xsd:complexType>
         </xsd:element>
         <xsd:element name="multicast" maxOccurs="1" minOccurs="0">
            <xsd:annotation>
               <xsd:documentation>
                  a list of pre configured queues to create
               </xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="queue" type="queueType" maxOccurs="unbounded" minOccurs="0" />
               </xsd:sequence>
               <xsd:attributeGroup ref="xml:specialAttrs"/>
            </xsd:complexType>
         </xsd:element>
      </xsd:all>
      <xsd:attribute name="name" type="xsd:string" use="required">
         <xsd:annotation>
            <xsd:documentation>
               The address name to match incoming message addresses
            </xsd:documentation>
         </xsd:annotation>
      </xsd:attribute>
      <xsd:attributeGroup ref="xml:specialAttrs"/>
   </xsd:complexType>

   <!-- CONNECTORS CONFIGURATION -->
   <xsd:element name="connectors">
      <xsd:annotation>
         <xsd:documentation>
            a list of remoting connectors configurations to create
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="connector" type="transportType" maxOccurs="unbounded"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:element name="acceptors">
      <xsd:annotation>
         <xsd:documentation>
            a list of remoting acceptors to create
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="acceptor" type="transportType" maxOccurs="unbounded"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <!-- SECURITY SETTINGS CONFIGURATION -->
   <xsd:element name="security-settings">
      <xsd:annotation>
         <xsd:documentation>
            a list of security settings
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:choice>
               <xsd:element name="security-setting" maxOccurs="unbounded" minOccurs="0">
                  <xsd:complexType>
                     <xsd:annotation>
                        <xsd:documentation>
                           a permission to add to the matched addresses
                        </xsd:documentation>
                     </xsd:annotation>
                     <xsd:sequence>
                        <xsd:element name="permission" maxOccurs="unbounded" minOccurs="0">
                           <xsd:complexType>
                              <xsd:attribute name="type" type="xsd:string" use="required">
                                 <xsd:annotation>
                                    <xsd:documentation>
                                       the type of permission
                                    </xsd:documentation>
                                 </xsd:annotation>
                              </xsd:attribute>
                              <xsd:attribute name="roles" type="xsd:string" use="required">
                                 <xsd:annotation>
                                    <xsd:documentation>
                                       a comma-separated list of roles to apply the permission to
                                    </xsd:documentation>
                                 </xsd:annotation>
                              </xsd:attribute>
                              <xsd:attributeGroup ref="xml:specialAttrs"/>
                           </xsd:complexType>
                        </xsd:element>
                     </xsd:sequence>
                     <xsd:attribute name="match" type="xsd:string" use="required">
                        <xsd:annotation>
                           <xsd:documentation>
                              pattern for matching security roles against addresses; can use wildcards
                           </xsd:documentation>
                        </xsd:annotation>
                     </xsd:attribute>
                     <xsd:attributeGroup ref="xml:specialAttrs"/>
                  </xsd:complexType>
               </xsd:element>
               <xsd:element name="security-setting-plugin" maxOccurs="1" minOccurs="0">
                  <xsd:complexType>
                     <xsd:annotation>
                        <xsd:documentation>
                           a plugin
                        </xsd:documentation>
                     </xsd:annotation>
                     <xsd:sequence>
                        <xsd:element name="setting" maxOccurs="unbounded" minOccurs="0">
                           <xsd:complexType>
                              <xsd:attribute name="name" type="xsd:string" use="required">
                                 <xsd:annotation>
                                    <xsd:documentation>
                                       the name of the setting
                                    </xsd:documentation>
                                 </xsd:annotation>
                              </xsd:attribute>
                              <xsd:attribute name="value" type="xsd:string" use="required">
                                 <xsd:annotation>
                                    <xsd:documentation>
                                       the value for the setting
                                    </xsd:documentation>
                                 </xsd:annotation>
                              </xsd:attribute>
                              <xsd:attributeGroup ref="xml:specialAttrs"/>
                           </xsd:complexType>
                        </xsd:element>
                     </xsd:sequence>
                     <xsd:attribute name="class-name" type="xsd:string" use="required">
                        <xsd:annotation>
                           <xsd:documentation>
                              the name of the plugin class to instantiate
                           </xsd:documentation>
                        </xsd:annotation>
                     </xsd:attribute>
                     <xsd:attributeGroup ref="xml:specialAttrs"/>
                  </xsd:complexType>
               </xsd:element>
            </xsd:choice>
            <xsd:element name="role-mapping" minOccurs="0" maxOccurs="unbounded">
               <xsd:complexType>
                  <xsd:attribute name="from" type="xsd:string" use="required">
                     <xsd:annotation>
                        <xsd:documentation>
                           the name of the external role
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:attribute>
                  <xsd:attribute name="to" type="xsd:string" use="required">
                     <xsd:annotation>
                        <xsd:documentation>
                           the comma delimited name of the internal role(s)
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:attribute>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <!-- BROKER PLUGINS CONFIGURATION -->
   <xsd:element name="broker-plugins">
      <xsd:annotation>
         <xsd:documentation>
            a list of broker-plugins
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="broker-plugin" maxOccurs="unbounded" minOccurs="0">
               <xsd:complexType>
                  <xsd:annotation>
                     <xsd:documentation>
                        a broker plugin
                     </xsd:documentation>
                  </xsd:annotation>
                  <xsd:sequence>
                     <xsd:element ref="property" maxOccurs="unbounded" minOccurs="0">
                        <xsd:annotation>
                           <xsd:documentation>
                              properties to configure a plugin
                           </xsd:documentation>
                        </xsd:annotation>
                     </xsd:element>
                  </xsd:sequence>
                  <xsd:attribute name="class-name" type="xsd:string" use="required">
                     <xsd:annotation>
                        <xsd:documentation>
                           the name of the broker plugin class to instantiate
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:attribute>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <!-- METRICS CONFIGURATION -->
   <xsd:element name="metrics">
      <xsd:annotation>
         <xsd:documentation>
            metrics configuration
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:all>
            <xsd:element name="jvm-memory" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0">
               <xsd:annotation>
                  <xsd:documentation>
                     whether or not to report JVM memory metrics
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>

            <xsd:element name="jvm-threads" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
               <xsd:annotation>
                  <xsd:documentation>
                     whether or not to report JVM thread metrics
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>

            <xsd:element name="jvm-gc" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
               <xsd:annotation>
                  <xsd:documentation>
                     whether or not to report JVM GC metrics
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>

            <xsd:element name="netty-pool" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
               <xsd:annotation>
                  <xsd:documentation>
                     whether or not to report Netty pool metrics
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>

            <xsd:element name="file-descriptors" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
               <xsd:annotation>
                  <xsd:documentation>
                     whether or not to report file descriptor metrics
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>

            <xsd:element name="processor" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
               <xsd:annotation>
                  <xsd:documentation>
                     whether or not to report processor metrics
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>

            <xsd:element name="uptime" type="xsd:boolean" default="false" maxOccurs="1" minOccurs="0">
               <xsd:annotation>
                  <xsd:documentation>
                     whether or not to report uptime metrics
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>

            <xsd:element name="plugin" maxOccurs="1" minOccurs="0">
               <xsd:complexType>
                  <xsd:annotation>
                     <xsd:documentation>
                        a metrics plugin
                     </xsd:documentation>
                  </xsd:annotation>
                  <xsd:sequence>
                     <xsd:element ref="property" maxOccurs="unbounded" minOccurs="0">
                        <xsd:annotation>
                           <xsd:documentation>
                              properties to configure a plugin
                           </xsd:documentation>
                        </xsd:annotation>
                     </xsd:element>
                  </xsd:sequence>
                  <xsd:attribute name="class-name" type="xsd:string" use="required">
                     <xsd:annotation>
                        <xsd:documentation>
                           the name of the metrics plugin class to instantiate
                        </xsd:documentation>
                     </xsd:annotation>
                  </xsd:attribute>
                  <xsd:attributeGroup ref="xml:specialAttrs"/>
               </xsd:complexType>
            </xsd:element>
         </xsd:all>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <!-- ADDRESSES CONFIGURATION -->
   <xsd:element name="addresses">
      <xsd:annotation>
         <xsd:documentation>
            a list of addresses
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="address" type="addressType" maxOccurs="unbounded" minOccurs="0"/>
         </xsd:sequence>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

   <xsd:element name="wildcard-addresses">
      <xsd:annotation>
         <xsd:documentation>
            parameters to configure wildcard address matching format
         </xsd:documentation>
      </xsd:annotation>
      <xsd:complexType>
         <xsd:annotation>
            <xsd:documentation>
               Complex type element to configure wildcard address format.
            </xsd:documentation>
         </xsd:annotation>
         <xsd:all>
            <xsd:element maxOccurs="1" minOccurs="0" name="enabled" type="xsd:boolean">
               <xsd:annotation>
                  <xsd:documentation>
                     deprecated please use routing-enabled.
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>
            <xsd:element maxOccurs="1" minOccurs="0" name="routing-enabled" type="xsd:boolean">
               <xsd:annotation>
                  <xsd:documentation>
                     is wildcard addresses routing enabled.
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>
            <xsd:element maxOccurs="1" minOccurs="0" name="delimiter" type="xsd:string">
               <xsd:annotation>
                  <xsd:documentation>
                     wildcard address parts delimiter. Default '.'
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>
            <xsd:element maxOccurs="1" minOccurs="0" name="any-words" type="xsd:string">
               <xsd:annotation>
                  <xsd:documentation>
                     wildcard address any words character. Default '#'
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>
            <xsd:element maxOccurs="1" minOccurs="0" name="single-word" type="xsd:string">
               <xsd:annotation>
                  <xsd:documentation>
                     wildcard address single word character. Default '*'
                  </xsd:documentation>
               </xsd:annotation>
            </xsd:element>
         </xsd:all>
         <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:complexType>
   </xsd:element>

</xsd:schema>
