简体   繁体   English

Quarkus 扩展过滤器在通过 AdditionalBeanBuildItem 注册时不起作用

[英]Quarkus extension filter doesn't work when registers via AdditionalBeanBuildItem

I want to implement my custom filter in my application.我想在我的应用程序中实现我的自定义过滤器。

TemplateOverrideFilter模板覆盖过滤器

public class TemplateOverrideFilter implements ContainerRequestFilter {
    private static final Logger LOG = Logger.getLogger(TemplateOverrideFilter.class);

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        LOG.info("TEMPLATE OVERRIDE FILTER TEST");
    }
}

I provide the configuration for the filter using我使用提供过滤器的配置

ContextConfiguration上下文配置

@Provider
@PreMatching
public class ContextConfiguration implements DynamicFeature {

    @Override
    public void configure(ResourceInfo resourceInfo, FeatureContext context) {
        context.register(TemplateOverrideFilter.class);
    }
}

And when I register my bean using the registerConfiguration method, it works well.当我使用registerConfiguration方法注册我的 bean 时,它运行良好。 But when I use registerAdditionalBeans , it doesn't work.但是当我使用registerAdditionalBeans时,它不起作用。

class TemplateOverrideProcessor {
    private static final String FEATURE = "template-override";

    @BuildStep
    FeatureBuildItem feature() {
        return new FeatureBuildItem(FEATURE);
    }

    // Does not work
    @BuildStep
    AdditionalBeanBuildItem registerAdditionalBeans() {
        return AdditionalBeanBuildItem.builder()
            .setUnremovable()
            .addBeanClass(ContextConfiguration.class)
            .build();

    }

    // Works well
    @BuildStep
    ResteasyJaxrsProviderBuildItem registerConfiguration() {
        return new ResteasyJaxrsProviderBuildItem(ContextConfiguration.class.getName());
    }
}

So I want to make the use of AdditionalBeanBuildItem also working.所以我想利用 AdditionalBeanBuildItem 也可以工作。 Can you help me?你能帮助我吗?

So, I figured out how to achieve my goal.所以,我想出了如何实现我的目标。 I don't need the ContextConfiguration class.我不需要ContextConfiguration类。

It's enough for me to just use the plugin in the runtime pom.xml:我只需在运行时 pom.xml 中使用插件就足够了:

<plugin>
    <groupId>org.jboss.jandex</groupId>
    <artifactId>jandex-maven-plugin</artifactId>
    <version>1.1.1</version>
    <executions>
        <execution>
             <id>make-index</id>
             <goals>
                 <goal>jandex</goal>
             </goals>
        </execution>
    </executions>
</plugin>

And my filter started to look like this:我的过滤器开始看起来像这样:

@Provider
public class TemplateOverrideFilter implements ContainerRequestFilter {
   ...
}

After that I was able to register my filter via AdditionalBeanBuildItem之后,我能够通过AdditionalBeanBuildItem注册我的过滤器

    @BuildStep
    AdditionalBeanBuildItem registerAdditionalBeans() {
        return AdditionalBeanBuildItem.builder()
            .setUnremovable()
            .addBeanClass(TemplateOverrideFilter.class)
            .build();

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM