Create Custom OSGI Configuration in AEM

OSGI (Open Service Gateway Initiative) is a major building block in aem architecture whichĀ makes it modular. In AEM, there is a common need of creatingĀ custom OSGi configuration. These Configurations can be a single value,multi-value,drop down list and check box like property.

In this tutorialĀ i have tried to coverĀ all the available options for creating custom OSGi configuration in aem.

  • How to Set and Get OSGIĀ configuration values using Text Field.
  • How to Set and Get OSGIĀ configuration values using Drop Down List.
  • How to Set and Get OSGIĀ configuration values using Check Box.
  • How to Set and Get OSGIĀ configuration values using Multi Field.

Set and Get OSGIĀ configuration values using Textfield:

When user wants to get and set single value in osgi configuration, Text Field is preferred.

Setting Values:

@Property(label="Name of the Author",value = "author")
@Property(label="Age of the Author",intValue = 15)

Getting Values:

private static final String AUTHOR_NAME = "author.value";
private static final String AUTHOR_AGE = "author.age"; 
  • value: This property indicates default value of the configuration.
  • intValue : If you want to take only integer value ,use this property to set default value.

Note:- @Property annotation helps us to define the properties in felix console.

Set and Get OSGIĀ configuration values using Drop Down List:

Drop Down list is a very common requirement that a developer encounters, when customer wants to display list of countries, states, gender etc to choose from felix console.

Note:- User can add as many options in the list , but select only once at a time.

Setting Values:

    label = "Author Gender",
    description = "Describe Author Gender",
    options = {
        @PropertyOption(name = "Male", value = "1. Male"),
        @PropertyOption(name = "Female", value = "2. Female")
    value = "Female")

Getting Values:

private static final String AUTHOR_GENDER = "author.gender";

Set and Get OSGIĀ configuration values using CheckBox :

Check Box is a good solution when number of options are limited, and customers wants to select single or multiple values from felix console.

Note:- The Value of this property is boolean ,we can set default value by the attribute boolValue.

Setting Values:

@Property(label = "CheckBox Property " ,boolValue = false,description = "please Check the Property")

Getting Values:

public static final String CHECKBOX_PROPERTY = "";

Set and Get OSGIĀ configuration values using Multi-Field :

Multifield Components is the most preffered component by developers when their is a requirement of creating a custom configuration which consist dynamic number of fields. We can add as many values in it as per our requirement

 @Property(value={"English", "Hindi"}, unbounded = PropertyUnbounded.ARRAY, label = "Subjects", cardinality = 50, description = "Example for Multi field config")
private static final String MULTI_FIELD = "multifield"; 

Now in order to fetch the values we requireĀ two methods:

  1. Activate: This method is called only once when the bundle is activated.
  2. Modified: When we made the changes in our configurations, then we need to fetch the values from this method because the bundle is already activated.
protected void activate(@SuppressWarnings("rawtypes") final Map context) { = PropertiesUtil.toString(context.get(AUTHOR_NAME), "");
    this.gender = PropertiesUtil.toString(context.get(AUTHOR_GENDER),"");
    this.checkbox = PropertiesUtil.toBoolean(context.get(CHECKBOX_PROPERTY),true);
    this.multiString = PropertiesUtil.toStringArray(context.get(MULTI_FIELD));
    this.age = PropertiesUtil.toInteger(context.get(AUTHOR_AGE),12);

protected void modified(ComponentContext context){ = PropertiesUtil.toString(
        context.getProperties().get(AUTHOR_NAME), "");
    this.gender = PropertiesUtil.toString(
        context.getProperties().get(AUTHOR_GENDER), "");
    this.checkbox = PropertiesUtil.toBoolean(
            context.getProperties().get(CHECKBOX_PROPERTY), true);
     this.multiString = PropertiesUtil.toStringArray(
    this.age = PropertiesUtil.toInteger(

Testing OSGI Configurations:

  • Go to Felix Console.
  • Select the bundle that you want to Verify or Configure.

custom osgi confiuration aem set and get values

You can find the complete code here.

Spread the love

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.