OSGi Service Platform Release 4 Errata

Version 4.3

The Provide-Capability manifest header is incorrectly called Provided-Capability. The correct name is Provide-Capability.

The resolution directive is incorrectly called resolve. The correct name is resolution.
The ordering of items in the returned list is updated to state that dynamically established wires are added to the end of the list in the order they are established.

In step 4, the bundle class loader must throw a Class Format Error. There is no Class Format Exception.

Http Service

The URL example is missing the ? before the query string. The correct URL is http://www.acme.com/servlet?name=bugs. 

Declarative Services

The signature of the updated method in the the source example is not valid. The example should be corrected to:
void updatedLog( LogService l, Map<String,?> ref )
It is incorrectly stated that the Reference annotation will use the full method name as the default reference name. This is corrected to state that the default reference name is based upon the name of the method being annotated. If the method name begins with bindset or add, that prefix is removed.

DMT Admin

The exception code for failing attempts to set complex values to interior nodes that do not support complex values is incorrectly stated as COMMAND_NOT_ALLOWED. The correct code is FEATURE_NOT_SUPPORTED.

The description of the DYNAMIC scope has the incorrect text “This this not”. This is corrected to “This does not”.

In table 117.3, the description of method getNodeSize() is incorrect. The correct description is:
Must throw a DmtException COMMAND_NOT_ALLOWED
The bullet point discussing that the plugin root must be compatible with the corresponding parent’s mount point is clarified to further state: “When a Parent Plugin is available, the plugin root must match exactly to the absolute URI of the parent’s mount point.”

The general event property for the Bundle-SymbolicName is incorrectly called bundle.symbolicname. The correct name is bundle.symbolicName.

The paragraph is replaced with: “All session events must have the properties defined in Event Properties for Session Event on page 324.”

The paragraph is replaced with: “All life cycle events must have the properties defined in Event Properties for Life Cycle Events on page 324.”

In table 117.10, the descriptions of exception.message and exception.class incorrectly include the text “or timed out”. That text is removed.

The description of Figure 117.22 is corrected to state that the SESSION_OPENED event is published when the Dmt Session is opened. The remaining events are published when the Dmt Session is closed.
The description for throwing DmtException with code NODE_NOT_FOUND is changed to:
if the node does not exist
The description of the topic parameter is incorrect. The correct description is:

the topic of the event to send. Valid values are:

  • org/osgi/service/dmt/DmtEvent/ADDED if the change was caused by a add action
  • org/osgi/service/dmt/DmtEvent/DELETED if the change was caused by a delete action
  • org/osgi/service/dmt/DmtEvent/REPLACED if the change was caused by a replace action

Monitor Admin

The event topic name is incorrectly stated as org/osgi/service/monitor. The correct value is org/osgi/service/monitor/MonitorEvent.

The maximum length of the pid is incorrectly stated as 20. The maximum length is 32 as stated in 119.2.

TR069 Connector

The MIME type in the fourth paragraph is incorrectly stated as application/x-tr-68-eager. The correct MIME type is application/x-tr-69-eager.

The final sentence, “The addObject(String) method does not require an atomic session”, is incorrect. It must be replaced with “The addObject(String) method requires an atomic session. If a non-atomic session is used then the addObject(String) must not attempt to create any objects and an exception must be thrown.”
The following text is added to the method description: 
If this is a table path, the method specifies whether or not AddObject would be successful. If the parameter path points to a table instance, the method specifies whether or not DeleteObject would be successful.
TR069_BOOLEAN is added as a valid argument for the type parameter.


FaultType and FaultMessage are incorrectly listed as mandatory. They are optional and the correct cardinality is 0,1.

The type of LastModified is incorrectly listed as dateTime. It is corrected to date_time.

The type of the list elements of Filter/ResultUriList is corrected to be string. It was incorrectly listed as node_uri.

The type of Time is incorrectly listed as dateTime. It is corrected to date_time.

In table 2.4, the description of Wires/[String]/[list] incorrectly refers to a non-existent osgi.wiring.service namespace. The text is changed to refer to the osgi.wiring.rmt.service namespace.

In table 2.4, the type of LastModified is incorrectly listed as datetime. It is corrected to date_time.

In the paragraph after the description of wild cards, it is incorrectly stated that the Target node is a virtual sub-tree. The description is corrected to state that the Result node is a virtual sub-tree.

In table 2.7, the type of the list elements of ResultUriList is corrected to be string. It was incorrectly listed as node_uri.

