0

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. But when I use registerAdditionalBeans, it doesn't work.

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. Can you help me?

Michael Linker
  • 118
  • 3
  • 8
  • When you say it's not working, what do you mean? How are you verifying it's not working? – geoand Apr 27 '22 at 06:04
  • The filter code is not called, and breakpoints are ignored by the debugger. – Michael Linker Apr 27 '22 at 07:34
  • So `ContextConfiguration#configure` is called but `TemplateOverrideFilter#filter` is not called? – geoand Apr 27 '22 at 10:36
  • Yes, when I use the ``TemplateOverrideProcessor#registerAdditionalBeans`` I get this behavior. – Michael Linker Apr 27 '22 at 11:05
  • What is the reason you are trying to make `ContextConfiguration` a bean? – geoand Apr 27 '22 at 11:48
  • Because using the [manual](https://quarkus.io/guides/building-my-first-extension) I failed to inject a filter. But I found how it can be done in the module [smallrye-opentracing](https://github.com/quarkusio/quarkus/blob/main/extensions/smallrye-opentracing/runtime/src/main/java/io/quarkus/smallrye/opentracing/runtime/QuarkusSmallRyeTracingStandaloneVertxDynamicFeature.java). – Michael Linker Apr 27 '22 at 12:57

1 Answers1

0

So, I figured out how to achieve my goal. I don't need the ContextConfiguration class.

It's enough for me to just use the plugin in the runtime 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

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

    }
Michael Linker
  • 118
  • 3
  • 8