FELIX-3974 Properties cannot be set as immutable using annotations

Added the immutable attribute in the @Property annotation, in the XSD files and updated the annotation processor.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1458231 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/FieldPropertyVisitor.java b/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/FieldPropertyVisitor.java
index 1c2bfdc..512ad5d 100644
--- a/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/FieldPropertyVisitor.java
+++ b/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/FieldPropertyVisitor.java
@@ -62,6 +62,11 @@
      */
     private String m_type;
 
+    /**
+     * Property immutable aspect.
+     */
+    private String m_immutable;
+
 
     /**
      * Constructor without field
@@ -100,6 +105,10 @@
             m_mandatory = value.toString();
             return;
         }
+        if (name.equals("immutable")) {
+            m_immutable = value.toString();
+            return;
+        }
         if (name.equals("type")) {
         	m_type = value.toString();
         }
@@ -146,6 +155,9 @@
         if (m_mandatory != null) {
             prop.addAttribute(new Attribute("mandatory", m_mandatory));
         }
+        if (m_immutable != null) {
+            prop.addAttribute(new Attribute("immutable", m_immutable));
+        }
 
     }
 }
\ No newline at end of file
diff --git a/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/MethodPropertyVisitor.java b/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/MethodPropertyVisitor.java
index 5804c6c..1cf82ab 100644
--- a/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/MethodPropertyVisitor.java
+++ b/ipojo/manipulator/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/metadata/annotation/visitor/MethodPropertyVisitor.java
@@ -62,6 +62,11 @@
     private String m_mandatory;
 
     /**
+     * Property immutable aspect.
+     */
+    private String m_immutable;
+
+    /**
      * Constructor.
      *
      * @param parent : element element.
@@ -92,6 +97,10 @@
             m_mandatory = value.toString();
             return;
         }
+        if (name.equals("immutable")) {
+            m_immutable = value.toString();
+            return;
+        }
         if (name.equals("id")) {
             m_id = value.toString();
         }
@@ -132,6 +141,10 @@
         if (m_mandatory != null) {
             prop.addAttribute(new Attribute("mandatory", m_mandatory));
         }
+        if (m_immutable != null) {
+            prop.addAttribute(new Attribute("immutable", m_immutable));
+        }
+
         return prop;
     }
 
diff --git a/ipojo/manipulator/manipulator/src/main/resources/xsd/core.xsd b/ipojo/manipulator/manipulator/src/main/resources/xsd/core.xsd
index b611d81..d7139db 100644
--- a/ipojo/manipulator/manipulator/src/main/resources/xsd/core.xsd
+++ b/ipojo/manipulator/manipulator/src/main/resources/xsd/core.xsd
@@ -17,573 +17,625 @@
   ~ under the License.
   -->
 <xs:schema elementFormDefault="qualified" targetNamespace="org.apache.felix.ipojo"
-  xmlns="org.apache.felix.ipojo" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:annotation>
-    <xs:documentation>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.</xs:documentation>
-  </xs:annotation>
-  <xs:element name="ipojo">
-    <xs:complexType>
-      <xs:annotation>
-        <xs:documentation>iPOJO top level element.</xs:documentation>
-      </xs:annotation>
-      <xs:choice minOccurs="0" maxOccurs="unbounded">
-        <xs:element ref="handler" minOccurs="0" maxOccurs="unbounded">
-          <xs:annotation>
-            <xs:documentation>The handler declarations.</xs:documentation>
-          </xs:annotation>
-        </xs:element>
-        <xs:element ref="instance" minOccurs="0" maxOccurs="unbounded">
-          <xs:annotation>
-            <xs:documentation>The instance declarations.</xs:documentation>
-          </xs:annotation>
-        </xs:element>
-        <xs:element ref="component" minOccurs="0" maxOccurs="unbounded">
-          <xs:annotation>
-            <xs:documentation>The component type declarations.</xs:documentation>
-          </xs:annotation>
-        </xs:element>
-        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"
-        > </xs:any>
-      </xs:choice>
-    </xs:complexType>
-  </xs:element>
-  <xs:complexType name="HandlerType">
+           xmlns="org.apache.felix.ipojo" xmlns:xs="http://www.w3.org/2001/XMLSchema">
     <xs:annotation>
-      <xs:documentation>Description of the handler.</xs:documentation>
+        <xs:documentation>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.
+        </xs:documentation>
     </xs:annotation>
-    <xs:complexContent>
-      <xs:extension base="RootElementType">
-        <xs:sequence maxOccurs="unbounded" minOccurs="0">
-          <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip"
-          > </xs:any>
-        </xs:sequence>
-        <xs:attribute name="classname" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation>The implementation class of the handler. The specified class must
-              implement (direcly or not) the "org.apache.felix.ipojo.Handler"
-              interface.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="name" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation>The name of the handler.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="namespace" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>The XML namespace of the handler.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="architecture" type="xs:boolean" use="optional" fixed="false">
-          <xs:annotation>
-            <xs:documentation>Enables or disables the architecture exposition. By default, the
-              architecture is not exposed. This allows handler introspection.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="level" type="xs:int" use="optional">
-          <xs:annotation>
-            <xs:documentation>The start level of the handler.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="InstanceType">
-    <xs:annotation>
-      <xs:documentation>Describes an instance of a component.</xs:documentation>
-    </xs:annotation>
-    <xs:complexContent>
-      <xs:extension base="RootElementType">
-        <xs:sequence minOccurs="0" maxOccurs="unbounded">
-          <xs:element name="property" type="InstancePropertyType">
+    <xs:element name="ipojo">
+        <xs:complexType>
             <xs:annotation>
-              <xs:documentation>The instance properties.</xs:documentation>
+                <xs:documentation>iPOJO top level element.</xs:documentation>
             </xs:annotation>
-          </xs:element>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element ref="handler" minOccurs="0" maxOccurs="unbounded">
+                    <xs:annotation>
+                        <xs:documentation>The handler declarations.</xs:documentation>
+                    </xs:annotation>
+                </xs:element>
+                <xs:element ref="instance" minOccurs="0" maxOccurs="unbounded">
+                    <xs:annotation>
+                        <xs:documentation>The instance declarations.</xs:documentation>
+                    </xs:annotation>
+                </xs:element>
+                <xs:element ref="component" minOccurs="0" maxOccurs="unbounded">
+                    <xs:annotation>
+                        <xs:documentation>The component type declarations.</xs:documentation>
+                    </xs:annotation>
+                </xs:element>
+                <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"
+                        ></xs:any>
+            </xs:choice>
+        </xs:complexType>
+    </xs:element>
+    <xs:complexType name="HandlerType">
+        <xs:annotation>
+            <xs:documentation>Description of the handler.</xs:documentation>
+        </xs:annotation>
+        <xs:complexContent>
+            <xs:extension base="RootElementType">
+                <xs:sequence maxOccurs="unbounded" minOccurs="0">
+                    <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip"
+                            ></xs:any>
+                </xs:sequence>
+                <xs:attribute name="classname" type="xs:string" use="required">
+                    <xs:annotation>
+                        <xs:documentation>The implementation class of the handler. The specified class must
+                            implement (direcly or not) the "org.apache.felix.ipojo.Handler"
+                            interface.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="name" type="xs:string" use="required">
+                    <xs:annotation>
+                        <xs:documentation>The name of the handler.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="namespace" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>The XML namespace of the handler.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="architecture" type="xs:boolean" use="optional" fixed="false">
+                    <xs:annotation>
+                        <xs:documentation>Enables or disables the architecture exposition. By default, the
+                            architecture is not exposed. This allows handler introspection.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="level" type="xs:int" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>The start level of the handler.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+    <xs:complexType name="InstanceType">
+        <xs:annotation>
+            <xs:documentation>Describes an instance of a component.</xs:documentation>
+        </xs:annotation>
+        <xs:complexContent>
+            <xs:extension base="RootElementType">
+                <xs:sequence minOccurs="0" maxOccurs="unbounded">
+                    <xs:element name="property" type="InstancePropertyType">
+                        <xs:annotation>
+                            <xs:documentation>The instance properties.</xs:documentation>
+                        </xs:annotation>
+                    </xs:element>
+                </xs:sequence>
+                <xs:attribute name="component" type="xs:string">
+                    <xs:annotation>
+                        <xs:documentation>The name of the instance component type.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="name" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>The (unique) name of the instance.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="version" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>The version of the factory to use.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+    <xs:complexType name="InstancePropertyType">
+        <xs:annotation>
+            <xs:documentation>Defines a property of an instance configuration.</xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="property" type="InstancePropertyType" minOccurs="0" maxOccurs="unbounded"/>
         </xs:sequence>
-        <xs:attribute name="component" type="xs:string">
-          <xs:annotation>
-            <xs:documentation>The name of the instance component type.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
         <xs:attribute name="name" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>The (unique) name of the instance.</xs:documentation>
-          </xs:annotation>
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="value" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Value of the property. Can be null for property containing other
+                    properties.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="type" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Type of the property, used to create the adequate object. Supported values
+                    are list, array, dictionary and map.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="RootElementType"/>
+    <xs:complexType name="ComponentType">
+        <xs:annotation>
+            <xs:documentation>Declares an atomic (i.e. primitive) component type.</xs:documentation>
+        </xs:annotation>
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="callback" minOccurs="0" maxOccurs="unbounded">
+                <xs:annotation>
+                    <xs:documentation>Describes the method(s) to invoke when the component's state
+                        changes.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:element>
+            <xs:element ref="provides" minOccurs="0" maxOccurs="unbounded">
+                <xs:annotation>
+                    <xs:documentation>Indicates the component provided service(s). By default, all implemented
+                        interfaces are published.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:element>
+            <xs:element ref="requires" minOccurs="0" maxOccurs="unbounded">
+                <xs:annotation>
+                    <xs:documentation>Indicates the service requirements of the component.</xs:documentation>
+                </xs:annotation>
+            </xs:element>
+            <xs:element ref="properties" minOccurs="0" maxOccurs="unbounded">
+                <xs:annotation>
+                    <xs:documentation>Describes the properties of the component.</xs:documentation>
+                </xs:annotation>
+            </xs:element>
+            <xs:element ref="controller" minOccurs="0" maxOccurs="1">
+                <xs:annotation>
+                    <xs:documentation>Lifecycle controller for this component.</xs:documentation>
+                </xs:annotation>
+            </xs:element>
+            <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"
+                    ></xs:any>
+        </xs:choice>
+        <xs:attribute name="name" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="public" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>Determines if the component type is public or private. A public factory
+                    (default) can be used from any bundles.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="classname" type="xs:string" use="required">
+            <xs:annotation>
+                <xs:documentation>Specifies the implementation class of the component
+                    type.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="architecture" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>Enables or disables the architecture exposition. By default, the
+                    architecture is exposed. This allows instance introspection.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="immediate" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="factory-method" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
         </xs:attribute>
         <xs:attribute name="version" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>The version of the factory to use.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="InstancePropertyType">
-    <xs:annotation>
-      <xs:documentation>Defines a property of an instance configuration.</xs:documentation>
-    </xs:annotation>
-    <xs:sequence>
-      <xs:element name="property" type="InstancePropertyType" minOccurs="0" maxOccurs="unbounded"/>
-    </xs:sequence>
-    <xs:attribute name="name" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="value" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Value of the property. Can be null for property containing other
-          properties.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="type" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Type of the property, used to create the adequate object. Supported values
-          are list, array, dictionary and map.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="RootElementType"/>
-  <xs:complexType name="ComponentType">
-    <xs:annotation>
-      <xs:documentation>Declares an atomic (i.e. primitive) component type.</xs:documentation>
-    </xs:annotation>
-    <xs:choice minOccurs="0" maxOccurs="unbounded">
-      <xs:element ref="callback" minOccurs="0" maxOccurs="unbounded">
-        <xs:annotation>
-          <xs:documentation>Describes the method(s) to invoke when the component's state
-            changes.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:element ref="provides" minOccurs="0" maxOccurs="unbounded">
-        <xs:annotation>
-          <xs:documentation>Indicates the component provided service(s). By default, all implemented
-            interfaces are published.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:element ref="requires" minOccurs="0" maxOccurs="unbounded">
-        <xs:annotation>
-          <xs:documentation>Indicates the service requirements of the component.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:element ref="properties" minOccurs="0" maxOccurs="unbounded">
-        <xs:annotation>
-          <xs:documentation>Describes the properties of the component.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:element ref="controller" minOccurs="0" maxOccurs="1">
-        <xs:annotation>
-          <xs:documentation>Lifecycle controller for this component.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"
-      > </xs:any>
-    </xs:choice>
-    <xs:attribute name="name" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="public" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>Determines if the component type is public or private. A public factory
-          (default) can be used from any bundles.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="classname" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation>Specifies the implementation class of the component
-          type.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="architecture" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>Enables or disables the architecture exposition. By default, the
-          architecture is exposed. This allows instance introspection.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="immediate" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="factory-method" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="version" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Set the version of this component type</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="RequiresType">
-    <xs:annotation>
-      <xs:documentation>Description of component services requirements.</xs:documentation>
-    </xs:annotation>
-    <xs:complexContent>
-      <xs:extension base="ServiceDependencyType">
-        <xs:sequence minOccurs="0" maxOccurs="unbounded">
-          <xs:element name="callback" type="DependencyCallbackType">
             <xs:annotation>
-              <xs:documentation>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.</xs:documentation>
+                <xs:documentation>Set the version of this component type</xs:documentation>
             </xs:annotation>
-          </xs:element>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="RequiresType">
+        <xs:annotation>
+            <xs:documentation>Description of component services requirements.</xs:documentation>
+        </xs:annotation>
+        <xs:complexContent>
+            <xs:extension base="ServiceDependencyType">
+                <xs:sequence minOccurs="0" maxOccurs="unbounded">
+                    <xs:element name="callback" type="DependencyCallbackType">
+                        <xs:annotation>
+                            <xs:documentation>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.
+                            </xs:documentation>
+                        </xs:annotation>
+                    </xs:element>
+                </xs:sequence>
+
+                <xs:attribute name="interface" type="xs:string" use="prohibited">
+                    <xs:annotation>
+                        <xs:documentation>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'.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="field" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>The name of the field representing the service dependency in the
+                            implementation class.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="nullable" type="xs:boolean" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>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.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="default-implementation" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>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.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="from" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>Specific service provider. The dependency can only be fulfilled by the
+                            component with the matching name, or by the service with a matching
+                            PID.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="proxy" type="xs:boolean" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>Enables or Disable the proxy injection (on field
+                            injection)
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="scope" use="optional">
+                    <xs:simpleType>
+                        <xs:restriction base="xs:string">
+                            <xs:enumeration value="global"/>
+                            <xs:enumeration value="composite"/>
+                            <xs:enumeration value="composite+global"/>
+                        </xs:restriction>
+                    </xs:simpleType>
+                </xs:attribute>
+
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+    <xs:complexType name="DependencyCallbackType">
+        <xs:annotation>
+            <xs:documentation>Dependency callbacks are used to receive notification when service providers
+                arrive and leave.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="method" type="xs:string" use="required">
+            <xs:annotation>
+                <xs:documentation>Method to call</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="type" use="required">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+            <xs:simpleType>
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="bind"/>
+                    <xs:enumeration value="unbind"/>
+                    <xs:enumeration value="modified"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="CallbackType">
+        <xs:annotation>
+            <xs:documentation>Lifecycle Callback. Allows a POJO to be notified when the instance becomes
+                valid or invalid.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="method" type="xs:string" use="required">
+            <xs:annotation>
+                <xs:documentation>Specifies the method to call on the transition.</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="transition" use="required">
+            <xs:annotation>
+                <xs:documentation>Specifies the transition when the callback needs to be
+                    invoked.
+                </xs:documentation>
+            </xs:annotation>
+            <xs:simpleType>
+                <xs:annotation>
+                    <xs:documentation>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.
+                    </xs:documentation>
+                </xs:annotation>
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="validate"/>
+                    <xs:enumeration value="invalidate"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:element name="provides" type="ProvidesType" id="provides"/>
+    <xs:complexType name="ProvidesType">
+        <xs:annotation>
+            <xs:documentation>Provided service(s) description.</xs:documentation>
+        </xs:annotation>
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+            <xs:choice>
+                <xs:element name="property" type="PropertyType">
+                    <xs:annotation>
+                        <xs:documentation>List of service specific properties.</xs:documentation>
+                    </xs:annotation>
+                </xs:element>
+                <xs:element name="controller" minOccurs="0" maxOccurs="1" type="ServiceControllerType">
+                    <xs:annotation>
+                        <xs:documentation>Service Controller impacting the current provided
+                            service
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:element>
+            </xs:choice>
         </xs:sequence>
-
         <xs:attribute name="interface" type="xs:string" use="prohibited">
-          <xs:annotation>
-            <xs:documentation>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'.</xs:documentation>
-          </xs:annotation>
+            <xs:annotation>
+                <xs:documentation>Deprecated attribute, use 'specifications' instead of
+                    'interface'
+                </xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
+        <xs:attribute name="specifications" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>The list of service specifications (i.e. interfaces) to expose. By
+                    default, all interfaces implemented by the component implementation class are
+                    published.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="factory" type="xs:string" use="prohibited">
+            <xs:annotation>
+                <xs:documentation>Use 'strategy' instead of 'factory'</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="strategy" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>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
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="post-registration" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Defines a callback called after the service registration. The callback takes a
+                    ServiceReference
+                    as parameter
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="post-unregistration" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Defines a callback called after the service unregistration. The callback takes a
+                    ServiceReference
+                    as parameter
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="ServiceControllerType">
+        <xs:annotation>
+            <xs:documentation>Defines a service controller.</xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="field" type="xs:string" use="required">
+            <xs:annotation>
+                <xs:documentation>Field of the controller</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="value" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Intiail value of the controller</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="PropertyType">
+        <xs:annotation>
+            <xs:documentation>Defines a component property.</xs:documentation>
+        </xs:annotation>
         <xs:attribute name="field" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>The name of the field representing the service dependency in the
-              implementation class.</xs:documentation>
-          </xs:annotation>
+            <xs:annotation>
+                <xs:documentation>Field of the property</xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="nullable" type="xs:boolean" use="optional">
-          <xs:annotation>
-            <xs:documentation>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.</xs:documentation>
-          </xs:annotation>
+        <xs:attribute name="method" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Setter method of the property. This method is called to inject property
+                    value.
+                </xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="default-implementation" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>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.</xs:documentation>
-          </xs:annotation>
+        <xs:attribute name="name" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Name of the property.</xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="from" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>Specific service provider. The dependency can only be fulfilled by the
-              component with the matching name, or by the service with a matching
-              PID.</xs:documentation>
-          </xs:annotation>
+        <xs:attribute name="value" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Default value of the property.</xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="proxy" type="xs:boolean" use="optional">
-          <xs:annotation>
-            <xs:documentation>Enables or Disable the proxy injection (on field
-              injection)</xs:documentation>
-          </xs:annotation>
+        <xs:attribute name="type" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Type of the property.</xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="scope" use="optional">
-          <xs:simpleType>
-            <xs:restriction base="xs:string">
-              <xs:enumeration value="global"/>
-              <xs:enumeration value="composite"/>
-              <xs:enumeration value="composite+global"/>
-            </xs:restriction>
-          </xs:simpleType>
+        <xs:attribute name="mandatory" type="xs:boolean" use="optional" default="false">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="DependencyCallbackType">
-    <xs:annotation>
-      <xs:documentation>Dependency callbacks are used to receive notification when service providers
-        arrive and leave.</xs:documentation>
-    </xs:annotation>
-    <xs:attribute name="method" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation>Method to call</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="type" use="required">
-      <xs:annotation>
-        <xs:documentation> 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. </xs:documentation>
-      </xs:annotation>
-      <xs:simpleType>
-        <xs:restriction base="xs:string">
-          <xs:enumeration value="bind"/>
-          <xs:enumeration value="unbind"/>
-          <xs:enumeration value="modified"/>
-        </xs:restriction>
-      </xs:simpleType>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="CallbackType">
-    <xs:annotation>
-      <xs:documentation>Lifecycle Callback. Allows a POJO to be notified when the instance becomes
-        valid or invalid.</xs:documentation>
-    </xs:annotation>
-    <xs:attribute name="method" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation>Specifies the method to call on the transition.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="transition" use="required">
-      <xs:annotation>
-        <xs:documentation>Specifies the transition when the callback needs to be
-          invoked.</xs:documentation>
-      </xs:annotation>
-      <xs:simpleType>
+        <xs:attribute name="immutable" type="xs:boolean" use="optional" default="false">
+            <xs:annotation>
+                <xs:documentation>Set the property as immutable. An immutable property is inherited by the component
+                    instance but the value cannot be overridden.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:element name="callback" type="CallbackType" id="callback"/>
+    <xs:element name="controller" type="ControllerType" id="controller">
         <xs:annotation>
-          <xs:documentation>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.</xs:documentation>
+            <xs:documentation/>
         </xs:annotation>
-        <xs:restriction base="xs:string">
-          <xs:enumeration value="validate"/>
-          <xs:enumeration value="invalidate"/>
-        </xs:restriction>
-      </xs:simpleType>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:element name="provides" type="ProvidesType" id="provides"/>
-  <xs:complexType name="ProvidesType">
-    <xs:annotation>
-      <xs:documentation>Provided service(s) description.</xs:documentation>
-    </xs:annotation>
-    <xs:sequence minOccurs="0" maxOccurs="unbounded">
-      <xs:choice>
-      <xs:element name="property" type="PropertyType">
+    </xs:element>
+    <xs:element name="requires" type="RequiresType" id="requires"/>
+    <xs:element name="component" type="ComponentType" id="component"/>
+    <xs:element name="handler" type="HandlerType" id="handler"/>
+    <xs:element name="instance" type="InstanceType" id="instance"/>
+
+    <xs:element name="properties" type="PropertiesType" id="properties"/>
+    <xs:complexType name="PropertiesType">
         <xs:annotation>
-          <xs:documentation>List of service specific properties.</xs:documentation>
+            <xs:documentation>List of component, instance or service properties. This field will receive
+                the property value.
+            </xs:documentation>
         </xs:annotation>
-      </xs:element>
-      <xs:element name="controller" minOccurs="0" maxOccurs="1" type="ServiceControllerType">
-          <xs:annotation>
-            <xs:documentation>Service Controller impacting the current provided
-              service</xs:documentation>
-          </xs:annotation>
-       </xs:element>
-      </xs:choice>
-    </xs:sequence>
-    <xs:attribute name="interface" type="xs:string" use="prohibited">
-      <xs:annotation>
-        <xs:documentation>Deprecated attribute, use 'specifications' instead of
-          'interface'</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="specifications" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>The list of service specifications (i.e. interfaces) to expose. By
-          default, all interfaces implemented by the component implementation class are
-          published.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="factory" type="xs:string" use="prohibited">
-      <xs:annotation>
-        <xs:documentation>Use 'strategy' instead of 'factory'</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="strategy" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="post-registration" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Defines a callback called after the service registration. The callback takes a ServiceReference
-        as parameter</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="post-unregistration" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Defines a callback called after the service unregistration. The callback takes a ServiceReference
-        as parameter</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="ServiceControllerType">
-    <xs:annotation>
-      <xs:documentation> Defines a service controller. </xs:documentation>
-    </xs:annotation>
-    <xs:attribute name="field" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation> Field of the controller </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="value" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Intiail value of the controller </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="PropertyType">
-    <xs:annotation>
-      <xs:documentation> Defines a component property. </xs:documentation>
-    </xs:annotation>
-    <xs:attribute name="field" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Field of the property </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="method" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Setter method of the property. This method is called to inject property
-          value. </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="name" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Name of the property. </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="value" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Default value of the property. </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="type" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Type of the property. </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="mandatory" type="xs:boolean" use="optional" default="false">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:element name="callback" type="CallbackType" id="callback"/>
-  <xs:element name="controller" type="ControllerType" id="controller">
-    <xs:annotation>
-      <xs:documentation/>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="requires" type="RequiresType" id="requires"/>
-  <xs:element name="component" type="ComponentType" id="component"/>
-  <xs:element name="handler" type="HandlerType" id="handler"/>
-  <xs:element name="instance" type="InstanceType" id="instance"/>
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="property" type="PropertyType">
+                <xs:annotation>
+                    <xs:documentation>The list of properties.</xs:documentation>
+                </xs:annotation>
+            </xs:element>
+        </xs:sequence>
+        <xs:attribute name="propagation" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="pid" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Unique identifier used to reconfigure components properties (via Managed
+                    Services) with the Configuration Admin.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="updated" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Method called when a reconfiguration is done</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
 
-  <xs:element name="properties" type="PropertiesType" id="properties"/>
-  <xs:complexType name="PropertiesType">
-    <xs:annotation>
-      <xs:documentation>List of component, instance or service properties. This field will receive
-        the property value.</xs:documentation>
-    </xs:annotation>
-    <xs:sequence minOccurs="0" maxOccurs="unbounded">
-      <xs:element name="property" type="PropertyType">
+    <xs:complexType name="ServiceDependencyType">
+        <xs:attribute name="specification" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="optional" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>Sets the service dependency optionality</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="aggregate" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>Sets the service dependency cardinality.</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="policy" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+            <xs:simpleType>
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="dynamic"/>
+                    <xs:enumeration value="static"/>
+                    <xs:enumeration value="dynamic-priority"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="comparator" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="filter" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>LDAP filter used to filter providers</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="id" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>id of the service dependency. The id allows to indentify and to refert to
+                    this dependency.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+
+    <xs:complexType name="ControllerType">
         <xs:annotation>
-          <xs:documentation>The list of properties.</xs:documentation>
+            <xs:documentation>Specifies the lifecycle controller of a component, which allows to validate
+                or invalidate component instances.
+            </xs:documentation>
         </xs:annotation>
-      </xs:element>
-    </xs:sequence>
-    <xs:attribute name="propagation" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="pid" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Unique identifier used to reconfigure components properties (via Managed
-          Services) with the Configuration Admin.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="updated" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Method called when a reconfiguration is done</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-
-  <xs:complexType name="ServiceDependencyType">
-    <xs:attribute name="specification" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="optional" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>Sets the service dependency optionality</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="aggregate" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>Sets the service dependency cardinality.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="policy" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-      <xs:simpleType>
-        <xs:restriction base="xs:string">
-          <xs:enumeration value="dynamic"/>
-          <xs:enumeration value="static"/>
-          <xs:enumeration value="dynamic-priority"/>
-        </xs:restriction>
-      </xs:simpleType>
-    </xs:attribute>
-    <xs:attribute name="comparator" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="filter" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>LDAP filter used to filter providers</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="id" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>id of the service dependency. The id allows to indentify and to refert to
-          this dependency.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-
-  <xs:complexType name="ControllerType">
-    <xs:annotation>
-      <xs:documentation>Specifies the lifecycle controller of a component, which allows to validate
-        or invalidate component instances.</xs:documentation>
-    </xs:annotation>
-    <xs:attribute name="field" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
+        <xs:attribute name="field" type="xs:string" use="required">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
 </xs:schema>
diff --git a/ipojo/runtime/annotations/src/main/java/org/apache/felix/ipojo/annotations/Property.java b/ipojo/runtime/annotations/src/main/java/org/apache/felix/ipojo/annotations/Property.java
index 2c80de5..a5ba338 100644
--- a/ipojo/runtime/annotations/src/main/java/org/apache/felix/ipojo/annotations/Property.java
+++ b/ipojo/runtime/annotations/src/main/java/org/apache/felix/ipojo/annotations/Property.java
@@ -47,4 +47,10 @@
      */

     boolean mandatory() default false;

 

