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

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 2eef538bd30cd9f2a07ad5a44829e6b569fb898c
Author: Benoit Tellier <[email protected]>
AuthorDate: Thu Sep 19 15:23:36 2019 +0700

    JAMES-2886 All extension mechanisms should rely on GuiceGenericLoader
---
 .../james/utils/GuiceProtocolHandlerLoader.java    | 18 ++---
 server/container/guice/guice-utils/pom.xml         |  4 +
 .../org/apache/james/utils/GuiceGenericLoader.java | 91 ++++++++++++++++++++++
 .../modules/mailbox/MailboxListenerFactory.java    | 33 ++++----
 .../mailbox/MailboxListenersLoaderImpl.java        | 10 +--
 .../modules/mailbox/PreDeletionHookLoaderImpl.java | 19 ++---
 .../mailbox/MailboxListenersLoaderImplTest.java    |  6 +-
 .../mailbox/PreDeletionHookLoaderImplTest.java     |  6 +-
 .../org/apache/james/utils/GuiceGenericLoader.java | 57 --------------
 .../org/apache/james/utils/GuiceMailetLoader.java  | 10 +--
 .../org/apache/james/utils/GuiceMatcherLoader.java | 10 +--
 .../apache/james/utils/GuiceMailetLoaderTest.java  | 35 ++++-----
 .../apache/james/utils/GuiceMatcherLoaderTest.java | 28 +++----
 13 files changed, 180 insertions(+), 147 deletions(-)

diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/GuiceProtocolHandlerLoader.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/GuiceProtocolHandlerLoader.java
index 23fbd20..b9a4b5c 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/GuiceProtocolHandlerLoader.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/GuiceProtocolHandlerLoader.java
@@ -25,17 +25,13 @@ import 
org.apache.james.protocols.api.handler.ProtocolHandler;
 import org.apache.james.protocols.lib.handler.ProtocolHandlerLoader;
 
 import com.google.inject.Inject;
