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>