+    /**

+     * Is the property immutable?

+     * Default: false

+     */

+    boolean immutable() default false;

+

 }

diff --git a/ipojo/runtime/core/src/main/resources/core.xsd b/ipojo/runtime/core/src/main/resources/core.xsd
index 6046c8d..d7139db 100644
--- a/ipojo/runtime/core/src/main/resources/core.xsd
+++ b/ipojo/runtime/core/src/main/resources/core.xsd
@@ -1,602 +1,641 @@
 <!--
-  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.
--->
+  ~ 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.
+  -->
 <xs:schema elementFormDefault="qualified" targetNamespace="org.apache.felix.ipojo"
-  xmlns="org.apache.felix.ipojo" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:annotation>
-    <xs:documentation>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.</xs:documentation>
-  </xs:annotation>
-  <xs:element name="ipojo">
-    <xs:complexType>
-      <xs:annotation>
-        <xs:documentation>iPOJO top level element.</xs:documentation>
-      </xs:annotation>
-      <xs:choice minOccurs="0" maxOccurs="unbounded">
-        <xs:element ref="handler" minOccurs="0" maxOccurs="unbounded">
-          <xs:annotation>
-            <xs:documentation>The handler declarations.</xs:documentation>
-          </xs:annotation>
-        </xs:element>
-        <xs:element ref="instance" minOccurs="0" maxOccurs="unbounded">
-          <xs:annotation>
-            <xs:documentation>The instance declarations.</xs:documentation>
-          </xs:annotation>
-        </xs:element>
-        <xs:element ref="component" minOccurs="0" maxOccurs="unbounded">
-          <xs:annotation>
-            <xs:documentation>The component type declarations.</xs:documentation>
-          </xs:annotation>
-        </xs:element>
-        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"
-        > </xs:any>
-      </xs:choice>
-    </xs:complexType>
-  </xs:element>
-  <xs:complexType name="HandlerType">
+           xmlns="org.apache.felix.ipojo" xmlns:xs="http://www.w3.org/2001/XMLSchema">
     <xs:annotation>