In table 2.7, the Target element description is corrected to state that it is an absolute URI and the Result element description is corrected to remove the reference to the Target element containing a relative URI. The Result element acts as a parent node instead of the session root for each node in N.

In table 2.8, the description of StartLevel incorrectly refers to Bundle Start Level. The correct referral is to Framework Start Level.

In table 2.10, the description of Directive is corrected to be “The Directives for this capability”.

In table 2.13, the type of Time is incorrectly listed as datetime. It is corrected to date_time.

TR-157 Amendment 3 Software Module Guidelines specification is missing a specification version number. It is Version 1.0.

Version 4.2


In figure 4.28, the edge from RESOLVED to UNINSTALLED should not be present. When uninstalling a bundle, the bundle must transition through the INSTALLED state on the way to the UNINSTALLED state.

In table 4.3, the description of the processor names ia64n and ia64w are reversed. ia64n is 32-bit and ia64w is 64-bit.

FrameworkEvent.STARTLEVEL_CHANGED is incorrectly spelled as START_LEVEL_CHANGED.

Http Service

The URL example is missing the ? before the query string. The correct URL is http://www.acme.com/servlet?name=bugs.

Configuration Admin

org.osgi.framework.Constants.SERVICE_PID is incorrectly spelled as SERVICE.PID.

Event Admin

First code example handles the InterruptedException incorrectly. It must return in the catch block, not ignore the interrupt because the interrupt flag is cleared before the catch block.

Deployment Admin Specification

A missing step is added after step 3: Process the localization files, see Localization.

Monitor Admin

The maximum length of the pid is incorrectly stated as 20. The maximum length is 32 as stated in 119.2.


Two examples incorrectly use “value” attributes instead of “ref” attributes to refer to other beans.

The sentence “User code that causes a dynamic cycle by recursively calling the getComponentInstance method must be detected and cause a failure, these cycles cannot be broken.” is deleted.

In the steps describing how Blueprint Containers are destroyed when the Blueprint extender is stopped, the first bullet in step 3 is changed to: “The registered service that is in use with the lowest ranking number, or if a tie”.

It was stated that overloaded property set methods must not be used. This is relaxed. The sentence now reads: “There should only be one set method with a single argument for a specific property. If overloaded properties are encountered, the chosen set method is unspecified.”

A service manager can get component instances for its service properties while its explicit dependencies are not yet activated. A service manager must therefore activate its explicit dependencies at the beginning of the service registration phase. This does not have to cause the activation of the service manager itself. This change affects several sections of the specification.
121.2 Added that an explicit dependency on a service manager is now also a trigger.
121.2.3 Indicated service managers activate their dependencies always eagerly now.
121.2.4 Made the timing of the explicit dependency activation manager type specific. Step 10: Indicated that explicit dependencies must be activated for a service manager before any other activity.
121.3.6 Made it explicit that service reference managers do not activate dependencies until they are activated.
121.3.8 Indicated the activation of explicit dependencies.
121.3.13 Indicated that an explicit dependency on a service manager is now eager.
121.4.9 Indicated that explicit dependency activation is in general before activation but can be overridden on a per manager type basis.
121.6.1 Table 121.5: Changed the text of depends-on to indicate the earlier time of dependency activation.
121.6 Added new section (121.6.3) outlining the exception of initializing the dependencies early.

Note: A reference manager is unchanged. It must delay activation of its explicit dependencies until it is activated because activation in the tracking references phase would create components before the grace period. And a reference manager can currently have no implicit dependencies except for the listeners that are initialized when the reference manager is activated, so the general rule to activate explicit dependencies before activation should apply.

Cycles must be broken when a breaking manager can be found, where a breaking manager can be a singleton or a prototype bean. However, a prototype bean can never be a breaking manager because it must always return a new object. Breaking managers must therefore always be a singleton. This implies that self injection for a prototype bean cannot work because the cycle does not contain a singleton breaking manager.

(was 121.6.5) “Service properties creation can have side effects because they can use component instances. The service properties must therefore be created once before the first time the first time the service is registered.” is added to the end of the first paragraph.

Table 121.9 is referenced incorrectly. The correct reference is to table 121.10.

In table 121.11, the second bind-method in the first column should be unbind-method.

In table 121.14, the type element row, indicates that it will return the collection’s value type if available. This is wrong, null must be returned when not set and the collection’s value type must be obtained through the appropriate Collection Metadata.

The scope attribute of the Tinlined-bean type is changed to remove


