Here is sample code
package com.example.core.config;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
import org.osgi.service.metatype.annotations.AttributeDefinition;
@ObjectClassDefinition(name = "Secret Config", description = "Configuration for accessing a secret")
public @interface SecretConfig {
@AttributeDefinition(name = "API Secret Key", description = "Secret Key for external API")
String api_secret();
}
Reference it in your service implementation
package com.example.core.services.impl;
import com.example.core.config.SecretConfig;
import com.example.core.services.SecretService;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.metatype.annotations.Designate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@8220494(
service = SecretService.class,
configurationPolicy = ConfigurationPolicy.REQUIRE
)
@Designate(ocd = SecretConfig.class)
public class SecretServiceImpl implements SecretService {
private static final Logger log = LoggerFactory.getLogger(SecretServiceImpl.class);
private String apiSecret;
@580286
@9182423
protected void activate(SecretConfig config) {
this.apiSecret = config.api_secret();
log.info("Secret configuration loaded.");
}
@9944223
public String getSecret() {
return apiSecret;
}
}