-      <xs:documentation>Description of the handler.</xs:documentation>
+        <xs:documentation>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.
+        </xs:documentation>
     </xs:annotation>
-    <xs:complexContent>
-      <xs:extension base="RootElementType">
-        <xs:sequence maxOccurs="unbounded" minOccurs="0">
-          <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip"
-          > </xs:any>
-        </xs:sequence>
-        <xs:attribute name="classname" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation>The implementation class of the handler. The specified class must
-              implement (direcly or not) the "org.apache.felix.ipojo.Handler"
-              interface.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="name" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation>The name of the handler.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="namespace" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>The XML namespace of the handler.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="architecture" type="xs:boolean" use="optional" fixed="false">
-          <xs:annotation>
-            <xs:documentation>Enables or disables the architecture exposition. By default, the
-              architecture is not exposed. This allows handler introspection.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="level" type="xs:int" use="optional">
-          <xs:annotation>
-            <xs:documentation>The start level of the handler.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="InstanceType">
-    <xs:annotation>
-      <xs:documentation>Describes an instance of a component.</xs:documentation>
-    </xs:annotation>
-    <xs:complexContent>
-      <xs:extension base="RootElementType">
-        <xs:sequence minOccurs="0" maxOccurs="unbounded">
-          <xs:element name="property" type="InstancePropertyType">
+    <xs:element name="ipojo">
+        <xs:complexType>
             <xs:annotation>