The definition of the Tscope type is changed to:
<xsd:simpleType name="Tscope">
            <xsd:restriction base="xsd:NMTOKEN">
                <xsd:enumeration value="singleton" />
                <xsd:enumeration value="prototype" />
            <xsd:restriction base="xsd:QName">
                <xsd:pattern value=".+:.+" />
It is suggested to use the use of the getAccessControlContext method of Conditional Permission Admin to get a proper Access Control Context for a bundle. However, this method is only suited if signatures are known and is not suitable for getting an Access Control Context for a bundle. The proper solution is to create an Access Control Context that uses a custom ProtectionDomain. This section also failed to list the permissions required by a Blueprint bundle. A Blueprint bundle must have ServicePermission(…BlueprintContainer,[REGISTER]) in addition to any other permissions required by its code. and
The dependencies parameter is optional for event type FAILURE. That is, for event type FAILURE, the dependencies parameter may be null.

The description of the return value of the getScope method is updated to add: “Returns null if the scope has not been explicitly specified in the bean definition.”

JMX Management Model

Incorrectly refers to the PROPERTIES item which does not exist.
The correct value of the field PERSISTENTLY_STARTED is PersistentlyStarted. It was incorrectly spelled PeristentlyStarted.
The correct type of the item described by BUNDLE_IN_ERROR_LOCATION_ITEM is SimpleType.STRING.
The description of the bundleIdentifiers parameter is changed to specify that an argument of null can be used for all bundles with packages pending removal.
The description of the bundleIdentifiers parameter is changed to specify that an argument of null can be used for all unresolved bundles.
The PROPERTIES field does not exist and is deleted.
The PROPERTIES_ITEM field does not exist and is deleted.
Incorrectly refers to the PROPERTIES item which does not exist.
The createRole method was specified in error and is deprecated. It does not function and must not be used. Use either createUser or createGroup. Implementations of the createRole method will throw an exception.

JNDI Services Specification

The syntax for a service/serviceList URL lookup allowed JNDI names to be mixed with filters. This caused confusion because JNDI names have no syntax. The URL scheme grammar is changed to only allow filters on fqns.
service ::= ’osgi:service/’ query
query ::= jndi-name | fqn ( ’/’ filter )?
jndi-name ::= <any string>

servicelist ::= ’osgi:servicelist/’ query?
This states “Service ranking order is achieved by sorting on ascending service.ranking service property and then descending service.id property.” The intention was to then pick the last element but this was not clearly stated. The wording is changed to follow the Core Specification’s definition in table 5.2. “If multiple qualifying service interfaces exist, a service with the highest SERVICE_RANKING number, or when equal to the lowest SERVICE_ID, determines which service object is returned by the Framework.”

JPA Service Specification

To correct the incorrect use of some terms, this section is replaced with:

“In this specification, the Entity Manager Factory service is only registered when the Persistence Unit is complete and a matching Data Source Factory service is available. However, the API of the Entity Manager Factory Builder allows the creation of an Entity Manager Factory with configuration properties. Those configuration properties could contain the JDBC properties to bind to another Data Source Factory service than it had already selected.

This case must not be supported by a JPA Provider, an Illegal Argument Exception must be thrown. If such a case would be supported then the life cycle of the Entity Manager Factory service would still be bound to the first Data Source Factory. There would be no way for the JPA Provider to signal to the Client Bundle that the returned Entity Manager Factory is no longer valid because the rebound Data Source Factory was unregistered.

Therefore, when an Entity Manager Factory is being created using the Entity Manager Factory Builder, a JPA Provider must verify that the new properties are compatible with the properties of the already created Entity Manager Factory. If no, then an Exception must be thrown. If they are compatible, then an instance of the previous Entity Manager Factory should be returned.”

Web Applications Specification

Incorrectly says ampersand (’?’). This is changed to ampersand (’&’).

128.4.1 and 128.4.2
Examples use Bundle-SymoblicName which is misspelled. The examples are changed to use Bundle-SymbolicName.

Incorrectly says WEB-INF/classes/. This is changed to WEB-INF/classes (no trailing slash).

The description of collision.bundles is corrected to: “(Collection<Long>) If a name collision occurred, a collection of bundle ids that all have the same value for the Web-ContextPath manifest header.”


Table 1.1 incorrectly refers to Auto Configuration Specification and Application Admin Specification which are not included in the Enterprise Specification.

 Version 4.1

