Class XmlConfiguration


  • public class XmlConfiguration
    extends java.lang.Object

    Configures objects from XML.

    This class reads an XML file conforming to the configure.dtd DTD and uses it to configure and object by calling set, put or other methods on the object.

    The actual XML file format may be changed (eg to spring XML) by implementing the ConfigurationProcessorFactory interface to be found by the ServiceLoader by using the DTD and first tag element in the file. Note that DTD will be null if validation is off.

    The configuration can be parameterised with properties that are looked up via the Property XML element and set on the configuration via the map returned from getProperties()

    The configuration can create and lookup beans by ID. If multiple configurations are used, then it is good practise to copy the entries from the getIdMap() of a configuration to the next configuration so that they can share an ID space for beans.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.util.Comparator<java.lang.reflect.Executable> EXECUTABLE_COMPARATOR  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.Object configure()
      Applies the XML configuration script.
      java.lang.Object configure​(java.lang.Object obj)
      Applies the XML configuration script to the given object.
      java.util.Map<java.lang.String,​java.lang.Object> getIdMap()
      Get the map of ID String to Objects that is used to hold and lookup any objects by ID.
      java.util.Map<java.lang.String,​java.lang.String> getProperties()
      Get the map of properties used by the Property XML element to parametrize configuration.
      void initializeDefaults​(java.lang.Object object)
      Initialize a new Object defaults.
      static void main​(java.lang.String... args)
      Runs the XML configurations as a main application.
      static java.lang.String normalizeURI​(java.lang.String uri)  
      void setJettyStandardIdsAndProperties​(java.lang.Object server, Resource webapp)
      Set the standard IDs and properties expected in a jetty XML file: RefId Server Property jetty.home Property jetty.home.uri Property jetty.base Property jetty.base.uri Property jetty.webapps Property jetty.webapps.uri
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • EXECUTABLE_COMPARATOR

        public static final java.util.Comparator<java.lang.reflect.Executable> EXECUTABLE_COMPARATOR
    • Constructor Detail

      • XmlConfiguration

        public XmlConfiguration​(Resource resource)
                         throws org.xml.sax.SAXException,
                                java.io.IOException
        Reads and parses the XML configuration file.
        Parameters:
        resource - the Resource to the XML configuration
        Throws:
        java.io.IOException - if the configuration could not be read
        org.xml.sax.SAXException - if the configuration could not be parsed
      • XmlConfiguration

        @Deprecated
        public XmlConfiguration​(java.net.URL configuration)
                         throws org.xml.sax.SAXException,
                                java.io.IOException
        Deprecated.
        Reads and parses the XML configuration file.
        Parameters:
        configuration - the URL of the XML configuration
        Throws:
        java.io.IOException - if the configuration could not be read
        org.xml.sax.SAXException - if the configuration could not be parsed
      • XmlConfiguration

        @Deprecated
        public XmlConfiguration​(java.lang.String configuration)
                         throws org.xml.sax.SAXException,
                                java.io.IOException
        Deprecated.
        use Constructor which has location information
        Reads and parses the XML configuration string.
        Parameters:
        configuration - String of XML configuration commands excluding the normal XML preamble. The String should start with a "<Configure ....>" element.
        Throws:
        java.io.IOException - if the configuration could not be read
        org.xml.sax.SAXException - if the configuration could not be parsed
      • XmlConfiguration

        @Deprecated
        public XmlConfiguration​(java.io.InputStream configuration)
                         throws org.xml.sax.SAXException,
                                java.io.IOException
        Deprecated.
        use Constructor which has location information
        Reads and parses the XML configuration stream.
        Parameters:
        configuration - An input stream containing a complete configuration file
        Throws:
        java.io.IOException - if the configuration could not be read
        org.xml.sax.SAXException - if the configuration could not be parsed
    • Method Detail

      • setJettyStandardIdsAndProperties

        public void setJettyStandardIdsAndProperties​(java.lang.Object server,
                                                     Resource webapp)
        Set the standard IDs and properties expected in a jetty XML file:
        • RefId Server
        • Property jetty.home
        • Property jetty.home.uri
        • Property jetty.base
        • Property jetty.base.uri
        • Property jetty.webapps
        • Property jetty.webapps.uri
        Parameters:
        server - The Server object to set
        webapp - The webapps Resource
      • normalizeURI

        public static java.lang.String normalizeURI​(java.lang.String uri)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getIdMap

        public java.util.Map<java.lang.String,​java.lang.Object> getIdMap()
        Get the map of ID String to Objects that is used to hold and lookup any objects by ID.

        A New, Get or Call XML element may have an id attribute which will cause the resulting object to be placed into this map. A Ref XML element will lookup an object from this map.

        When chaining configuration files, it is good practise to copy the ID entries from the ID map to the map of the next configuration, so that they may share an ID space

        Returns:
        A modifiable map of ID strings to Objects
      • getProperties

        public java.util.Map<java.lang.String,​java.lang.String> getProperties()
        Get the map of properties used by the Property XML element to parametrize configuration.
        Returns:
        A modifiable map of properties.
      • configure

        public java.lang.Object configure​(java.lang.Object obj)
                                   throws java.lang.Exception
        Applies the XML configuration script to the given object.
        Parameters:
        obj - The object to be configured, which must be of a type or super type of the class attribute of the <Configure> element.
        Returns:
        the configured object
        Throws:
        java.lang.Exception - if the configuration fails
      • configure

        public java.lang.Object configure()
                                   throws java.lang.Exception
        Applies the XML configuration script. If the root element of the configuration has an ID, an object is looked up by ID and its type checked against the root element's type. Otherwise a new object of the type specified by the root element is created.
        Returns:
        The newly created configured object.
        Throws:
        java.lang.Exception - if the configuration fails
      • initializeDefaults

        public void initializeDefaults​(java.lang.Object object)
        Initialize a new Object defaults.

        This method must be called by any ConfigurationProcessor when it creates a new instance of an object before configuring it, so that a derived XmlConfiguration class may inject default values.

        Parameters:
        object - the object to initialize defaults on
      • main

        public static void main​(java.lang.String... args)
                         throws java.lang.Exception
        Runs the XML configurations as a main application. The command line is used to obtain properties files (must be named '*.properties') and XmlConfiguration files.

        Any property file on the command line is added to a combined Property instance that is passed to each configuration file via getProperties().

        Each configuration file on the command line is used to create a new XmlConfiguration instance and the configure() method is used to create the configured object. If the resulting object is an instance of LifeCycle, then it is started.

        Any IDs created in a configuration are passed to the next configuration file on the command line using getIdMap(). This allows objects with IDs created in one config file to be referenced in subsequent config files on the command line.

        Parameters:
        args - array of property and xml configuration filenames or Resources.
        Throws:
        java.lang.Exception - if the XML configurations cannot be run