-              <xs:documentation>The instance properties.</xs:documentation>
+                <xs:documentation>iPOJO top level element.</xs:documentation>
             </xs:annotation>
-          </xs:element>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+                <xs:element ref="handler" minOccurs="0" maxOccurs="unbounded">
+                    <xs:annotation>
+                        <xs:documentation>The handler declarations.</xs:documentation>
+                    </xs:annotation>
+                </xs:element>
+                <xs:element ref="instance" minOccurs="0" maxOccurs="unbounded">
+                    <xs:annotation>
+                        <xs:documentation>The instance declarations.</xs:documentation>
+                    </xs:annotation>
+                </xs:element>
+                <xs:element ref="component" minOccurs="0" maxOccurs="unbounded">
+                    <xs:annotation>
+                        <xs:documentation>The component type declarations.</xs:documentation>
+                    </xs:annotation>
+                </xs:element>
+                <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"
+                        ></xs:any>
+            </xs:choice>
+        </xs:complexType>
+    </xs:element>
+    <xs:complexType name="HandlerType">
+        <xs:annotation>
+            <xs:documentation>Description of the handler.</xs:documentation>
+        </xs:annotation>
+        <xs:complexContent>
+            <xs:extension base="RootElementType">
+                <xs:sequence maxOccurs="unbounded" minOccurs="0">
+                    <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip"
+                            ></xs:any>
+                </xs:sequence>
+                <xs:attribute name="classname" type="xs:string" use="required">
+                    <xs:annotation>
+                        <xs:documentation>The implementation class of the handler. The specified class must
+                            implement (direcly or not) the "org.apache.felix.ipojo.Handler"
+                            interface.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="name" type="xs:string" use="required">
+                    <xs:annotation>
+                        <xs:documentation>The name of the handler.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="namespace" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>The XML namespace of the handler.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="architecture" type="xs:boolean" use="optional" fixed="false">
+                    <xs:annotation>
+                        <xs:documentation>Enables or disables the architecture exposition. By default, the
+                            architecture is not exposed. This allows handler introspection.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="level" type="xs:int" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>The start level of the handler.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+    <xs:complexType name="InstanceType">
+        <xs:annotation>
+            <xs:documentation>Describes an instance of a component.</xs:documentation>
+        </xs:annotation>
+        <xs:complexContent>
+            <xs:extension base="RootElementType">
+                <xs:sequence minOccurs="0" maxOccurs="unbounded">
+                    <xs:element name="property" type="InstancePropertyType">
+                        <xs:annotation>
+                            <xs:documentation>The instance properties.</xs:documentation>
+                        </xs:annotation>
+                    </xs:element>
+                </xs:sequence>
+                <xs:attribute name="component" type="xs:string">
+                    <xs:annotation>
+                        <xs:documentation>The name of the instance component type.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="name" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>The (unique) name of the instance.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute name="version" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>The version of the factory to use.</xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+    <xs:complexType name="InstancePropertyType">
+        <xs:annotation>
+            <xs:documentation>Defines a property of an instance configuration.</xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="property" type="InstancePropertyType" minOccurs="0" maxOccurs="unbounded"/>
         </xs:sequence>
