/// <summary>
        /// Build the XSD generated class objects from the specified <paramref name="beans"/>
        /// </summary>
        /// <param name="beans">
        /// The beans.
        /// </param>
        /// <returns>
        /// the XSD generated class objects from the specified <paramref name="beans"/>
        /// </returns>
        protected internal override XTypedElement Build(ISdmxObjects beans)
        {
            bool hasStructures = beans.HasStructures();
            bool hasRegistrations = beans.HasRegistrations();
            bool hasSubscriptions = beans.HasSubscriptions();
            if (hasStructures && hasRegistrations)
            {
                throw new ArgumentException(
                    "Container sent to be written contains both structures and registrations, this can not be written out to a single SDMX Message");
            }

            if (hasStructures && hasRegistrations)
            {
                throw new ArgumentException(
                    "Container sent to be written contains both structures and subscriptions, this can not be written out to a single SDMX Message");
            }

            if (hasSubscriptions && hasStructures)
            {
                throw new ArgumentException(
                    "Container sent to be written contains both structures and subscriptions, this can not be written out to a single SDMX Message");
            }

            if (hasSubscriptions && hasRegistrations)
            {
                throw new ArgumentException(
                    "Container sent to be written contains both registrations and subscriptions, this can not be written out to a single SDMX Message");
            }

            if (hasRegistrations)
            {
                return this._registrationXmlBuilderBean.BuildRegistryInterfaceDocument(
                    beans.Registrations, DatasetActionEnumType.Append);
            }

            if (hasSubscriptions)
            {
                return this._submitSubscriptionBuilder.BuildRegistryInterfaceDocument(
                    beans.Subscriptions, DatasetActionEnumType.Append);
            }

            return this._structureXmlBuilderBean.Build(beans);
        }