iPOJO Core XML-Schema. This grammars models iPOJO descriptor using core features. It provides several extensibility mechanism in order to compose this schema with external handlers and other component implementation type such as compositions. iPOJO top level element. The handler declarations. The instance declarations. The component type declarations. Description of the handler. The implementation class of the handler. The specified class must implement (direcly or not) the "org.apache.felix.ipojo.Handler" interface. The name of the handler. The XML namespace of the handler. Enables or disables the architecture exposition. By default, the architecture is not exposed. This allows handler introspection. The start level of the handler. Describes an instance of a component. The instance properties. The name of the instance component type. The (unique) name of the instance. The version of the factory to use. Defines a property of an instance configuration. Name of the property. Can be optional if a property is inside a structure. The 'instance.name' property has a special semantic as it will be used as the instance name. Value of the property. Can be null for property containing other properties. Type of the property, used to create the adequate object. Supported values are list, array, dictionary and map. Declares an atomic (i.e. primitive) component type. Describes the method(s) to invoke when the component's state changes. Indicates the component provided service(s). By default, all implemented interfaces are published. Indicates the service requirements of the component. Describes the properties of the component. Lifecycle controller for this component. Specifies the name of the component type. This name is used to identify the factory attached to this type. If not specified, the factory name is the implementation class name. Determines if the component type is public or private. A public factory (default) can be used from any bundles. Specifies the implementation class of the component type. Enables or disables the architecture exposition. By default, the architecture is exposed. This allows instance introspection. Creates the object of the component implementation type as soon as the component instance becomes valid. The default value is "true" if the component doesn't provide any service, "false" otherwise. Factory method called to create POJO objects instead of the constructor. The specified method must be a static method of the implementation class returning an instance of this implementation class. The factory method can receive the bundle context in argument. Set the version of this component type Description of component services requirements. Service requirement method invocation description. Here can be specified a bind method called when a service appears and an unbind method called when a service disappears. The interface describing the required service type. This attribute is needed only when using aggregate dependencies with field injection and when the type of this field is a list, vector, collection and set. This attribute is deprecated, use 'specification'. The name of the field representing the service dependency in the implementation class. Enable or disable the Nullable pattern on optional service dependencies. By default, Nullable pattern is enabled. If disabled, iPOJO will inject null instead of a Nullable object. Specifies the default implementation class for an optional service dependency. If no providers are found, iPOJO creates an instance of the default-implementation (nullary constructor) and injects it. The given class must implement the required service interface. Specific service provider. The dependency can only be fulfilled by the component with the matching name, or by the service with a matching PID. Enables or Disable the proxy injection (on field injection) Dependency callbacks are used to receive notification when service providers arrive and leave. Method to call Type of callback (bind, unbind, or updated). Bind means that the method will be called when a provider arrives. Unbind means that the method will be called when a provider leaves. Updated means that a service was modified but is still valid for the service dependency. Lifecycle Callback. Allows a POJO to be notified when the instance becomes valid or invalid. Specifies the method to call on the transition. Specifies the transition when the callback needs to be invoked. Lifecycle transition state. "validate" means that the component's instance was invalid and becomes valid, "invalidate" means that the component's intance was valid and becomes invalid. Provided service(s) description. List of service specific properties. Service Controller impacting the current provided service Deprecated attribute, use 'specifications' instead of 'interface' The list of service specifications (i.e. interfaces) to expose. By default, all interfaces implemented by the component implementation class are published. Use 'strategy' instead of 'factory' POJO creation strategy. By default, the POJO object is created once (singleton). If the factory is set to "SERVICE", the creation policy follows the OSGi service factory policy (one object object per asking bundle). INSTANCE allows creating one different POJO object per asking instance. Finally, a custom strategy can be used by specifying the qualified name of the class extending CreationPolicy Defines a callback called after the service registration. The callback takes a ServiceReference as parameter Defines a callback called after the service unregistration. The callback takes a ServiceReference as parameter Defines a service controller. Field of the controller Intiail value of the controller Defines a component property. Field of the property Setter method of the property. This method is called to inject property value. Name of the property. Default value of the property. Type of the property. Set the property as mandatory. A mandatory property MUST receive a value either in the component type description or in the instance configuration. Properties are optional by default. List of component, instance or service properties. This field will receive the property value. The list of properties. Propagation of the component properties to the provided services. If this parameter is set to "true", each time properties are reconfigured, they are propagated to each service published by the component. Unique identifier used to reconfigure components properties (via Managed Services) with the Configuration Admin. Method called when a reconfiguration is done The specification describing the required service type. This attribute is needed only when using aggregate dependencies with field injection and when the type of this field is a list, vector, collection and set. Sets the service dependency optionality Sets the service dependency cardinality. Sets the binding policy of the dependency. Three policies are supported. The dynamic policy supports service providers dynamism. The static policy freezes the provider set as soon as the dependency is used. The dynamic-priority policy is an extension of the dynamic policy, but providers are ranked. The comparator attribute allows specifying the class used to compare providers. This class must implemented the java.util.Comparator class and must support the comparison of service references. LDAP filter used to filter providers id of the service dependency. The id allows to indentify and to refert to this dependency. Specifies the lifecycle controller of a component, which allows to validate or invalidate component instances. The name of the component lifecycle controller field. The type of the specified field must be boolean. Setting the value of the specified field to "true" means the validation of the component instance while setting it to "false" means the invalidation of the component instance.