-        <xs:attribute name="component" type="xs:string">
-          <xs:annotation>
-            <xs:documentation>The name of the instance component type.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
         <xs:attribute name="name" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>The (unique) name of the instance.</xs:documentation>
-          </xs:annotation>
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="value" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Value of the property. Can be null for property containing other
+                    properties.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="type" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Type of the property, used to create the adequate object. Supported values
+                    are list, array, dictionary and map.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="RootElementType"/>
+    <xs:complexType name="ComponentType">
+        <xs:annotation>
+            <xs:documentation>Declares an atomic (i.e. primitive) component type.</xs:documentation>
+        </xs:annotation>
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="callback" minOccurs="0" maxOccurs="unbounded">
+                <xs:annotation>
+                    <xs:documentation>Describes the method(s) to invoke when the component's state
+                        changes.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:element>
+            <xs:element ref="provides" minOccurs="0" maxOccurs="unbounded">
+                <xs:annotation>
+                    <xs:documentation>Indicates the component provided service(s). By default, all implemented
+                        interfaces are published.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:element>
+            <xs:element ref="requires" minOccurs="0" maxOccurs="unbounded">
+                <xs:annotation>
+                    <xs:documentation>Indicates the service requirements of the component.</xs:documentation>
+                </xs:annotation>
+            </xs:element>
+            <xs:element ref="properties" minOccurs="0" maxOccurs="unbounded">
+                <xs:annotation>
+                    <xs:documentation>Describes the properties of the component.</xs:documentation>
+                </xs:annotation>
+            </xs:element>
+            <xs:element ref="controller" minOccurs="0" maxOccurs="1">
+                <xs:annotation>
+                    <xs:documentation>Lifecycle controller for this component.</xs:documentation>
+                </xs:annotation>
+            </xs:element>
+            <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"
+                    ></xs:any>
+        </xs:choice>
+        <xs:attribute name="name" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="public" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>Determines if the component type is public or private. A public factory
+                    (default) can be used from any bundles.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="classname" type="xs:string" use="required">
+            <xs:annotation>
+                <xs:documentation>Specifies the implementation class of the component
+                    type.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="architecture" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>Enables or disables the architecture exposition. By default, the
+                    architecture is exposed. This allows instance introspection.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="immediate" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="factory-method" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
         </xs:attribute>
         <xs:attribute name="version" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>The version of the factory to use.</xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="InstancePropertyType">
