如何在吊索重写管道中配置变压器?

时间:2019-07-23 09:28:30

标签: osgi aem saxparser osgi-bundle sling

我想为我们站点上的每个<a>标签设置目标,但我没有编辑组件,而是编写了一个转换器。如何配置?

我们已经有一个变压器和相应的工厂。该工厂的管道类型为content-fragments,并根据documentation在配置文件中注册:

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
          jcr:primaryType="nt:unstructured"
          contentTypes="text/html"
          enabled="{Boolean}true"
          generatorType="htmlparser"
          order="1000"
          paths="[/content]"
          serializerType="htmlwriter"
          transformerTypes="[link-transformer,content-fragments,linkchecker]">
    <generator-htmlparser
        jcr:primaryType="nt:unstructured"
        includeTags="[A]"/>
</jcr:root>

我都尝试为新的转换器赋予相同的管道类型和新的管道类型linktransformer,并尝试了以下每种组合:

  • transformerTypes="[link-transformer, content-fragments,linkchecker]"
  • transformerTypes="[content-fragments,linkchecker]"

该配置在Sling Rewriter Console中处于活动状态:

Configuration content-fragments-rewrite

Name : content-fragments-rewrite
Content Types : [text/html]
Paths : [/content]
Order : 1000
Active : true
Valid : true
Process Error Response : true
Pipeline : 
    Generator : 
        htmlparser : {includeTags=[Ljava.lang.String;@23d079e2}
    Transformers : 
        link-transformer
        content-fragments
        linkchecker
    Serializer : 
        htmlwriter

,但是管道都不会在发布者或作者实例上转换HTML。

这是旧的变压器:

@Component(
    property = "pipeline.type=" + ContentFragmentLinkTransformerFactory.PIPELINE_TYPE,
    service = TransformerFactory.class
)
public class ContentFragmentLinkTransformerFactory implements TransformerFactory {

    public static final String PIPELINE_TYPE = "content-fragments";

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

}

和新的:

@Component(
    property = "pipeline.type=" + LinkTransformerFactory.PIPELINE_TYPE,
    service = TransformerFactory.class
)
public class LinkTransformerFactory implements TransformerFactory {

    public static final String PIPELINE_TYPE = "link-transformer";

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

}

我在createTransforemer()方法和转换器的startElement()方法中都设置了断点,但是在这两个实例上,调试时程序都不会暂停。 我还尝试添加一个Activate方法,在其中放置一个断点,使程序确实确实按预期停止了。

我希望转换器能够转换发布者的HTML。

1 个答案:

答案 0 :(得分:1)

我们的问题是,我们有另一个具有更高order的重写器配置:

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
    jcr:primaryType="nt:unstructured"
    contentTypes="[text/html]"
    enabled="{Boolean}true"
    generatorType="htmlparser"
    order="1001"
    serializerType="htmlwriter"
    transformerTypes="[linkchecker,versioned-clientlibs]">
    <transformer-mobile
        jcr:primaryType="nt:unstructured"
        component-optional="{Boolean}true"/>
    <transformer-mobiledebug
        jcr:primaryType="nt:unstructured"
        component-optional="{Boolean}true"/>
    <transformer-contentsync
        jcr:primaryType="nt:unstructured"
        component-optional="{Boolean}true"/>
</jcr:root>

快速解决方案是将这两个配置合并为一个:

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
          jcr:primaryType="nt:unstructured"
          contentTypes="text/html"
          enabled="{Boolean}true"
          generatorType="htmlparser"
          order="1010"
          paths="[/content]"
          serializerType="htmlwriter"
          transformerTypes="[linkchecker,link-transformer,versioned-clientlibs]">
    <transformer-mobile
        jcr:primaryType="nt:unstructured"
        component-optional="{Boolean}true"/>
    <transformer-mobiledebug
        jcr:primaryType="nt:unstructured"
        component-optional="{Boolean}true"/>
    <transformer-contentsync
        jcr:primaryType="nt:unstructured"
        component-optional="{Boolean}true"/>
    <generator-htmlparser
        jcr:primaryType="nt:unstructured"
        includeTags="[A,LINK,SCRIPT]"/>
</jcr:root>

此外,我在转换器中添加了一个检查以仅转换<a>标签。