Fragments During Runtime. Erroneously specified that fragments could become unresolved due to calling resolveBundles
Steps 4 and 7 are updated to reflect lazy activation.
  1. If this bundle’s state is not STARTING or ACTIVE then this method returns immediately.
  1. If this bundle’s state was ACTIVE prior to setting the state to STOPPING, the stop method of this bundle’s BundleActivator, if one is specified, is called. If that method throws an exception, this method must continue to stop this bundle and a BundleException must be thrown after completion of the remaining steps.
The source of the PACKAGE_REFRESHEDSTARTED and STARTLEVEL_CHANGEDFrameworkEvent types is the System Bundle.

The following step was incorrectly added to the specification and has been removed.
  • A Configuration Event CM_UPDATED is send asynchronously out to all registered Configuration Listener services.
A Configuration Event CM_UPDATED in only sent when a Configuration is updated. No Configuration Event is sent when a Configuration is created.

In the XML Schema, the property type of Character is incorrectly listed at Char.

Table 113.23 contains a misspelling of EXCEPTION_CLASS. Also, the notes for EXCEPTION_CLASS and EXCEPTION_MESSAGE are reversed.

The code example has some minor bugs in it. EventConstants.EVENT_TOPIC should not be in the topics array and the key used for putting the topics array in the hashtable should be EventConstants.EVENT_TOPIC.

The Measurement compendium specification talks about a String constructor for the Measurement class. This constructor does not exist.

 Version 4.0

The following errata from the original version of the R4 Core and Compendium specifications have been corrected in the Version 4.0.1 documents.

The bullet on signed bundles incorrectly refers to Package Admin. It should refer to Permission Admin.
The paragraph incorrectly refers to a Bundle-Location header. It should refer to the Bundle-Localization header.

Additional execution environment names have been defined for Java 2 SE 5.0 and Java SE 6.0. They are J2SE-1.5 and JavaSE-1.6, respectively.

The description of the exclude directive incorrectly refers to resources. Only classes may be excluded or included.

The section should state that a Framework that supports Require-Bundle and/or fragments must also support Bundle Permission.

The framework may resolve a bundle during the execution of Bundle.findEntries.

The framework must not call the constructor of a BundleActivator object from within a doPrivileged region.

In the example code, the fields EMPTY_CS and EMPTY_PS should be arrays
ConditionInfo[] EMPTY_CS = new ConditionInfo[0];
PermissionInfo[] EMPTY_PS = new PermissionInfo[0];
The format of a property name should be symbolic-name. It is incorrectly stated as “must be”. While it is recommended that property names conform to symbolic-name, they can be any valid String.

A property name is now recommended to conform to symbolic-name. It is incorrectly stated to be defined as unique-name.

Package in class diagram must be org.osgi.service.metatype, not org.osgi.service.metatyping

Example printing of metatypes contains syntax errors

Example MetaData element twice and incorrect. Should be merged and use default namespace

The content attribute of the Attribute element is not required and is changed to be optional. The bundle attribute of the Designate element is not required and is changed to be optional. A Value element is added as a child of the Attribute element to allow multiple values for an Attribute.
<complexType name="Attribute">
		<element name="Value" type="string" minOccurs="0"
			maxOccurs="unbounded" />
	<attribute name="adref" type="string" use="required" />
	<attribute name="content" type="string" use="optional" />
The component description in the example code does not properly define the event.topics property so that the value is a String array as required by the Event Admin specification. The property element should be: 
<property name="event.topics">some/topic</property>
112.4.3, 112.10
The component elemement of the component description shows the subelements occuring in the following order: implementation, properties/property, service, reference. This ordering is also specified in the XML schema. SCR must not require component descriptions to specify the elements in the order listed above and as required by the XML schema. SCR must allow other orderings since arbitrary orderings of these elements do not affect the meaning of the component description. Only the relative ordering of property and properties element have meaning.

Example uses EVENT_TOPICS instead of EVENT_TOPIC. The example with AcmeWatchDog must extend BundleActivator, not Activator

Timer example should have Calendar.MINUTE and Calendar.HOUR (they are now spelled with an extra S)
Event Handlers which do not have a value for the event.topics property must not receive events.
The constant name EXCEPTION_CLASS was released with an incorrect spelling. This error will be corrected in the next release and the incorrectly spelled constant name EXECPTION_CLASS will be deprecated.

The getLocalizedMessage method is incorrectly listed under java.lang.Thread. It should be listed under java.lang.Throwable.

Note: The errata for the OSGi Specifications is made available under the OSGi Specification License, Version 1.0.