-    <xs:annotation>
-      <xs:documentation>Defines a property of an instance configuration.</xs:documentation>
-    </xs:annotation>
-    <xs:sequence>
-      <xs:element name="property" type="InstancePropertyType" minOccurs="0" maxOccurs="unbounded"/>
-    </xs:sequence>
-    <xs:attribute name="name" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="value" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Value of the property. Can be null for property containing other
-          properties.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="type" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Type of the property, used to create the adequate object. Supported values
-          are list, array, dictionary and map.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="RootElementType"/>
-  <xs:complexType name="ComponentType">
-    <xs:annotation>
-      <xs:documentation>Declares an atomic (i.e. primitive) component type.</xs:documentation>
-    </xs:annotation>
-    <xs:choice minOccurs="0" maxOccurs="unbounded">
-      <xs:element ref="callback" minOccurs="0" maxOccurs="unbounded">
-        <xs:annotation>
-          <xs:documentation>Describes the method(s) to invoke when the component's state
-            changes.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:element ref="provides" minOccurs="0" maxOccurs="unbounded">
-        <xs:annotation>
-          <xs:documentation>Indicates the component provided service(s). By default, all implemented
-            interfaces are published.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:element ref="requires" minOccurs="0" maxOccurs="unbounded">
-        <xs:annotation>
-          <xs:documentation>Indicates the service requirements of the component.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:element ref="properties" minOccurs="0" maxOccurs="unbounded">
-        <xs:annotation>
-          <xs:documentation>Describes the properties of the component.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:element ref="controller" minOccurs="0" maxOccurs="1">
-        <xs:annotation>
-          <xs:documentation>Lifecycle controller for this component.</xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"
-      > </xs:any>
-    </xs:choice>
-    <xs:attribute name="name" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="public" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>Determines if the component type is public or private. A public factory
-          (default) can be used from any bundles.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="classname" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation>Specifies the implementation class of the component
-          type.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="architecture" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>Enables or disables the architecture exposition. By default, the
-          architecture is exposed. This allows instance introspection.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="immediate" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="factory-method" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="version" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Set the version of this component type</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="RequiresType">
-    <xs:annotation>
-      <xs:documentation>Description of component services requirements.</xs:documentation>
-    </xs:annotation>
-    <xs:complexContent>
-      <xs:extension base="ServiceDependencyType">
-        <xs:sequence minOccurs="0" maxOccurs="unbounded">
-          <xs:element name="callback" type="DependencyCallbackType">
             <xs:annotation>
-              <xs:documentation>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.</xs:documentation>
+                <xs:documentation>Set the version of this component type</xs:documentation>
             </xs:annotation>
