2015-09-11 3 views
1

Я пытаюсь закодировать пакет OSGi, который можно запустить с использованием нескольких конфигураций. Цель моего пакета - переписать статические ссылки в html и перенаправить его на URL-адрес CDN. Для этого я использую org.apache.sling.rewriter.Transformer.Конфигурации считывания OSGi

@Component(metatype = true, label = "CDN Link Rewriter", configurationFactory = true, immediate = true) 
@Service(value = TransformerFactory.class) 
public class LinkTransformer implements Transformer, 
    TransformerFactory { 

@Property(label = "Static URL Extensions", value = "js,jpg,png,css,gif") 
private static final String STATIC_FILES_EXTNS = "static_file_extn"; 

@Property(label = "Domain Path", value = "") 
private static final String DOMAIN_PATH = "domain_path"; 

@Property(label = "CDN Url prefix", value = "") 
private static final String CDN_URL_PREFIX = "cdn_url_prefix"; 

@Property(label = "Tags to check", value = "a,img,link,script") 
private static final String TAGS_TO_CHECK = "tags_to_check"; 

@Property(label = "Attributes to check", d value = "src,href") 
private static final String ATTRS_TO_CHECK = "attrs_to_check"; 

@Property(value = "append-version", propertyPrivate = true) 
private static final String PIPELINE_TYPE = "pipeline.type"; 

@Property(value = "global", propertyPrivate = true) 
private static final String PIPELINE_MODE = "pipeline.mode"; 

@Activate 
protected void activate(final Map<String, Object> props) { 

    this.update(props); 
} 

@Modified 
protected void update(final Map<String, Object> props) { 

} 
public LinkTransformer() { 

} 
@Override 
public void init(org.apache.sling.rewriter.ProcessingContext context, 
     org.apache.sling.rewriter.ProcessingComponentConfiguration config) 
     throws IOException { 

} 
@Override 
public final Transformer createTransformer() { 
    return new LinkTransformer(); 

} 
//some other methods 
} 

Проблема: я не могу получить доступ к своим конфигурациям в своем комплекте. Я могу создать несколько наборов конфигураций в консоли Felix. Но метод @Activate вызывается только во время установки пакета. Во время активации преобразования ссылок вызывается только метод init(). Следовательно, я не могу получить конфигурации. Может ли кто-нибудь сказать мне, как получить конфигурации?

ответ

1

Проблема с описанным выше подходом реализует различные интерфейсы в одном классе. Спасибо @Balazs Zsoldos, вы можете проверить ответ here

Здесь все, что мне нужно было сделать, это развить Трансформатор и Трансформатор.

@Component(configurationFactory = true, metatype = true, policy = ConfigurationPolicy.REQUIRE, label = "CDN Link Rewriter", description = "Rewrites links to all static files to use configurable CDN") 
@Service(value = TransformerFactory.class) 
public class StaticLinkTransformerFactory implements TransformerFactory { 

//all property declarations as in question 
private Map<String, Object> map; 
@Activate 
void activate(Map<String, Object> map) { 
    this.map = map; 
} 
@Override 
public Transformer createTransformer() { 
    return new StaticLinkTransformer(map); 
} 
} 

StaticLinkTransformer может быть реализован в виде обычного класса Java без каких-либо компонентов или услуг аннотаций.

Смежные вопросы