Hi,
I tried to execute your code in my local (in your original post) and I was able to reproduce your issue of service Object being null.
When I changed the service name in my Impl Class, it works. Adding the complete snippet for your reference.
(in Pojo class, I added a getter for addressApi for testing the value entered via OSGI config)
AppConfig.Java
@ObjectClassDefinition(name = "Sprint2AEM - Application Configuration", description = "This contains all application configuration")
public @interface AppConfig {
@AttributeDefinition(name = "address.api",description = "Domain",type = AttributeType.STRING)
String getAddressApi() default "";
}
ApplicationConfiguration.java:
public interface ApplicationConfiguration {
public String getAddressApi();
}
ApplicationConfigurationImpl.java:
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.metatype.annotations.Designate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component(service = ApplicationConfiguration.class,immediate = true)
@Designate(ocd = AppConfig.class)
public class ApplicationConfigurationImpl implements ApplicationConfiguration{
private static final Logger LOG = LoggerFactory.getLogger(ApplicationConfigurationImpl.class);
private String addressApi;
@Activate
@Modified
private void activate(AppConfig appConfig){
this.addressApi = appConfig.getAddressApi();
}
@Override
public String getAddressApi() {
return addressApi;
}
}
ComponentApi.java(Extending WCMUsePojo)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.cq.sightly.WCMUsePojo;
public class ComponentApi extends WCMUsePojo{
private static final Logger LOG = LoggerFactory.getLogger(ComponentApi.class);
private String apiUrl="";
private String addressApi;
@Override
public void activate() throws Exception {
ApplicationConfiguration applicationConfiguration = getSlingScriptHelper().getService(ApplicationConfiguration.class);
LOG.info("App configuration Service Object Test=="+applicationConfiguration);
addressApi = applicationConfiguration.getAddressApi();
//apiUrl = addressApi + get("apiUrl", String.class);
}
public String getAddressApi() { return addressApi; }
public String getApiUrl() { return apiUrl; }
}
HTL Code:
<h3>Hello World component - Testing OSGI config and Service reference from WCMUsePojo</h3>
<div data-sly-use.obj="com.aem.learnings.core.ComponentApi">
${obj.addressApi ? obj.addressApi : "Not from pojo/OSGI Config"}
</div>
Screenshots:

