Class XMLBeanDeclaration
- All Implemented Interfaces:
BeanDeclaration
- Direct Known Subclasses:
DefaultConfigurationBuilder.ConfigurationDeclaration
An implementation of the BeanDeclaration interface that is
suitable for XML configuration files.
This class defines the standard layout of a bean declaration in an XML configuration file. Such a declaration must look like the following example fragment:
...
<personBean config-class="my.model.PersonBean"
lastName="Doe" firstName="John">
<address config-class="my.model.AddressBean"
street="21st street 11" zip="1234"
city="TestCity"/>
</personBean>
The bean declaration can be contained in an arbitrary element. Here it is the
personBean element. In the attributes of this element
there can occur some reserved attributes, which have the following meaning:
config-class- Here the full qualified name of the bean's class can be specified. An
instance of this class will be created. If this attribute is not specified,
the bean class must be provided in another way, e.g. as the
defaultClasspassed to theBeanHelperclass. config-factory- This attribute can contain the name of the
BeanFactorythat should be used for creating the bean. If it is defined, a factory with this name must have been registered at theBeanHelperclass. If this attribute is missing, the default bean factory will be used. config-factoryParam- With this attribute a parameter can be specified that will be passed to the bean factory. This may be useful for custom bean factories.
All further attributes starting with the config- prefix are
considered as meta data and will be ignored. All other attributes are treated
as properties of the bean to be created, i.e. corresponding setter methods of
the bean will be invoked with the values specified here.
If the bean to be created has also some complex properties (which are itself beans), their values cannot be initialized from attributes. For this purpose nested elements can be used. The example listing shows how an address bean can be initialized. This is done in a nested element whose name must match the name of a property of the enclosing bean declaration. The format of this nested element is exactly the same as for the bean declaration itself, i.e. it can have attributes defining meta data or bean properties and even further nested elements for complex bean properties.
A XMLBeanDeclaration object is usually created from a
HierarchicalConfiguration. From this it will derive a
SubnodeConfiguration, which is used to access the needed
properties. This subnode configuration can be obtained using the
getConfiguration() method. All of its properties can
be accessed in the usual way. To ensure that the property keys used by this
class are understood by the configuration, the default expression engine will
be set.
- Since:
- 1.3
- Version:
- $Id: XMLBeanDeclaration.java 1301959 2012-03-17 16:43:18Z oheger $
- Author:
- Commons Configuration team
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringConstant for the bean class attribute.static final StringConstant for the bean factory attribute.static final StringConstant for the bean factory parameter attribute.static final StringConstant for the prefix for reserved attributes.static final StringConstant for the prefix of reserved attributes. -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new instance ofXMLBeanDeclarationand initializes it from the given configuration.XMLBeanDeclaration(HierarchicalConfiguration config, String key) Creates a new instance ofXMLBeanDeclarationand initializes it from the given configuration.XMLBeanDeclaration(HierarchicalConfiguration config, String key, boolean optional) Creates a new instance ofXMLBeanDeclarationand initializes it from the given configuration.XMLBeanDeclaration(SubnodeConfiguration config, ConfigurationNode node) Creates a new instance ofXMLBeanDeclarationand initializes it with the configuration node that contains the bean declaration. -
Method Summary
Modifier and TypeMethodDescriptionprotected BeanDeclarationCreates a newBeanDeclarationfor a child node of the current configuration node.Returns the name of the class of the bean to be created.Returns the name of the bean factory.Returns a parameter for the bean factory.Returns a map with the bean's (simple) properties.Returns the configuration object this bean declaration is based on.Returns a map with bean declarations for the complex properties of the bean to be created.getNode()Returns the node that contains the bean declaration.protected Objectinterpolate(Object value) Performs interpolation for the specified value.protected booleanChecks if the specified node is reserved and thus should be ignored.
-
Field Details
-
RESERVED_PREFIX
Constant for the prefix of reserved attributes.- See Also:
-
ATTR_PREFIX
-
ATTR_BEAN_CLASS
-
ATTR_BEAN_FACTORY
-
ATTR_FACTORY_PARAM
Constant for the bean factory parameter attribute.- See Also:
-
-
Constructor Details
-
XMLBeanDeclaration
Creates a new instance ofXMLBeanDeclarationand initializes it from the given configuration. The passed in key points to the bean declaration.- Parameters:
config- the configurationkey- the key to the bean declaration (this key must point to exactly one bean declaration or aIllegalArgumentExceptionexception will be thrown)
-
XMLBeanDeclaration
Creates a new instance ofXMLBeanDeclarationand initializes it from the given configuration. The passed in key points to the bean declaration. If the key does not exist and the boolean argument is true, the declaration is initialized with an empty configuration. It is possible to create objects from such an empty declaration if a default class is provided. If the key on the other hand has multiple values or is undefined and the boolean argument is false, aIllegalArgumentExceptionexception will be thrown.- Parameters:
config- the configurationkey- the key to the bean declarationoptional- a flag whether this declaration is optional; if set to true, no exception will be thrown if the passed in key is undefined
-
XMLBeanDeclaration
Creates a new instance ofXMLBeanDeclarationand initializes it from the given configuration. The configuration's root node must contain the bean declaration.- Parameters:
config- the configuration with the bean declaration
-
XMLBeanDeclaration
Creates a new instance ofXMLBeanDeclarationand initializes it with the configuration node that contains the bean declaration.- Parameters:
config- the configurationnode- the node with the bean declaration.
-
-
Method Details
-
getConfiguration
Returns the configuration object this bean declaration is based on.- Returns:
- the associated configuration
-
getNode
Returns the node that contains the bean declaration.- Returns:
- the configuration node this bean declaration is based on
-
getBeanFactoryName
Returns the name of the bean factory. This information is fetched from theconfig-factoryattribute.- Specified by:
getBeanFactoryNamein interfaceBeanDeclaration- Returns:
- the name of the bean factory
-
getBeanFactoryParameter
Returns a parameter for the bean factory. This information is fetched from theconfig-factoryParamattribute.- Specified by:
getBeanFactoryParameterin interfaceBeanDeclaration- Returns:
- the parameter for the bean factory
-
getBeanClassName
Returns the name of the class of the bean to be created. This information is obtained from theconfig-classattribute.- Specified by:
getBeanClassNamein interfaceBeanDeclaration- Returns:
- the name of the bean's class
-
getBeanProperties
Returns a map with the bean's (simple) properties. The properties are collected from all attribute nodes, which are not reserved.- Specified by:
getBeanPropertiesin interfaceBeanDeclaration- Returns:
- a map with the bean's properties
-
getNestedBeanDeclarations
Returns a map with bean declarations for the complex properties of the bean to be created. These declarations are obtained from the child nodes of this declaration's root node.- Specified by:
getNestedBeanDeclarationsin interfaceBeanDeclaration- Returns:
- a map with bean declarations for complex properties
-
interpolate
Performs interpolation for the specified value. This implementation will interpolate against the current subnode configuration's parent. If sub classes need a different interpolation mechanism, they should override this method.- Parameters:
value- the value that is to be interpolated- Returns:
- the interpolated value
-
isReservedNode
Checks if the specified node is reserved and thus should be ignored. This method is called when the maps for the bean's properties and complex properties are collected. It checks whether the given node is an attribute node and if its name starts with the reserved prefix.- Parameters:
nd- the node to be checked- Returns:
- a flag whether this node is reserved (and does not point to a property)
-
createBeanDeclaration
Creates a newBeanDeclarationfor a child node of the current configuration node. This method is called bygetNestedBeanDeclarations()for all complex sub properties detected by this method. Derived classes can hook in if they need a specific initialization. This base implementation creates aXMLBeanDeclarationthat is properly initialized from the passed in node.- Parameters:
node- the child node, for which aBeanDeclarationis to be created- Returns:
- the
BeanDeclarationfor this child node - Since:
- 1.6
-