-          </xs:element>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="RequiresType">
+        <xs:annotation>
+            <xs:documentation>Description of component services requirements.</xs:documentation>
+        </xs:annotation>
+        <xs:complexContent>
+            <xs:extension base="ServiceDependencyType">
+                <xs:sequence minOccurs="0" maxOccurs="unbounded">
+                    <xs:element name="callback" type="DependencyCallbackType">
+                        <xs:annotation>
+                            <xs:documentation>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.
+                            </xs:documentation>
+                        </xs:annotation>
+                    </xs:element>
+                </xs:sequence>
+
+                <xs:attribute name="interface" type="xs:string" use="prohibited">
+                    <xs:annotation>
+                        <xs:documentation>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'.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="field" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>The name of the field representing the service dependency in the
+                            implementation class.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="nullable" type="xs:boolean" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>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.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="default-implementation" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>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.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="from" type="xs:string" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>Specific service provider. The dependency can only be fulfilled by the
+                            component with the matching name, or by the service with a matching
+                            PID.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="proxy" type="xs:boolean" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>Enables or Disable the proxy injection (on field
+                            injection)
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+
+                <xs:attribute name="scope" use="optional">
+                    <xs:simpleType>
+                        <xs:restriction base="xs:string">
+                            <xs:enumeration value="global"/>
+                            <xs:enumeration value="composite"/>
+                            <xs:enumeration value="composite+global"/>
+                        </xs:restriction>
+                    </xs:simpleType>
+                </xs:attribute>
+
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+    <xs:complexType name="DependencyCallbackType">
+        <xs:annotation>
+            <xs:documentation>Dependency callbacks are used to receive notification when service providers
+                arrive and leave.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="method" type="xs:string" use="required">
+            <xs:annotation>
+                <xs:documentation>Method to call</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="type" use="required">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+            <xs:simpleType>
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="bind"/>
+                    <xs:enumeration value="unbind"/>
+                    <xs:enumeration value="modified"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="CallbackType">
+        <xs:annotation>
+            <xs:documentation>Lifecycle Callback. Allows a POJO to be notified when the instance becomes
+                valid or invalid.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="method" type="xs:string" use="required">
+            <xs:annotation>
+                <xs:documentation>Specifies the method to call on the transition.</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="transition" use="required">
+            <xs:annotation>
+                <xs:documentation>Specifies the transition when the callback needs to be
+                    invoked.
+                </xs:documentation>
+            </xs:annotation>
+            <xs:simpleType>
+                <xs:annotation>
+                    <xs:documentation>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.
+                    </xs:documentation>
+                </xs:annotation>
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="validate"/>
+                    <xs:enumeration value="invalidate"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:element name="provides" type="ProvidesType" id="provides"/>
+    <xs:complexType name="ProvidesType">
+        <xs:annotation>
+            <xs:documentation>Provided service(s) description.</xs:documentation>
+        </xs:annotation>
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+            <xs:choice>
+                <xs:element name="property" type="PropertyType">
+                    <xs:annotation>
+                        <xs:documentation>List of service specific properties.</xs:documentation>
+                    </xs:annotation>
+                </xs:element>
+                <xs:element name="controller" minOccurs="0" maxOccurs="1" type="ServiceControllerType">
+                    <xs:annotation>
+                        <xs:documentation>Service Controller impacting the current provided
+                            service
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:element>
+            </xs:choice>
         </xs:sequence>
-
         <xs:attribute name="interface" type="xs:string" use="prohibited">
-          <xs:annotation>
-            <xs:documentation>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'.</xs:documentation>
-          </xs:annotation>
+            <xs:annotation>
+                <xs:documentation>Deprecated attribute, use 'specifications' instead of
+                    'interface'
+                </xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
+        <xs:attribute name="specifications" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>The list of service specifications (i.e. interfaces) to expose. By
+                    default, all interfaces implemented by the component implementation class are
+                    published.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="factory" type="xs:string" use="prohibited">
+            <xs:annotation>
+                <xs:documentation>Use 'strategy' instead of 'factory'</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="strategy" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>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
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="post-registration" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Defines a callback called after the service registration. The callback takes a
+                    ServiceReference
+                    as parameter
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="post-unregistration" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Defines a callback called after the service unregistration. The callback takes a
+                    ServiceReference
+                    as parameter
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="ServiceControllerType">
+        <xs:annotation>
+            <xs:documentation>Defines a service controller.</xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="field" type="xs:string" use="required">
+            <xs:annotation>
+                <xs:documentation>Field of the controller</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="value" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Intiail value of the controller</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="PropertyType">
+        <xs:annotation>
+            <xs:documentation>Defines a component property.</xs:documentation>
+        </xs:annotation>
         <xs:attribute name="field" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>The name of the field representing the service dependency in the
-              implementation class.</xs:documentation>
-          </xs:annotation>
+            <xs:annotation>
+                <xs:documentation>Field of the property</xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="constructor-parameter" type="xs:int" use="optional">
-          <xs:annotation>
-            <xs:documentation>The index of the parameter if the dependency is injected
-            using the constructor.</xs:documentation>
-          </xs:annotation>
+        <xs:attribute name="method" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Setter method of the property. This method is called to inject property
+                    value.
+                </xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="nullable" type="xs:boolean" use="optional">
-          <xs:annotation>
-            <xs:documentation>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.</xs:documentation>
-          </xs:annotation>
+        <xs:attribute name="name" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Name of the property.</xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="default-implementation" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>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.</xs:documentation>
-          </xs:annotation>
+        <xs:attribute name="value" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Default value of the property.</xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="from" type="xs:string" use="optional">
-          <xs:annotation>
-            <xs:documentation>Specific service provider. The dependency can only be fulfilled by the
-              component with the matching name, or by the service with a matching
-              PID.</xs:documentation>
-          </xs:annotation>
+        <xs:attribute name="type" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Type of the property.</xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="proxy" type="xs:boolean" use="optional">
-          <xs:annotation>
-            <xs:documentation>Enables or Disable the proxy injection (on field
-              injection)</xs:documentation>
-          </xs:annotation>
+        <xs:attribute name="mandatory" type="xs:boolean" use="optional" default="false">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-        <xs:attribute name="scope" use="optional">
-          <xs:simpleType>
-            <xs:restriction base="xs:string">
-              <xs:enumeration value="global"/>
-              <xs:enumeration value="composite"/>
-              <xs:enumeration value="composite+global"/>
-            </xs:restriction>
-          </xs:simpleType>
+        <xs:attribute name="immutable" type="xs:boolean" use="optional" default="false">
+            <xs:annotation>
+                <xs:documentation>Set the property as immutable. An immutable property is inherited by the component
+                    instance but the value cannot be overridden.
+                </xs:documentation>
+            </xs:annotation>
         </xs:attribute>
-
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="DependencyCallbackType">
-    <xs:annotation>
-      <xs:documentation>Dependency callbacks are used to receive notification when service providers
-        arrive and leave.</xs:documentation>
-    </xs:annotation>
-    <xs:attribute name="method" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation>Method to call</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="type" use="required">
-      <xs:annotation>
-        <xs:documentation> 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. </xs:documentation>
-      </xs:annotation>
-      <xs:simpleType>
-        <xs:restriction base="xs:string">
-          <xs:enumeration value="bind"/>
-          <xs:enumeration value="unbind"/>
-          <xs:enumeration value="modified"/>
-        </xs:restriction>
-      </xs:simpleType>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="CallbackType">
-    <xs:annotation>
-      <xs:documentation>Lifecycle Callback. Allows a POJO to be notified when the instance becomes
-        valid or invalid.</xs:documentation>
-    </xs:annotation>
-    <xs:attribute name="method" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation>Specifies the method to call on the transition.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="transition" use="required">
-      <xs:annotation>
-        <xs:documentation>Specifies the transition when the callback needs to be
-          invoked.</xs:documentation>
-      </xs:annotation>
-      <xs:simpleType>
+    </xs:complexType>
+    <xs:element name="callback" type="CallbackType" id="callback"/>
+    <xs:element name="controller" type="ControllerType" id="controller">
         <xs:annotation>
-          <xs:documentation>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.</xs:documentation>
+            <xs:documentation/>
         </xs:annotation>
