如何从saxon TransformerFactory获取SlingRequest

时间:2015-06-16 15:46:12

标签: java cq5 aem sling

我想获取当前的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);
        }
    }

谢谢

1 个答案:

答案 0 :(得分:0)

您无法在TransformerFactory中获取它,但您不需要它将它提供给LinkTransformer。 Transformer将以init方法接收它。

Transformer的init方法收到ProcessingContext,你可以使用ProcessingContext.getRequest()来获取它

相关问题