You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2017/10/28 13:42:46 UTC

[cxf] branch 3.1.x-fixes updated: CXF-7501: Cannot inject field in ContainerRequestFilter (and generally, into any providers registered using FeatureContext) (#329)

This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch 3.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.1.x-fixes by this push:
     new b94e313  CXF-7501: Cannot inject field in ContainerRequestFilter (and generally, into any providers registered using FeatureContext) (#329)
b94e313 is described below

commit b94e313dbaea8ffc0de739c6932d28e14388f236
Author: Andriy Redko <dr...@gmail.com>
AuthorDate: Sat Oct 28 08:52:45 2017 -0400

    CXF-7501: Cannot inject field in ContainerRequestFilter (and generally, into any providers registered using FeatureContext) (#329)
    
    * CXF-7501: Cannot inject field in ContainerRequestFilter (and generally, into any providers registered using FeatureContext)
    
    * CXF-7501: Cannot inject field in ContainerRequestFilter (and generally, into any providers registered using FeatureContext). Added creational context disposal.
---
 .../cxf/cdi/CdiServerConfigurableFactory.java      | 91 ++++++++++++++++++++++
 .../apache/cxf/cdi/JAXRSCdiResourceExtension.java  | 30 ++++++-
 .../cxf/cdi/event/DisposableCreationalContext.java | 21 ++---
 .../apache/cxf/jaxrs/impl/ConfigurableImpl.java    | 25 ++++--
 .../jaxrs/provider/ServerConfigurableFactory.java  | 29 ++++---
 .../cxf/jaxrs/provider/ServerProviderFactory.java  | 18 ++---
 .../systests/cdi/base/BookStoreAuthenticator.java} | 22 +++---
 .../systests/cdi/base/BookStoreRequestFilter.java} | 22 ++++--
 .../cxf/systest/jaxrs/cdi/SampleFeature.java       |  2 +
 .../cxf/systest/jaxrs/cdi/SampleFeature.java       |  2 +
 10 files changed, 203 insertions(+), 59 deletions(-)

diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiServerConfigurableFactory.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiServerConfigurableFactory.java
new file mode 100644
index 0000000..15d4643
--- /dev/null
+++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiServerConfigurableFactory.java
@@ -0,0 +1,91 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.cdi;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanAttributes;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionTargetFactory;
+import javax.ws.rs.RuntimeType;
+import javax.ws.rs.core.Configurable;
+import javax.ws.rs.core.FeatureContext;
+
+import org.apache.cxf.cdi.event.DisposableCreationalContext;
+import org.apache.cxf.jaxrs.impl.ConfigurableImpl;
+import org.apache.cxf.jaxrs.impl.ConfigurableImpl.Instantiator;
+import org.apache.cxf.jaxrs.provider.ServerConfigurableFactory;
+
+/** 
+ * Creates the instance of Configurable<?> suitable for CDI-managed runtime.
+ */
+public class CdiServerConfigurableFactory implements ServerConfigurableFactory {
+    private final BeanManager beanManager;
+    
+    CdiServerConfigurableFactory(final BeanManager beanManager) {
+        this.beanManager = beanManager;
+    }
+    
+    @Override
+    public Configurable<FeatureContext> create(FeatureContext context) {
+        return new CdiServerFeatureContextConfigurable(context, beanManager);
+    }
+    
+    /** 
+     * Instantiates the instance of the provider using CDI/BeanManager 
+     */
+    private static class CdiInstantiator implements Instantiator {
+        private final BeanManager beanManager;
+        
+        CdiInstantiator(final BeanManager beanManager) {
+            this.beanManager = beanManager;
+        }
+        
+        @Override
+        public <T> Object create(Class<T> cls) {
+            final AnnotatedType<T> annotatedType = beanManager.createAnnotatedType(cls);
+            final InjectionTargetFactory<T> injectionTargetFactory = 
+                beanManager.getInjectionTargetFactory(annotatedType);
+            final BeanAttributes<T> attributes = beanManager.createBeanAttributes(annotatedType);
+            final Bean<T> bean = beanManager.createBean(attributes, cls, injectionTargetFactory);
+            final CreationalContext<?> context = beanManager.createCreationalContext(bean);
+            
+            if (!beanManager.isNormalScope(bean.getScope())) {
+                beanManager.fireEvent(new DisposableCreationalContext(context));
+            }
+            
+            return beanManager.getReference(bean, cls, context);
+        }
+    }
+    
+    private static class CdiServerFeatureContextConfigurable extends ConfigurableImpl<FeatureContext> {
+        private final Instantiator instantiator;
+        
+        CdiServerFeatureContextConfigurable(FeatureContext mc, BeanManager beanManager) {
+            super(mc, RuntimeType.SERVER, SERVER_FILTER_INTERCEPTOR_CLASSES);
+            this.instantiator = new CdiInstantiator(beanManager);
+        }
+        
+        @Override
+        protected Instantiator getInstantiator() {
+            return instantiator;
+        }
+    }
+}
diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java
index 42bbae1..9dfdc7e 100644
--- a/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java
+++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java
@@ -49,8 +49,10 @@ import javax.ws.rs.ext.Provider;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.bus.extension.ExtensionManagerBus;
+import org.apache.cxf.cdi.event.DisposableCreationalContext;
 import org.apache.cxf.feature.Feature;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.provider.ServerConfigurableFactory;
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
 
 /**
@@ -137,6 +139,11 @@ public class JAXRSCdiResourceExtension implements Extension {
                 busBean, 
                 Bus.class,
                 beanManager.createCreationalContext(busBean));
+        
+        // Adding the extension for dynamic providers registration and instantiation
+        if (bus.getExtension(ServerConfigurableFactory.class) == null) {
+            bus.setExtension(new CdiServerConfigurableFactory(beanManager), ServerConfigurableFactory.class);
+        }
 
         for (final Bean< ? > application: applicationBeans) {
             final Application instance = (Application)beanManager.getReference(
@@ -179,11 +186,22 @@ public class JAXRSCdiResourceExtension implements Extension {
     }
     
     /**
-     * Releases created CreationalContext instances 
+     * Registers created CreationalContext instances for disposal
+     */
+    public void registerCreationalContextForDisposal(@Observes final DisposableCreationalContext event) {
+        synchronized (disposableCreationalContexts) {
+            disposableCreationalContexts.add(event.getContext());
+        }
+    }
+    
+    /**
+     * Releases created CreationalContext instances
      */
     public void release(@Observes final BeforeShutdown event) {
-        for (final CreationalContext<?> disposableCreationalContext: disposableCreationalContexts) {
-            disposableCreationalContext.release();
+        synchronized (disposableCreationalContexts) {
+            for (final CreationalContext<?> disposableCreationalContext: disposableCreationalContexts) {
+                disposableCreationalContext.release();
+            }
         }
     }
     
@@ -352,9 +370,13 @@ public class JAXRSCdiResourceExtension implements Extension {
      */
     private<T> CreationalContext< T > createCreationalContext(final BeanManager beanManager, Bean< T > bean) {
         final CreationalContext< T > creationalContext = beanManager.createCreationalContext(bean);
+        
         if (!(bean instanceof DefaultApplicationBean)) {
-            disposableCreationalContexts.add(creationalContext);
+            synchronized (disposableCreationalContexts) {
+                disposableCreationalContexts.add(creationalContext);
+            }
         }
+        
         return creationalContext;
     }
 
diff --git a/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/event/DisposableCreationalContext.java
similarity index 68%
copy from systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
copy to integration/cdi/src/main/java/org/apache/cxf/cdi/event/DisposableCreationalContext.java
index 6a108dc..0944e4a 100644
--- a/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
+++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/event/DisposableCreationalContext.java
@@ -17,17 +17,18 @@
  * under the License.
  */
 
-package org.apache.cxf.systest.jaxrs.cdi;
+package org.apache.cxf.cdi.event;
 
-import javax.ws.rs.core.Feature;
-import javax.ws.rs.core.FeatureContext;
+import javax.enterprise.context.spi.CreationalContext;
 
-import org.apache.cxf.jaxrs.provider.atom.AtomFeedProvider;
-
-public class SampleFeature implements Feature {
-    @Override
-    public boolean configure(FeatureContext context) {
-        context.register(AtomFeedProvider.class);
-        return false;
+public class DisposableCreationalContext {
+    private final CreationalContext<?> context;
+    
+    public DisposableCreationalContext(CreationalContext<?> context) {
+        this.context = context;
+    }
+    
+    public CreationalContext<?> getContext() {
+        return context;
     }
 }
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurableImpl.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurableImpl.java
index 6d5c9dc..489aae9 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurableImpl.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurableImpl.java
@@ -31,8 +31,20 @@ import org.apache.cxf.jaxrs.utils.AnnotationUtils;
 
 public class ConfigurableImpl<C extends Configurable<C>> implements Configurable<C> {
     private ConfigurationImpl config;
-    private C configurable;
-    private Class<?>[] supportedProviderClasses;
+    private final C configurable;
+    private final Class<?>[] supportedProviderClasses;
+
+    private final Instantiator instantiator = new Instantiator() {
+        @Override
+        public <T> Object create(Class<T> cls) {
+            return ConfigurationImpl.createProvider(cls);
+        }
+    };
+    
+    public interface Instantiator {
+        <T> Object create(Class<T> cls);
+    }
+    
     public ConfigurableImpl(C configurable, RuntimeType rt, Class<?>[] supportedProviderClasses) {
         this(configurable, supportedProviderClasses, new ConfigurationImpl(rt));
     }
@@ -98,8 +110,7 @@ public class ConfigurableImpl<C extends Configurable<C>> implements Configurable
 
     @Override
     public C register(Class<?> providerClass, int bindingPriority) {
-        return doRegister(ConfigurationImpl.createProvider(providerClass), 
-                          bindingPriority, supportedProviderClasses);
+        return doRegister(getInstantiator().create(providerClass), bindingPriority, supportedProviderClasses);
     }
 
     @Override
@@ -109,7 +120,11 @@ public class ConfigurableImpl<C extends Configurable<C>> implements Configurable
 
     @Override
     public C register(Class<?> providerClass, Map<Class<?>, Integer> contracts) {
-        return register(ConfigurationImpl.createProvider(providerClass), contracts);
+        return register(getInstantiator().create(providerClass), contracts);
+    }
+    
+    protected Instantiator getInstantiator() {
+        return instantiator;
     }
     
     private C doRegister(Object provider, int bindingPriority, Class<?>... contracts) {
diff --git a/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerConfigurableFactory.java
similarity index 53%
copy from systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
copy to rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerConfigurableFactory.java
index 6a108dc..f4e9ef8 100644
--- a/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerConfigurableFactory.java
@@ -17,17 +17,26 @@
  * under the License.
  */
 
-package org.apache.cxf.systest.jaxrs.cdi;
+package org.apache.cxf.jaxrs.provider;
 
-import javax.ws.rs.core.Feature;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.container.ContainerResponseFilter;
+import javax.ws.rs.core.Configurable;
 import javax.ws.rs.core.FeatureContext;
+import javax.ws.rs.ext.ReaderInterceptor;
+import javax.ws.rs.ext.WriterInterceptor;
 
-import org.apache.cxf.jaxrs.provider.atom.AtomFeedProvider;
-
-public class SampleFeature implements Feature {
-    @Override
-    public boolean configure(FeatureContext context) {
-        context.register(AtomFeedProvider.class);
-        return false;
-    }
+/**
+ * Manages the creation of server-side Configurable<FeatureContext> depending on 
+ * the presence of managed runtime (like CDI f.e.). 
+ */
+public interface ServerConfigurableFactory {
+    Class<?>[] SERVER_FILTER_INTERCEPTOR_CLASSES = new Class<?>[] {
+        ContainerRequestFilter.class,
+        ContainerResponseFilter.class,
+        ReaderInterceptor.class,
+        WriterInterceptor.class 
+    };
+    
+    Configurable<FeatureContext> create(FeatureContext context);
 }
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java
index db10701..d914596 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java
@@ -21,11 +21,9 @@ package org.apache.cxf.jaxrs.provider;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -40,6 +38,7 @@ import javax.ws.rs.container.ContainerRequestFilter;
 import javax.ws.rs.container.ContainerResponseFilter;
 import javax.ws.rs.container.DynamicFeature;
 import javax.ws.rs.container.PreMatching;
+import javax.ws.rs.core.Configurable;
 import javax.ws.rs.core.Configuration;
 import javax.ws.rs.core.Feature;
 import javax.ws.rs.core.FeatureContext;
@@ -71,12 +70,6 @@ import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageUtils;
 
 public final class ServerProviderFactory extends ProviderFactory {
-    private static final Set<Class<?>> SERVER_FILTER_INTERCEPTOR_CLASSES = 
-        new HashSet<Class<?>>(Arrays.<Class<?>>asList(ContainerRequestFilter.class,
-                                                      ContainerResponseFilter.class,
-                                                      ReaderInterceptor.class,
-                                                      WriterInterceptor.class));
-    
     private static final String WADL_PROVIDER_NAME = "org.apache.cxf.jaxrs.model.wadl.WadlGenerator";
     private static final String MAKE_DEFAULT_WAE_LEAST_SPECIFIC = "default.wae.mapper.least.specific";
     private List<ProviderInfo<ExceptionMapper<?>>> exceptionMappers = 
@@ -398,8 +391,11 @@ public final class ServerProviderFactory extends ProviderFactory {
     }
     
     private FeatureContext createServerFeatureContext() {
-        FeatureContextImpl featureContext = new FeatureContextImpl();
-        ServerFeatureContextConfigurable configImpl = new ServerFeatureContextConfigurable(featureContext);
+        final FeatureContextImpl featureContext = new FeatureContextImpl();
+        final ServerConfigurableFactory factory = getBus().getExtension(ServerConfigurableFactory.class);
+        final Configurable<FeatureContext> configImpl = (factory == null) 
+            ? new ServerFeatureContextConfigurable(featureContext) 
+                : factory.create(featureContext);
         featureContext.setConfigurable(configImpl);
         
         if (application != null) {
@@ -417,7 +413,7 @@ public final class ServerProviderFactory extends ProviderFactory {
         
     private static class ServerFeatureContextConfigurable extends ConfigurableImpl<FeatureContext> {
         protected ServerFeatureContextConfigurable(FeatureContext mc) {
-            super(mc, RuntimeType.SERVER, SERVER_FILTER_INTERCEPTOR_CLASSES.toArray(new Class<?>[]{}));
+            super(mc, RuntimeType.SERVER, ServerConfigurableFactory.SERVER_FILTER_INTERCEPTOR_CLASSES);
         }
     }
     
diff --git a/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java b/systests/cdi/base/src/main/java/org/apache/cxf/systests/cdi/base/BookStoreAuthenticator.java
similarity index 68%
copy from systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
copy to systests/cdi/base/src/main/java/org/apache/cxf/systests/cdi/base/BookStoreAuthenticator.java
index 6a108dc..d2448ce 100644
--- a/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
+++ b/systests/cdi/base/src/main/java/org/apache/cxf/systests/cdi/base/BookStoreAuthenticator.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.cxf.systests.cdi.base;
 
-package org.apache.cxf.systest.jaxrs.cdi;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Named;
 
-import javax.ws.rs.core.Feature;
-import javax.ws.rs.core.FeatureContext;
-
-import org.apache.cxf.jaxrs.provider.atom.AtomFeedProvider;
-
-public class SampleFeature implements Feature {
-    @Override
-    public boolean configure(FeatureContext context) {
-        context.register(AtomFeedProvider.class);
-        return false;
+@Named @ApplicationScoped
+public class BookStoreAuthenticator {
+    public BookStoreAuthenticator() {
+        
+    }
+    
+    public boolean authenticated() {
+        return true;
     }
 }
diff --git a/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java b/systests/cdi/base/src/main/java/org/apache/cxf/systests/cdi/base/BookStoreRequestFilter.java
similarity index 56%
copy from systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
copy to systests/cdi/base/src/main/java/org/apache/cxf/systests/cdi/base/BookStoreRequestFilter.java
index 6a108dc..cbd8811 100644
--- a/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
+++ b/systests/cdi/base/src/main/java/org/apache/cxf/systests/cdi/base/BookStoreRequestFilter.java
@@ -17,17 +17,23 @@
  * under the License.
  */
 
-package org.apache.cxf.systest.jaxrs.cdi;
+package org.apache.cxf.systests.cdi.base;
 
-import javax.ws.rs.core.Feature;
-import javax.ws.rs.core.FeatureContext;
+import java.io.IOException;
 
-import org.apache.cxf.jaxrs.provider.atom.AtomFeedProvider;
+import javax.inject.Inject;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
 
-public class SampleFeature implements Feature {
+public class BookStoreRequestFilter implements ContainerRequestFilter {
+    @Inject private BookStoreAuthenticator authenticator;
+    
     @Override
-    public boolean configure(FeatureContext context) {
-        context.register(AtomFeedProvider.class);
-        return false;
+    public void filter(ContainerRequestContext requestContext) throws IOException {
+        if (!authenticator.authenticated()) {
+            requestContext.abortWith(Response.status(Status.UNAUTHORIZED).build());
+        }
     }
 }
diff --git a/systests/cdi/cdi-owb/cdi-producers-owb/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java b/systests/cdi/cdi-owb/cdi-producers-owb/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
index 6a108dc..ba34082 100644
--- a/systests/cdi/cdi-owb/cdi-producers-owb/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
+++ b/systests/cdi/cdi-owb/cdi-producers-owb/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
@@ -23,11 +23,13 @@ import javax.ws.rs.core.Feature;
 import javax.ws.rs.core.FeatureContext;
 
 import org.apache.cxf.jaxrs.provider.atom.AtomFeedProvider;
+import org.apache.cxf.systests.cdi.base.BookStoreRequestFilter;
 
 public class SampleFeature implements Feature {
     @Override
     public boolean configure(FeatureContext context) {
         context.register(AtomFeedProvider.class);
+        context.register(BookStoreRequestFilter.class);
         return false;
     }
 }
diff --git a/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java b/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
index 6a108dc..ba34082 100644
--- a/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
+++ b/systests/cdi/cdi-weld/cdi-producers-weld/src/test/java/org/apache/cxf/systest/jaxrs/cdi/SampleFeature.java
@@ -23,11 +23,13 @@ import javax.ws.rs.core.Feature;
 import javax.ws.rs.core.FeatureContext;
 
 import org.apache.cxf.jaxrs.provider.atom.AtomFeedProvider;
+import org.apache.cxf.systests.cdi.base.BookStoreRequestFilter;
 
 public class SampleFeature implements Feature {
     @Override
     public boolean configure(FeatureContext context) {
         context.register(AtomFeedProvider.class);
+        context.register(BookStoreRequestFilter.class);
         return false;
     }
 }

-- 
To stop receiving notification emails like this one, please contact
['"commits@cxf.apache.org" <co...@cxf.apache.org>'].