-        <xs:restriction base="xs:string">
-          <xs:enumeration value="validate"/>
-          <xs:enumeration value="invalidate"/>
-        </xs:restriction>
-      </xs:simpleType>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:element name="provides" type="ProvidesType" id="provides"/>
-  <xs:complexType name="ProvidesType">
-    <xs:annotation>
-      <xs:documentation>Provided service(s) description.</xs:documentation>
-    </xs:annotation>
-    <xs:sequence minOccurs="0" maxOccurs="unbounded">
-      <xs:choice>
-      <xs:element name="property" type="PropertyType">
+    </xs:element>
+    <xs:element name="requires" type="RequiresType" id="requires"/>
+    <xs:element name="component" type="ComponentType" id="component"/>
+    <xs:element name="handler" type="HandlerType" id="handler"/>
+    <xs:element name="instance" type="InstanceType" id="instance"/>
+
+    <xs:element name="properties" type="PropertiesType" id="properties"/>
+    <xs:complexType name="PropertiesType">
         <xs:annotation>
-          <xs:documentation>List of service specific properties.</xs:documentation>
+            <xs:documentation>List of component, instance or service properties. This field will receive
+                the property value.
+            </xs:documentation>
         </xs:annotation>
-      </xs:element>
-      <xs:element name="controller" minOccurs="0" maxOccurs="1" type="ServiceControllerType">
-          <xs:annotation>
-            <xs:documentation>Service Controller impacting the current provided
-              service</xs:documentation>
-          </xs:annotation>
-       </xs:element>
-      </xs:choice>
-    </xs:sequence>
-    <xs:attribute name="interface" type="xs:string" use="prohibited">
-      <xs:annotation>
-        <xs:documentation>Deprecated attribute, use 'specifications' instead of
-          'interface'</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="specifications" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>The list of service specifications (i.e. interfaces) to expose. By
-          default, all interfaces implemented by the component implementation class are
-          published.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="factory" type="xs:string" use="prohibited">
-      <xs:annotation>
-        <xs:documentation>Use 'strategy' instead of 'factory'</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="strategy" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="post-registration" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Defines a callback called after the service registration. The callback takes a ServiceReference
-        as parameter</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="post-unregistration" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Defines a callback called after the service unregistration. The callback takes a ServiceReference
-        as parameter</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="ServiceControllerType">
-    <xs:annotation>
-      <xs:documentation> Defines a service controller. </xs:documentation>
-    </xs:annotation>
-    <xs:attribute name="field" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation> Field of the controller </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="value" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Intiail value of the controller </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="PropertyType">
-    <xs:annotation>
-      <xs:documentation> Defines a component property. </xs:documentation>
-    </xs:annotation>
-    <xs:attribute name="field" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Field of the property </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="method" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Setter method of the property. This method is called to inject property
-          value. </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-	<xs:attribute name="constructor-parameter" type="xs:int" use="optional">
-      <xs:annotation>
-        <xs:documentation>The index of the parameter if the property is injected
-        using the constructor.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="name" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Name of the property. </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="value" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Default value of the property. </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="type" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation> Type of the property. </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="mandatory" type="xs:boolean" use="optional" default="false">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:element name="callback" type="CallbackType" id="callback"/>
-  <xs:element name="controller" type="ControllerType" id="controller">
-    <xs:annotation>
-      <xs:documentation/>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="requires" type="RequiresType" id="requires"/>
-  <xs:element name="component" type="ComponentType" id="component"/>
-  <xs:element name="handler" type="HandlerType" id="handler"/>
-  <xs:element name="instance" type="InstanceType" id="instance"/>
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="property" type="PropertyType">
+                <xs:annotation>
+                    <xs:documentation>The list of properties.</xs:documentation>
+                </xs:annotation>
+            </xs:element>
+        </xs:sequence>
+        <xs:attribute name="propagation" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="pid" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Unique identifier used to reconfigure components properties (via Managed
+                    Services) with the Configuration Admin.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="updated" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>Method called when a reconfiguration is done</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
 
-  <xs:element name="properties" type="PropertiesType" id="properties"/>
-  <xs:complexType name="PropertiesType">
-    <xs:annotation>
-      <xs:documentation>List of component, instance or service properties. This field will receive
-        the property value.</xs:documentation>
-    </xs:annotation>
-    <xs:sequence minOccurs="0" maxOccurs="unbounded">
-      <xs:element name="property" type="PropertyType">
+    <xs:complexType name="ServiceDependencyType">
+        <xs:attribute name="specification" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="optional" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>Sets the service dependency optionality</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="aggregate" type="xs:boolean" use="optional">
+            <xs:annotation>
+                <xs:documentation>Sets the service dependency cardinality.</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="policy" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+            <xs:simpleType>
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="dynamic"/>
+                    <xs:enumeration value="static"/>
+                    <xs:enumeration value="dynamic-priority"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="comparator" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="filter" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>LDAP filter used to filter providers</xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="id" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>id of the service dependency. The id allows to indentify and to refert to
+                    this dependency.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+
+    <xs:complexType name="ControllerType">
         <xs:annotation>
-          <xs:documentation>The list of properties.</xs:documentation>
+            <xs:documentation>Specifies the lifecycle controller of a component, which allows to validate
+                or invalidate component instances.
+            </xs:documentation>
         </xs:annotation>
-      </xs:element>
-    </xs:sequence>
-    <xs:attribute name="propagation" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="pid" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Unique identifier used to reconfigure components properties (via Managed
-          Services) with the Configuration Admin.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="updated" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>Method called when a reconfiguration is done</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-
-  <xs:complexType name="ServiceDependencyType">
-    <xs:attribute name="specification" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="optional" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>Sets the service dependency optionality</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="aggregate" type="xs:boolean" use="optional">
-      <xs:annotation>
-        <xs:documentation>Sets the service dependency cardinality.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="policy" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-      <xs:simpleType>
-        <xs:restriction base="xs:string">
-          <xs:enumeration value="dynamic"/>
-          <xs:enumeration value="static"/>
-          <xs:enumeration value="dynamic-priority"/>
-        </xs:restriction>
-      </xs:simpleType>
-    </xs:attribute>
-    <xs:attribute name="comparator" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="filter" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>LDAP filter used to filter providers</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="id" type="xs:string" use="optional">
-      <xs:annotation>
-        <xs:documentation>id of the service dependency. The id allows to indentify and to refert to
-          this dependency.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-
-  <xs:complexType name="ControllerType">
-    <xs:annotation>
-      <xs:documentation>Specifies the lifecycle controller of a component, which allows to validate
-        or invalidate component instances.</xs:documentation>
-    </xs:annotation>
-    <xs:attribute name="field" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation>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.</xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
+        <xs:attribute name="field" type="xs:string" use="required">
+            <xs:annotation>
+                <xs:documentation>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.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
 </xs:schema>