我想获取当前的SlingRequest.getRequestURI()并将其传递给new LinkTransformer(links, repository, <<requestedUrl>>)
。所以我尝试添加注释@Reference SlingRequest slingRequest
,它会抛出异常。这是我的代码:
package com.my.transformer;
import com.my.transformer.impl.LinkTransformer;
import org.apache.felix.scr.annotations.*;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.rewriter.Transformer;
import org.apache.sling.rewriter.TransformerFactory;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.RepositoryException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
@Service(value = TransformerFactory.class)
@Component(immediate = true, metatype = true,
label="My Link Rewriter",
name= "com.my.transformer.LinkTransformerFactory",
description="Rewrite certain links")
public class LinkTransformerFactory implements TransformerFactory {
private static final Logger log = LoggerFactory.getLogger(LinkTransformerFactory.class);
@Property(
value = "mylinktransformer",
propertyPrivate = true)
static final String PIPELINE_TYPE = "pipeline.type";
@Property(unbounded= PropertyUnbounded.ARRAY,description="....")
private static final String LINKS = "links";
private ArrayList<String> links;
@Reference
SlingRepository repository;
@Activate
protected void activate(ComponentContext context)
throws RepositoryException {
final Dictionary<?, ?> properties = context.getProperties();
String[] prop = (String[])properties.get(LINKS);
links = new ArrayList<String>(Arrays.asList(prop));
log.info("LinkTransformerFactory.activate");
}
@Override
public Transformer createTransformer() {
return new LinkTransformer(links, repository);
}
}
谢谢
答案 0 :(得分:0)
您无法在TransformerFactory中获取它,但您不需要它将它提供给LinkTransformer。 Transformer将以init方法接收它。
Transformer的init方法收到ProcessingContext,你可以使用ProcessingContext.getRequest()来获取它