-import com.google.inject.Injector;
 
 public class GuiceProtocolHandlerLoader implements ProtocolHandlerLoader {
-
-    private final Injector injector;
-    private final ExtendedClassLoader extendedClassLoader;
+    private final GuiceGenericLoader genericLoader;
 
     @Inject
-    public GuiceProtocolHandlerLoader(Injector injector, ExtendedClassLoader 
extendedClassLoader) {
-        this.injector = injector;
-        this.extendedClassLoader = extendedClassLoader;
+    public GuiceProtocolHandlerLoader(GuiceGenericLoader genericLoader) {
+        this.genericLoader = genericLoader;
     }
 
     @Override
@@ -51,10 +47,10 @@ public class GuiceProtocolHandlerLoader implements 
ProtocolHandlerLoader {
 
     private ProtocolHandler createProtocolHandler(String name) throws 
LoadingException {
         try {
-            Class<ProtocolHandler> clazz = 
extendedClassLoader.locateClass(name);
-            return injector.getInstance(clazz);
-        } catch (ClassNotFoundException e) {
-            throw new LoadingException("Can not load " + name);
+            ClassName className = new ClassName(name);
+            return genericLoader.instanciate(className);
+        } catch (Exception e) {
+            throw new LoadingException("Can not load " + name, e);
         }
     }
 
diff --git a/server/container/guice/guice-utils/pom.xml 
b/server/container/guice/guice-utils/pom.xml
index 4b8b922..74d3657 100644
--- a/server/container/guice/guice-utils/pom.xml
+++ b/server/container/guice/guice-utils/pom.xml
@@ -43,6 +43,10 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>com.google.inject</groupId>
+            <artifactId>guice</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.github.fge</groupId>
             <artifactId>throwing-lambdas</artifactId>
         </dependency>
diff --git 
a/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
 
b/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
new file mode 100644
index 0000000..d9c6943
--- /dev/null
+++ 
b/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/GuiceGenericLoader.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.james.utils;
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+
+public class GuiceGenericLoader {
+    private static final Optional<Module> NO_CHILD_MODULE = Optional.empty();
+
+    public static class InvocationPerformer<T> {
+        private final Injector injector;
+        private final ExtendedClassLoader extendedClassLoader;
+        private final NamingScheme namingSheme;
+        private final Optional<Module> childModule;
+
+        private InvocationPerformer(Injector injector, ExtendedClassLoader 
extendedClassLoader, NamingScheme namingSheme, Optional<Module> childModule) {
+            this.injector = injector;
+            this.extendedClassLoader = extendedClassLoader;
+            this.namingSheme = namingSheme;
+            this.childModule = childModule;
+        }
+
+        public T instanciate(ClassName className) throws 
ClassNotFoundException {
+            Class<T> clazz = locateClass(className, namingSheme);
+
+            Injector resolvedInjector = 
childModule.map(this.injector::createChildInjector)
+                .orElse(this.injector);
+
+            return resolvedInjector.getInstance(clazz);
+        }
+
+        private Class<T> locateClass(ClassName className, NamingScheme 
namingScheme) throws ClassNotFoundException {
+            return namingScheme.toFullyQualifiedClassNames(className)
+                .flatMap(this::tryLocateClass)
+                .findFirst()
+                .orElseThrow(() -> new 
ClassNotFoundException(className.getName()));
+        }
+
+        private Stream<Class<T>> tryLocateClass(FullyQualifiedClassName 
className) {
+            try {
+                return Stream.of(extendedClassLoader.locateClass(className));
+            } catch (ClassNotFoundException e) {
+                return Stream.empty();
+            }
+        }
+    }
+
+    private final Injector injector;
+    private final ExtendedClassLoader extendedClassLoader;
+
+    @Inject
+    public GuiceGenericLoader(Injector injector, ExtendedClassLoader 
extendedClassLoader) {
+        this.injector = injector;
+        this.extendedClassLoader = extendedClassLoader;
+    }
+
+    public <T> T instanciate(ClassName className) throws 
ClassNotFoundException {
+        return new InvocationPerformer<T>(injector, extendedClassLoader, 
NamingScheme.IDENTITY, NO_CHILD_MODULE)
+            .instanciate(className);
+    }
+
+    public <T> InvocationPerformer<T> withNamingSheme(NamingScheme 
namingSheme) {
+        return new InvocationPerformer<T>(injector, extendedClassLoader, 
namingSheme, NO_CHILD_MODULE);
+    }
+
+    public <T> InvocationPerformer<T> withChildModule(Module childModule) {
+        return new InvocationPerformer<T>(injector, extendedClassLoader, 
NamingScheme.IDENTITY, Optional.of(childModule));
+    }
+}
diff --git 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
index 270659e..d85d4f1 100644
--- 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
+++ 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
@@ -26,21 +26,24 @@ import 
org.apache.commons.configuration2.BaseHierarchicalConfiguration;
 import org.apache.commons.configuration2.HierarchicalConfiguration;
 import org.apache.commons.configuration2.tree.ImmutableNode;
 import org.apache.james.mailbox.events.MailboxListener;
+import org.apache.james.utils.ClassName;
+import org.apache.james.utils.GuiceGenericLoader;
 
 import com.google.common.base.Preconditions;
-import com.google.inject.Injector;
+import com.google.inject.Module;
 import com.google.inject.TypeLiteral;
+import com.google.inject.util.Modules;
 
 public class MailboxListenerFactory {
 
     public static class MailboxListenerBuilder {
-        private final Injector injector;
-        private Optional<Class<MailboxListener>> clazz;
+        private final GuiceGenericLoader genericLoader;
+        private Optional<ClassName> clazz;
         private Optional<MailboxListener.ExecutionMode> executionMode;
         private Optional<HierarchicalConfiguration<ImmutableNode>> 
configuration;
 
-        public MailboxListenerBuilder(Injector injector) {
-            this.injector = injector;
+        public MailboxListenerBuilder(GuiceGenericLoader genericLoader) {
+            this.genericLoader = genericLoader;
             this.clazz = Optional.empty();
             this.executionMode = Optional.empty();
             this.configuration = Optional.empty();
@@ -66,30 +69,32 @@ public class MailboxListenerFactory {
             return this;
         }
 
-        public MailboxListenerBuilder clazz(Class<MailboxListener> clazz) {
+        public MailboxListenerBuilder clazz(ClassName clazz) {
             this.clazz = Optional.of(clazz);
             return this;
         }
 
-        public MailboxListener build() {
+        public MailboxListener build() throws ClassNotFoundException {
             Preconditions.checkState(clazz.isPresent(), "'clazz' is 
mandatory");
-            return injector.createChildInjector(
+            Module childModule = Modules.combine(
                 binder -> binder.bind(MailboxListener.ExecutionMode.class)
                     
.toInstance(executionMode.orElse(MailboxListener.ExecutionMode.SYNCHRONOUS)),
                 binder -> binder.bind(new 
TypeLiteral<HierarchicalConfiguration<ImmutableNode>>() {})
-                        .toInstance(configuration.orElse(new 
BaseHierarchicalConfiguration())))
-                .getInstance(clazz.get());
+                    .toInstance(configuration.orElse(new 
BaseHierarchicalConfiguration())));
+
+            return genericLoader.<MailboxListener>withChildModule(childModule)
+                .instanciate(clazz.get());
         }
     }
 
-    private final Injector injector;
+    private final GuiceGenericLoader genericLoader;
 
     @Inject
-    public MailboxListenerFactory(Injector injector) {
-        this.injector = injector;
+    public MailboxListenerFactory(GuiceGenericLoader genericLoader) {
+        this.genericLoader = genericLoader;
     }
 
     public MailboxListenerBuilder newInstance() {
-        return new MailboxListenerBuilder(injector);
+        return new MailboxListenerBuilder(genericLoader);
     }
 }
diff --git 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
index cadb111..883acc8 100644
--- 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
+++ 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
@@ -28,7 +28,7 @@ import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.events.GenericGroup;
 import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.events.MailboxListener;
-import org.apache.james.utils.ExtendedClassLoader;
+import org.apache.james.utils.ClassName;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,15 +40,13 @@ public class MailboxListenersLoaderImpl implements 
Configurable, MailboxListener
 
     private final MailboxListenerFactory mailboxListenerFactory;
     private final EventBus eventBus;
-    private final ExtendedClassLoader classLoader;
     private final Set<MailboxListener.GroupMailboxListener> 
guiceDefinedListeners;
 
     @Inject
     MailboxListenersLoaderImpl(MailboxListenerFactory mailboxListenerFactory, 
EventBus eventBus,
-                                  ExtendedClassLoader classLoader, 
Set<MailboxListener.GroupMailboxListener> guiceDefinedListeners) {
+                               Set<MailboxListener.GroupMailboxListener> 
guiceDefinedListeners) {
         this.mailboxListenerFactory = mailboxListenerFactory;
         this.eventBus = eventBus;
-        this.classLoader = classLoader;
         this.guiceDefinedListeners = guiceDefinedListeners;
     }
 
@@ -74,13 +72,13 @@ public class MailboxListenersLoaderImpl implements 
Configurable, MailboxListener
 
     @Override
     public Pair<Group, MailboxListener> createListener(ListenerConfiguration 
configuration) {
-        String listenerClass = configuration.getClazz();
+        ClassName listenerClass = new ClassName(configuration.getClazz());
         try {
             LOGGER.info("Loading user registered mailbox listener {}", 
listenerClass);
             MailboxListener mailboxListener = 
mailboxListenerFactory.newInstance()
                 .withConfiguration(configuration.getConfiguration())
                 
.withExecutionMode(configuration.isAsync().map(this::getExecutionMode))
-                .clazz(classLoader.locateClass(listenerClass))
+                .clazz(listenerClass)
                 .build();
 
 
diff --git 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImpl.java
 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImpl.java
index 87b293d..5b67a1b 100644
--- 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImpl.java
+++ 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImpl.java
@@ -19,30 +19,27 @@
 package org.apache.james.modules.mailbox;
 
 import org.apache.james.mailbox.extension.PreDeletionHook;
-import org.apache.james.utils.ExtendedClassLoader;
+import org.apache.james.utils.ClassName;
+import org.apache.james.utils.GuiceGenericLoader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.inject.Inject;
-import com.google.inject.Injector;
 
 public class PreDeletionHookLoaderImpl implements PreDeletionHookLoader {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(PreDeletionHookLoaderImpl.class);
 
-    private final Injector injector;
-    private final ExtendedClassLoader classLoader;
+    private final GuiceGenericLoader genericLoader;
 
     @Inject
-    PreDeletionHookLoaderImpl(Injector injector, ExtendedClassLoader 
classLoader) {
-        this.injector = injector;
-        this.classLoader = classLoader;
+    PreDeletionHookLoaderImpl(GuiceGenericLoader guiceGenericLoader) {
+        this.genericLoader = guiceGenericLoader;
     }
 
     @Override
     public PreDeletionHook createHook(PreDeletionHookConfiguration 
configuration) throws ClassNotFoundException {
-        String hookClass = configuration.getClazz();
-        LOGGER.info("Loading user registered mailbox listener {}", hookClass);
-        Class<PreDeletionHook> clazz = classLoader.locateClass(hookClass);
-        return injector.getInstance(clazz);
+        ClassName hookClass = new ClassName(configuration.getClazz());
+        LOGGER.info("Loading user registered mailbox message deletionHook {}", 
hookClass);
+        return genericLoader.instanciate(hookClass);
     }
 }
diff --git 
a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
 
b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
index d3d33eb..a538053 100644
--- 
a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
+++ 
b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
@@ -41,6 +41,7 @@ import 
org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.apache.james.utils.ExtendedClassLoader;
+import org.apache.james.utils.GuiceGenericLoader;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -59,8 +60,9 @@ class MailboxListenersLoaderImplTest {
             .thenThrow(new FileNotFoundException());
 
         eventBus = new InVMEventBus(new InVmEventDelivery(new 
NoopMetricFactory()));
-        testee = new MailboxListenersLoaderImpl(new 
MailboxListenerFactory(Guice.createInjector()), eventBus,
-            new ExtendedClassLoader(fileSystem), ImmutableSet.of());
+
+        GuiceGenericLoader genericLoader = new 
GuiceGenericLoader(Guice.createInjector(), new ExtendedClassLoader(fileSystem));
+        testee = new MailboxListenersLoaderImpl(new 
MailboxListenerFactory(genericLoader), eventBus, ImmutableSet.of());
     }
 
     @Test
diff --git 
a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImplTest.java
 
b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImplTest.java
index 6c398f5..0a898e5 100644
--- 
a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImplTest.java
+++ 
b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImplTest.java
@@ -29,6 +29,7 @@ import java.io.FileNotFoundException;
 
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.utils.ExtendedClassLoader;
+import org.apache.james.utils.GuiceGenericLoader;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -43,7 +44,10 @@ class PreDeletionHookLoaderImplTest {
         when(fileSystem.getFile(anyString()))
             .thenThrow(new FileNotFoundException());
 
-        testee = new PreDeletionHookLoaderImpl(Guice.createInjector(), new 
ExtendedClassLoader(fileSystem));
+        testee = new PreDeletionHookLoaderImpl(
+            new GuiceGenericLoader(
+                Guice.createInjector(),
+                new ExtendedClassLoader(fileSystem)));
     }
 
     @Test
diff --git 
a/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
 
b/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
deleted file mode 100644
index d8c6188..0000000
--- 
a/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/****************************************************************
- * 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.james.utils;
-
-import java.util.stream.Stream;
-
-import com.google.inject.Injector;
-
-public class GuiceGenericLoader<T> {
-    private final Injector injector;
-    private final NamingScheme namingScheme;
-    private final ExtendedClassLoader extendedClassLoader;
-
-    public GuiceGenericLoader(Injector injector, ExtendedClassLoader 
extendedClassLoader, NamingScheme namingScheme) {
-        this.injector = injector;
-        this.namingScheme = namingScheme;
-        this.extendedClassLoader = extendedClassLoader;
-    }
-
-    public T instanciate(ClassName className) throws Exception {
-        Class<T> clazz = locateClass(className);
-        return injector.getInstance(clazz);
-    }
-
-    private Class<T> locateClass(ClassName className) throws 
ClassNotFoundException {
-        return namingScheme.toFullyQualifiedClassNames(className)
-            .flatMap(this::tryLocateClass)
-            .findFirst()
-            .orElseThrow(() -> new 
ClassNotFoundException(className.getName()));
-    }
-
-    private Stream<Class<T>> tryLocateClass(FullyQualifiedClassName className) 
{
-        try {
-            return Stream.of(extendedClassLoader.locateClass(className));
-        } catch (ClassNotFoundException e) {
-            return Stream.empty();
-        }
-    }
-
-}
diff --git 
a/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMailetLoader.java
 
b/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMailetLoader.java
index ac6296d..3bcfd4a 100644
--- 
a/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMailetLoader.java
+++ 
b/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMailetLoader.java
@@ -31,18 +31,17 @@ import org.apache.mailet.MailetConfig;
 
 import com.github.steveash.guavate.Guavate;
 import com.google.inject.Inject;
-import com.google.inject.Injector;
 
 public class GuiceMailetLoader implements MailetLoader {
     private static final PackageName STANDARD_PACKAGE = 
PackageName.of("org.apache.james.transport.mailets.");
     private static final NamingScheme MAILET_NAMING_SCHEME = new 
NamingScheme.OptionalPackagePrefix(STANDARD_PACKAGE);
 
-    private final GuiceGenericLoader<Mailet> genericLoader;
+    private final GuiceGenericLoader genericLoader;
     private final Map<Class<? extends Mailet>, MailetConfig> 
configurationOverrides;
 
     @Inject
-    public GuiceMailetLoader(Injector injector, ExtendedClassLoader 
extendedClassLoader, Set<MailetConfigurationOverride> 
mailetConfigurationOverrides) {
-        this.genericLoader = new GuiceGenericLoader<>(injector, 
extendedClassLoader, MAILET_NAMING_SCHEME);
+    public GuiceMailetLoader(GuiceGenericLoader genericLoader, 
Set<MailetConfigurationOverride> mailetConfigurationOverrides) {
+        this.genericLoader = genericLoader;
         this.configurationOverrides = mailetConfigurationOverrides.stream()
             .collect(Guavate.toImmutableMap(
                 MailetConfigurationOverride::getClazz,
@@ -53,7 +52,8 @@ public class GuiceMailetLoader implements MailetLoader {
     public Mailet getMailet(MailetConfig config) throws MessagingException {
         try {
             ClassName className = new ClassName(config.getMailetName());
-            Mailet result = genericLoader.instanciate(className);
+            Mailet result = 
genericLoader.<Mailet>withNamingSheme(MAILET_NAMING_SCHEME)
+                .instanciate(className);
             result.init(resolveConfiguration(result, config));
             return result;
         } catch (Exception e) {
diff --git 
a/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMatcherLoader.java
 
b/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMatcherLoader.java
index 6d2f874..5e55622 100644
--- 
a/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMatcherLoader.java
+++ 
b/server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMatcherLoader.java
@@ -26,24 +26,24 @@ import org.apache.mailet.Matcher;
 import org.apache.mailet.MatcherConfig;
 
 import com.google.inject.Inject;
-import com.google.inject.Injector;
 
 public class GuiceMatcherLoader implements MatcherLoader {
     private static final PackageName STANDARD_PACKAGE = 
PackageName.of("org.apache.james.transport.matchers.");
     private static final NamingScheme MATCHER_NAMING_SCHEME = new 
NamingScheme.OptionalPackagePrefix(STANDARD_PACKAGE);
 
-    private final GuiceGenericLoader<Matcher> genericLoader;
+    private final GuiceGenericLoader genericLoader;
 
     @Inject
-    public GuiceMatcherLoader(Injector injector, ExtendedClassLoader 
extendedClassLoader) {
-        this.genericLoader = new GuiceGenericLoader<>(injector, 
extendedClassLoader, MATCHER_NAMING_SCHEME);
+    public GuiceMatcherLoader(GuiceGenericLoader genericLoader) {
+        this.genericLoader = genericLoader;
     }
 
     @Override
     public Matcher getMatcher(MatcherConfig config) throws MessagingException {
         try {
             ClassName className = new ClassName(config.getMatcherName());
-            Matcher result = genericLoader.instanciate(className);
+            Matcher result = 
genericLoader.<Matcher>withNamingSheme(MATCHER_NAMING_SCHEME)
+                .instanciate(className);
             result.init(config);
             return result;
         } catch (Exception e) {
diff --git 
a/server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMailetLoaderTest.java
 
b/server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMailetLoaderTest.java
index cdce656..635685b 100644
--- 
a/server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMailetLoaderTest.java
+++ 
b/server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMailetLoaderTest.java
@@ -50,9 +50,8 @@ public class GuiceMailetLoaderTest {
 
     @Test
     public void getMailetShouldLoadClass() throws Exception {
-        GuiceMailetLoader guiceMailetLoader = new GuiceMailetLoader(injector,
-            new ExtendedClassLoader(THROWING_FILE_SYSTEM),
-            NO_MAILET_CONFIG_OVERRIDES);
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(THROWING_FILE_SYSTEM));
+        GuiceMailetLoader guiceMailetLoader = new 
GuiceMailetLoader(genericLoader, NO_MAILET_CONFIG_OVERRIDES);
 
         Mailet mailet = guiceMailetLoader.getMailet(FakeMailetConfig.builder()
             .mailetName("AddFooter")
@@ -64,9 +63,8 @@ public class GuiceMailetLoaderTest {
 
     @Test
     public void getMailetShouldLoadClassWhenInSubPackageFromDefaultPackage() 
throws Exception {
-        GuiceMailetLoader guiceMailetLoader = new GuiceMailetLoader(injector,
-            new ExtendedClassLoader(THROWING_FILE_SYSTEM),
-            NO_MAILET_CONFIG_OVERRIDES);
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(THROWING_FILE_SYSTEM));
+        GuiceMailetLoader guiceMailetLoader = new 
GuiceMailetLoader(genericLoader, NO_MAILET_CONFIG_OVERRIDES);
 
         Mailet mailet = guiceMailetLoader.getMailet(FakeMailetConfig.builder()
             .mailetName("sub.TestMailet")
@@ -78,9 +76,8 @@ public class GuiceMailetLoaderTest {
 
     @Test
     public void getMailetShouldThrowOnBadType() throws Exception {
-        GuiceMailetLoader guiceMailetLoader = new GuiceMailetLoader(injector,
-            new ExtendedClassLoader(THROWING_FILE_SYSTEM),
-            NO_MAILET_CONFIG_OVERRIDES);
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(THROWING_FILE_SYSTEM));
+        GuiceMailetLoader guiceMailetLoader = new 
GuiceMailetLoader(genericLoader, NO_MAILET_CONFIG_OVERRIDES);
 
         expectedException.expect(MessagingException.class);
 
@@ -92,9 +89,8 @@ public class GuiceMailetLoaderTest {
 
     @Test
     public void getMailetShouldLoadClassWhenInExtensionsJars() throws 
Exception {
-        GuiceMailetLoader guiceMailetLoader = new GuiceMailetLoader(injector,
-            new ExtendedClassLoader(CLASSPATH_FILE_SYSTEM),
-            NO_MAILET_CONFIG_OVERRIDES);
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(CLASSPATH_FILE_SYSTEM));
+        GuiceMailetLoader guiceMailetLoader = new 
GuiceMailetLoader(genericLoader, NO_MAILET_CONFIG_OVERRIDES);
 
         Mailet mailet = guiceMailetLoader.getMailet(FakeMailetConfig.builder()
             .mailetName("CustomMailet")
@@ -107,9 +103,8 @@ public class GuiceMailetLoaderTest {
 
     @Test
     public void getMailetShouldBrowseRecursivelyExtensionsJars() throws 
Exception {
-        GuiceMailetLoader guiceMailetLoader = new GuiceMailetLoader(injector,
-            new ExtendedClassLoader(RECURSIVE_CLASSPATH_FILE_SYSTEM),
-            NO_MAILET_CONFIG_OVERRIDES);
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(RECURSIVE_CLASSPATH_FILE_SYSTEM));
+        GuiceMailetLoader guiceMailetLoader = new 
GuiceMailetLoader(genericLoader, NO_MAILET_CONFIG_OVERRIDES);
 
         Mailet mailet = guiceMailetLoader.getMailet(FakeMailetConfig.builder()
             .mailetName("CustomMailet")
@@ -122,9 +117,8 @@ public class GuiceMailetLoaderTest {
 
     @Test
     public void getMailedShouldAllowCustomPackages() throws Exception {
-        GuiceMailetLoader guiceMailetLoader = new GuiceMailetLoader(injector,
-            new ExtendedClassLoader(CLASSPATH_FILE_SYSTEM),
-            NO_MAILET_CONFIG_OVERRIDES);
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(CLASSPATH_FILE_SYSTEM));
+        GuiceMailetLoader guiceMailetLoader = new 
GuiceMailetLoader(genericLoader, NO_MAILET_CONFIG_OVERRIDES);
 
         Mailet mailet = guiceMailetLoader.getMailet(FakeMailetConfig.builder()
             .mailetName("com.custom.mailets.AnotherMailet")
@@ -137,9 +131,8 @@ public class GuiceMailetLoaderTest {
 
     @Test
     public void getMailetShouldThrowOnUnknownMailet() throws Exception {
-        GuiceMailetLoader guiceMailetLoader = new GuiceMailetLoader(injector,
-            new ExtendedClassLoader(CLASSPATH_FILE_SYSTEM),
-            NO_MAILET_CONFIG_OVERRIDES);
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(CLASSPATH_FILE_SYSTEM));
+        GuiceMailetLoader guiceMailetLoader = new 
GuiceMailetLoader(genericLoader, NO_MAILET_CONFIG_OVERRIDES);
 
         expectedException.expect(MessagingException.class);
 
diff --git 
a/server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMatcherLoaderTest.java
 
b/server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMatcherLoaderTest.java
index 319fb7a..7f77af8 100644
--- 
a/server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMatcherLoaderTest.java
+++ 
b/server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMatcherLoaderTest.java
@@ -45,8 +45,8 @@ public class GuiceMatcherLoaderTest {
 
     @Test
     public void getMatcherShouldLoadClass() throws Exception {
-        GuiceMatcherLoader guiceMailetLoader = new GuiceMatcherLoader(injector,
-            new ExtendedClassLoader(THROWING_FILE_SYSTEM));
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(THROWING_FILE_SYSTEM));
+        GuiceMatcherLoader guiceMailetLoader = new 
GuiceMatcherLoader(genericLoader);
 
         Matcher matcher = 
guiceMailetLoader.getMatcher(FakeMatcherConfig.builder()
             .matcherName("All")
@@ -58,8 +58,8 @@ public class GuiceMatcherLoaderTest {
 
     @Test
     public void getMatcherShouldLoadClassWhenInSubPackageFromDefaultPackage() 
throws Exception {
-        GuiceMatcherLoader guiceMailetLoader = new GuiceMatcherLoader(injector,
-            new ExtendedClassLoader(THROWING_FILE_SYSTEM));
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(THROWING_FILE_SYSTEM));
+        GuiceMatcherLoader guiceMailetLoader = new 
GuiceMatcherLoader(genericLoader);
 
         Matcher matcher = 
guiceMailetLoader.getMatcher(FakeMatcherConfig.builder()
             .matcherName("sub.TestMatcher")
@@ -71,8 +71,8 @@ public class GuiceMatcherLoaderTest {
 
     @Test
     public void getMatcherShouldThrowOnBadType() throws Exception {
-        GuiceMatcherLoader guiceMatcherLoader = new 
GuiceMatcherLoader(injector,
-            new ExtendedClassLoader(THROWING_FILE_SYSTEM));
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(THROWING_FILE_SYSTEM));
+        GuiceMatcherLoader guiceMatcherLoader = new 
GuiceMatcherLoader(genericLoader);
 
         expectedException.expect(MessagingException.class);
 
@@ -84,8 +84,8 @@ public class GuiceMatcherLoaderTest {
 
     @Test
     public void getMatcherShouldLoadClassWhenInExtensionsJars() throws 
Exception {
-        GuiceMatcherLoader guiceMatcherLoader = new 
GuiceMatcherLoader(injector,
-            new ExtendedClassLoader(CLASSPATH_FILE_SYSTEM));
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(CLASSPATH_FILE_SYSTEM));
+        GuiceMatcherLoader guiceMatcherLoader = new 
GuiceMatcherLoader(genericLoader);
 
         Matcher matcher = 
guiceMatcherLoader.getMatcher(FakeMatcherConfig.builder()
             .matcherName("CustomMatcher")
@@ -98,8 +98,8 @@ public class GuiceMatcherLoaderTest {
 
     @Test
     public void getMatcherShouldBrowseRecursivelyExtensionJars() throws 
Exception {
-        GuiceMatcherLoader guiceMatcherLoader = new 
GuiceMatcherLoader(injector,
-            new ExtendedClassLoader(RECURSIVE_CLASSPATH_FILE_SYSTEM));
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(RECURSIVE_CLASSPATH_FILE_SYSTEM));
+        GuiceMatcherLoader guiceMatcherLoader = new 
GuiceMatcherLoader(genericLoader);
 
         Matcher matcher = 
guiceMatcherLoader.getMatcher(FakeMatcherConfig.builder()
             .matcherName("CustomMatcher")
@@ -112,8 +112,8 @@ public class GuiceMatcherLoaderTest {
 
     @Test
     public void getMatcherShouldAllowCustomPackages() throws Exception {
-        GuiceMatcherLoader guiceMatcherLoader = new 
GuiceMatcherLoader(injector,
-            new ExtendedClassLoader(RECURSIVE_CLASSPATH_FILE_SYSTEM));
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(RECURSIVE_CLASSPATH_FILE_SYSTEM));
+        GuiceMatcherLoader guiceMatcherLoader = new 
GuiceMatcherLoader(genericLoader);
 
         Matcher matcher = 
guiceMatcherLoader.getMatcher(FakeMatcherConfig.builder()
             .matcherName("com.custom.matchers.AnotherMatcher")
@@ -126,8 +126,8 @@ public class GuiceMatcherLoaderTest {
 
     @Test
     public void getMatcherShouldThrowOnUnknownMailet() throws Exception {
-        GuiceMatcherLoader guiceMatcherLoader = new 
GuiceMatcherLoader(injector,
-            new ExtendedClassLoader(CLASSPATH_FILE_SYSTEM));
+        GuiceGenericLoader genericLoader = new GuiceGenericLoader(injector, 
new ExtendedClassLoader(CLASSPATH_FILE_SYSTEM));
+        GuiceMatcherLoader guiceMatcherLoader = new 
GuiceMatcherLoader(genericLoader);
 
         expectedException.expect(MessagingException.class);
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to