You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2019/01/01 11:17:43 UTC

[directory-server] 01/02: Fixed the server compilation issues following the changes in the LDA API

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

elecharny pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-server.git

commit f28f4aa854d1e924f19375d4c5cfdccdd03bd2ec
Author: Emmanuel Lecharny <el...@apache.org>
AuthorDate: Thu Dec 27 17:49:51 2018 +0100

    Fixed the server compilation issues following the changes in the LDA API
---
 .../core/api/LdapCoreSessionConnectionTest.java    |  14 +--
 .../server/core/subtree/SubentryServiceIT.java     |   9 +-
 .../directory/server/core/jndi/ServerContext.java  | 110 ++++-----------------
 .../core/authn/AuthenticationInterceptor.java      |  34 +++----
 .../server/core/subtree/SubentryInterceptor.java   |   6 +-
 protocol-ldap/pom.xml                              |   1 -
 .../directory/server/ldap/LdapProtocolHandler.java |   7 +-
 .../extended/CertGenerationRequestHandler.java     |   6 ++
 .../handlers/extended/EndTransactionHandler.java   |   3 +-
 .../handlers/extended/GracefulShutdownHandler.java |   2 +-
 .../StoredProcedureExtendedOperationHandler.java   |  11 ++-
 .../ldap/handlers/extended/WhoAmIHandler.java      |   5 +-
 .../handlers/request/SearchRequestHandler.java     |  24 ++---
 .../consumer/ReplicationConsumerImpl.java          |  13 +--
 .../provider/SyncReplRequestHandler.java           |  16 ++-
 .../provider/SyncReplSearchListener.java           |   4 +-
 .../server/operations/bind/SaslBindIT.java         |   9 +-
 .../operations/extended/DitUtilitiesProcedure.java |   2 +-
 .../server/operations/extended/PwdModifyIT.java    |  19 ++--
 .../server/operations/search/PagedSearchApiIT.java |   3 +-
 .../server/operations/search/PagedSearchIT.java    |   8 +-
 .../operations/search/PersistentSearchApiIT.java   |  19 ++--
 .../operations/search/PersistentSearchIT.java      |  17 ++--
 .../directory/server/ppolicy/PasswordPolicyIT.java |   3 +-
 .../server/replication/MockSyncReplConsumer.java   |  14 +--
 .../server/core/integ/FrameworkRunner.java         |   1 +
 26 files changed, 123 insertions(+), 237 deletions(-)

diff --git a/core-integ/src/test/java/org/apache/directory/server/core/api/LdapCoreSessionConnectionTest.java b/core-integ/src/test/java/org/apache/directory/server/core/api/LdapCoreSessionConnectionTest.java
index b22789c..9de0bd4 100755
--- a/core-integ/src/test/java/org/apache/directory/server/core/api/LdapCoreSessionConnectionTest.java
+++ b/core-integ/src/test/java/org/apache/directory/server/core/api/LdapCoreSessionConnectionTest.java
@@ -22,13 +22,8 @@ package org.apache.directory.server.core.api;
 
 import static org.junit.Assert.assertNotNull;
 
-import org.apache.directory.api.ldap.codec.api.LdapApiService;
-import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequestImpl;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponse;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponseImpl;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseDecorator;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.message.BindRequest;
 import org.apache.directory.api.ldap.model.message.BindRequestImpl;
@@ -79,9 +74,8 @@ import org.slf4j.LoggerFactory;
 public class LdapCoreSessionConnectionTest extends AbstractLdapTestUnit
 {
     private static Logger logger = LoggerFactory.getLogger( LdapCoreSessionConnection.class );
-    private static final LdapApiService codec = LdapApiServiceFactory.getSingleton();
-    private static final PasswordPolicyResponseDecorator passwordPolicyRequestControl =
-        new PasswordPolicyResponseDecorator( codec, new PasswordPolicyResponseImpl() );
+    private static final PasswordPolicyResponse passwordPolicyRequestControl =
+        new PasswordPolicyResponseImpl();
 
 
     @Before
@@ -119,7 +113,7 @@ public class LdapCoreSessionConnectionTest extends AbstractLdapTestUnit
             BindResponse bindResponse = connection.bind( bindRequest );
             Control responseControl = bindResponse.getControls().get( passwordPolicyRequestControl.getOid() );
             assertNotNull( responseControl );
-            PasswordPolicyResponse passwordPolicy = ( ( PasswordPolicyResponseDecorator ) responseControl ).getDecorated();
+            PasswordPolicyResponse passwordPolicy = ( PasswordPolicyResponse ) responseControl;
             assertNotNull( passwordPolicy );
         }
         finally
@@ -147,7 +141,7 @@ public class LdapCoreSessionConnectionTest extends AbstractLdapTestUnit
             BindResponse bindResponse = connection.bind( bindRequest );
             Control responseControl = bindResponse.getControls().get( passwordPolicyRequestControl.getOid() );
             assertNotNull( responseControl );
-            PasswordPolicyResponse passwordPolicy = ( ( PasswordPolicyResponseDecorator ) responseControl ).getDecorated();
+            PasswordPolicyResponse passwordPolicy = ( PasswordPolicyResponse ) responseControl;
             assertNotNull( passwordPolicy );
         }
         finally
diff --git a/core-integ/src/test/java/org/apache/directory/server/core/subtree/SubentryServiceIT.java b/core-integ/src/test/java/org/apache/directory/server/core/subtree/SubentryServiceIT.java
index 69cf53a..2d9eb79 100644
--- a/core-integ/src/test/java/org/apache/directory/server/core/subtree/SubentryServiceIT.java
+++ b/core-integ/src/test/java/org/apache/directory/server/core/subtree/SubentryServiceIT.java
@@ -43,7 +43,6 @@ import javax.naming.ldap.LdapContext;
 
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
 import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
-import org.apache.directory.api.ldap.codec.controls.search.subentries.SubentriesDecorator;
 import org.apache.directory.api.ldap.model.cursor.EntryCursor;
 import org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
@@ -56,6 +55,7 @@ import org.apache.directory.api.ldap.model.message.ModifyRequest;
 import org.apache.directory.api.ldap.model.message.ModifyRequestImpl;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.message.controls.Subentries;
+import org.apache.directory.api.ldap.model.message.controls.SubentriesImpl;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.util.JndiUtils;
 import org.apache.directory.ldap.client.api.LdapConnection;
@@ -1302,10 +1302,8 @@ public class SubentryServiceIT extends AbstractLdapTestUnit
         // except subentries disappear
         LdapApiService codec = LdapApiServiceFactory.getSingleton();
 
-        SubentriesDecorator decorator = new SubentriesDecorator( codec );
-        Subentries ctl = decorator.getDecorated();
+        Subentries ctl = new SubentriesImpl();
         ctl.setVisibility( true );
-        decorator.getValue();
         sysRoot.setRequestControls( JndiUtils.toJndiControls( codec, new Control[]
             { ctl } ) );
         list = sysRoot.search( "", "(objectClass=*)", searchControls );
@@ -1419,8 +1417,7 @@ public class SubentryServiceIT extends AbstractLdapTestUnit
         connection.add( getTestSubentryWithExclusion( "cn=testsubentry,ou=system" ) );
 
         Entry result = connection.lookup( "cn=testsubentry,ou=system", new Control[]
-            {
-            new SubentriesDecorator( connection.getCodecService() ) }, "subtreeSpecification" );
+            { new SubentriesImpl() }, "subtreeSpecification" );
 
         assertNotNull( result );
         String ss = result.get( "SubtreeSpecification" ).getString();
diff --git a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
index bfa8f35..5dea15d 100644
--- a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
+++ b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
@@ -47,24 +47,11 @@ import javax.naming.spi.DirStateFactory;
 import javax.naming.spi.DirectoryManager;
 
 import org.apache.directory.api.asn1.DecoderException;
-import org.apache.directory.api.ldap.codec.api.CodecControl;
-import org.apache.directory.api.ldap.codec.controls.cascade.CascadeDecorator;
-import org.apache.directory.api.ldap.codec.controls.manageDsaIT.ManageDsaITDecorator;
-import org.apache.directory.api.ldap.codec.controls.search.entryChange.EntryChangeDecorator;
-import org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsDecorator;
-import org.apache.directory.api.ldap.codec.controls.search.persistentSearch.PersistentSearchDecorator;
-import org.apache.directory.api.ldap.codec.controls.search.subentries.SubentriesDecorator;
+import org.apache.directory.api.ldap.codec.api.ControlFactory;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequestImpl;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponseImpl;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyRequestDecorator;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseDecorator;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone.SyncDoneValue;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncRequest.SyncRequestValue;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValue;
-import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncDoneValueDecorator;
-import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncRequestValueDecorator;
-import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncStateValueDecorator;
 import org.apache.directory.api.ldap.extras.intermediate.syncrepl.SyncInfoValue;
 import org.apache.directory.api.ldap.model.constants.JndiPropertyConstants;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
@@ -83,10 +70,8 @@ import org.apache.directory.api.ldap.model.filter.PresenceNode;
 import org.apache.directory.api.ldap.model.message.AliasDerefMode;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.message.controls.Cascade;
-import org.apache.directory.api.ldap.model.message.controls.CascadeImpl;
 import org.apache.directory.api.ldap.model.message.controls.EntryChange;
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
-import org.apache.directory.api.ldap.model.message.controls.ManageDsaITImpl;
 import org.apache.directory.api.ldap.model.message.controls.PagedResults;
 import org.apache.directory.api.ldap.model.message.controls.PersistentSearch;
 import org.apache.directory.api.ldap.model.message.controls.Subentries;
@@ -386,87 +371,30 @@ public abstract class ServerContext implements EventContext
     private org.apache.directory.api.ldap.model.message.Control convertControl( boolean isRequest,
         Control jndiControl ) throws DecoderException
     {
-        String controlIDStr = jndiControl.getID();
-        CodecControl<? extends org.apache.directory.api.ldap.model.message.Control> control = null;
-
-        ControlEnum controlId = ADS_CONTROLS.get( controlIDStr );
-
-        switch ( controlId )
+        String controlIdStr = jndiControl.getID();
+        
+        ControlFactory<?> controlFactory;
+        
+        if ( isRequest )
         {
-            case CASCADE_CONTROL:
-                control = new CascadeDecorator( getDirectoryService().getLdapCodecService(), new CascadeImpl() );
-
-                break;
-
-            case ENTRY_CHANGE_CONTROL:
-                control = new EntryChangeDecorator( getDirectoryService().getLdapCodecService() );
-
-                break;
-
-            case MANAGE_DSA_IT_CONTROL:
-                control = new ManageDsaITDecorator( getDirectoryService().getLdapCodecService(), new ManageDsaITImpl() );
-
-                break;
-
-            case PAGED_RESULTS_CONTROL:
-                control = new PagedResultsDecorator( getDirectoryService().getLdapCodecService() );
-
-                break;
-
-            case PASSWORD_POLICY_REQUEST_CONTROL:
-                if ( isRequest )
-                {
-                    control = new PasswordPolicyRequestDecorator( getDirectoryService().getLdapCodecService(),
-                        new PasswordPolicyRequestImpl() );
-                }
-                else
-                {
-                    control = new PasswordPolicyResponseDecorator( getDirectoryService().getLdapCodecService(),
-                        new PasswordPolicyResponseImpl() );
-                }
-
-                break;
-
-            case PERSISTENT_SEARCH_CONTROL:
-                control = new PersistentSearchDecorator( getDirectoryService().getLdapCodecService() );
-
-                break;
-
-            case SUBENTRIES_CONTROL:
-                control = new SubentriesDecorator( getDirectoryService().getLdapCodecService() );
-
-                break;
-
-            case SYNC_DONE_VALUE_CONTROL:
-                control = new SyncDoneValueDecorator( getDirectoryService().getLdapCodecService() );
-
-                break;
-
-            case SYNC_REQUEST_VALUE_CONTROL:
-                control = new SyncRequestValueDecorator( getDirectoryService().getLdapCodecService() );
-
-                break;
-
-            case SYNC_STATE_VALUE_CONTROL:
-                control = new SyncStateValueDecorator( getDirectoryService().getLdapCodecService() );
-
-                break;
-
-            default:
-                throw new IllegalArgumentException( "Unsupported control " + controlIDStr );
+             controlFactory = service.getLdapCodecService().getRequestControlFactories().get( controlIdStr );
+        }
+        else
+        {
+            controlFactory = service.getLdapCodecService().getResponseControlFactories().get( controlIdStr );
         }
 
-        control.setCritical( jndiControl.isCritical() );
-        control.setValue( jndiControl.getEncodedValue() );
-
-        byte[] value = jndiControl.getEncodedValue();
-
-        if ( !Strings.isEmpty( value ) )
+        if ( controlFactory == null )
         {
-            control.decode( value );
+            throw new IllegalArgumentException( "Unsupported control " + controlIdStr );
         }
 
-        return control;
+        org.apache.directory.api.ldap.model.message.Control apiControl = controlFactory.newControl();
+        
+        apiControl.setCritical( jndiControl.isCritical() );
+        controlFactory.decodeValue( apiControl, jndiControl.getEncodedValue() );
+
+        return apiControl;
     }
 
 
diff --git a/interceptors/authn/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java b/interceptors/authn/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
index bff1122..01f8328 100644
--- a/interceptors/authn/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
+++ b/interceptors/authn/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
@@ -48,8 +48,9 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponse;
+import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponseImpl;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyErrorEnum;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseDecorator;
 import org.apache.directory.api.ldap.model.constants.AuthenticationLevel;
 import org.apache.directory.api.ldap.model.constants.LdapSecurityConstants;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
@@ -370,8 +371,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
             {
                 if ( isPPolicyReqCtrlPresent )
                 {
-                    PasswordPolicyResponseDecorator responseControl =
-                        new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                    PasswordPolicyResponse responseControl = new PasswordPolicyResponseImpl();
                     responseControl.setPasswordPolicyError(
                         PasswordPolicyErrorEnum.get( e.getErrorCode() ) );
                     addContext.addResponseControl( responseControl );
@@ -561,8 +561,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
 
         PasswordPolicyException ppe = null;
         boolean isPPolicyReqCtrlPresent = bindContext.hasRequestControl( PasswordPolicyRequest.OID );
-        PasswordPolicyResponseDecorator pwdRespCtrl =
-            new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+        PasswordPolicyResponse pwdRespCtrl = new PasswordPolicyResponseImpl();
         boolean authenticated = false;
 
         Authenticator authenticator = selectAuthenticator( bindDn, level );
@@ -1018,8 +1017,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
                 {
                     if ( isPPolicyReqCtrlPresent )
                     {
-                        PasswordPolicyResponseDecorator responseControl =
-                            new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                        PasswordPolicyResponse responseControl = new PasswordPolicyResponseImpl();
                         responseControl.setPasswordPolicyError(
                             PasswordPolicyErrorEnum.PASSWORD_TOO_YOUNG );
                         modifyContext.addResponseControl( responseControl );
@@ -1039,8 +1037,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
                 {
                     if ( isPPolicyReqCtrlPresent )
                     {
-                        PasswordPolicyResponseDecorator responseControl =
-                            new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                        PasswordPolicyResponse responseControl = new PasswordPolicyResponseImpl();
                         responseControl.setPasswordPolicyError(
                             PasswordPolicyErrorEnum.get( e.getErrorCode() ) );
                         modifyContext.addResponseControl( responseControl );
@@ -1168,8 +1165,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
                 {
                     if ( isPPolicyReqCtrlPresent )
                     {
-                        PasswordPolicyResponseDecorator responseControl =
-                            new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                        PasswordPolicyResponse responseControl = new PasswordPolicyResponseImpl();
                         responseControl.setPasswordPolicyError(
                             PasswordPolicyErrorEnum.PASSWORD_IN_HISTORY );
                         modifyContext.addResponseControl( responseControl );
@@ -1263,8 +1259,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
        {
            if ( isPPolicyReqCtrlPresent )
            {
-               PasswordPolicyResponseDecorator responseControl =
-                   new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+               PasswordPolicyResponse responseControl = new PasswordPolicyResponseImpl();
                responseControl.setPasswordPolicyError(
                    PasswordPolicyErrorEnum.CHANGE_AFTER_RESET );
                modifyContext.addResponseControl( responseControl );
@@ -1290,8 +1285,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
 
             if ( isPPolicyReqCtrlPresent )
             {
-                PasswordPolicyResponseDecorator responseControl =
-                    new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                PasswordPolicyResponse responseControl = new PasswordPolicyResponseImpl();
                 responseControl.setPasswordPolicyError(
                     PasswordPolicyErrorEnum.MUST_SUPPLY_OLD_PASSWORD );
                 modifyContext.addResponseControl( responseControl );
@@ -1314,8 +1308,7 @@ public class AuthenticationInterceptor extends BaseInterceptor
         {
             if ( isPPolicyReqCtrlPresent )
             {
-                PasswordPolicyResponseDecorator responseControl =
-                    new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
+                PasswordPolicyResponse responseControl = new PasswordPolicyResponseImpl();
                 responseControl.setPasswordPolicyError(
                     PasswordPolicyErrorEnum.PASSWORD_MOD_NOT_ALLOWED );
                 modifyContext.addResponseControl( responseControl );
@@ -1715,10 +1708,9 @@ public class AuthenticationInterceptor extends BaseInterceptor
 
                 if ( isPPolicyReqCtrlPresent )
                 {
-                    PasswordPolicyResponseDecorator pwdRespCtrl =
-                        new PasswordPolicyResponseDecorator( directoryService.getLdapCodecService() );
-                    pwdRespCtrl.setPasswordPolicyError( PasswordPolicyErrorEnum.CHANGE_AFTER_RESET );
-                    opContext.addResponseControl( pwdRespCtrl );
+                    PasswordPolicyResponse responseControl = new PasswordPolicyResponseImpl();
+                    responseControl.setPasswordPolicyError( PasswordPolicyErrorEnum.CHANGE_AFTER_RESET );
+                    opContext.addResponseControl( responseControl );
                 }
 
                 throw new LdapNoPermissionException( "password needs to be reset before performing this operation" );
diff --git a/interceptors/subtree/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java b/interceptors/subtree/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
index 48c5907..7acc649 100644
--- a/interceptors/subtree/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
+++ b/interceptors/subtree/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
@@ -27,7 +27,6 @@ import java.util.Set;
 
 import javax.naming.directory.SearchControls;
 
-import org.apache.directory.api.ldap.codec.controls.search.subentries.SubentriesDecorator;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.DefaultAttribute;
@@ -344,9 +343,8 @@ public class SubentryInterceptor extends BaseInterceptor
         // found the subentry request control so we return its value
         if ( opContext.hasRequestControl( SUBENTRY_CONTROL ) )
         {
-            SubentriesDecorator subentriesDecorator = ( SubentriesDecorator ) opContext
-                .getRequestControl( SUBENTRY_CONTROL );
-            return subentriesDecorator.getDecorated().isVisible();
+            Subentries subentries = ( Subentries ) opContext.getRequestControl( SUBENTRY_CONTROL );
+            return subentries.isVisible();
         }
 
         return false;
diff --git a/protocol-ldap/pom.xml b/protocol-ldap/pom.xml
index 6369550..050b810 100644
--- a/protocol-ldap/pom.xml
+++ b/protocol-ldap/pom.xml
@@ -217,7 +217,6 @@
                 org.apache.directory.api.ldap.codec.api;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.codec.controls.manageDsaIT;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.codec.controls.search.pagedSearch;version=${org.apache.directory.api.version},
-                org.apache.directory.api.ldap.codec.decorators;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.extras.controls;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.extras.controls.ppolicy;version=${org.apache.directory.api.version},
                 org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone;version=${org.apache.directory.api.version},
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolHandler.java
index c4d0223..82d98b6 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolHandler.java
@@ -20,9 +20,8 @@
 package org.apache.directory.server.ldap;
 
 
-import org.apache.directory.api.ldap.codec.api.AbstractMessageDecorator;
 import org.apache.directory.api.ldap.codec.api.LdapDecoder;
-import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
+import org.apache.directory.api.ldap.codec.api.LdapMessageContainerDirect;
 import org.apache.directory.api.ldap.codec.api.SchemaBinaryAttributeDetector;
 import org.apache.directory.api.ldap.model.exception.ResponseCarryingMessageException;
 import org.apache.directory.api.ldap.model.message.Control;
@@ -87,8 +86,8 @@ class LdapProtocolHandler extends DemuxingIoHandler
         session.setAttribute( LdapDecoder.MAX_PDU_SIZE_ATTR, ldapServer.getDirectoryService().getMaxPDUSize() );
 
         // Last, store the message container
-        LdapMessageContainer<? extends AbstractMessageDecorator<Message>> ldapMessageContainer =
-            new LdapMessageContainer<>(
+        LdapMessageContainerDirect<Message> ldapMessageContainer =
+            new LdapMessageContainerDirect<>(
                 ldapServer.getDirectoryService().getLdapCodecService(),
                 new SchemaBinaryAttributeDetector(
                     ldapServer.getDirectoryService().getSchemaManager() ) );
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/CertGenerationRequestHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/CertGenerationRequestHandler.java
index d1d43fe..6d81110 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/CertGenerationRequestHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/CertGenerationRequestHandler.java
@@ -26,6 +26,7 @@ import java.util.Set;
 
 import org.apache.directory.api.ldap.extras.extended.certGeneration.CertGenerationRequest;
 import org.apache.directory.api.ldap.extras.extended.certGeneration.CertGenerationResponse;
+import org.apache.directory.api.ldap.extras.extended.certGeneration.CertGenerationResponseImpl;
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.server.core.api.entry.ClonedServerEntry;
@@ -87,6 +88,11 @@ public class CertGenerationRequestHandler
                 req.getSubjectDN(),
                 req.getKeyAlgorithm() );
         }
+
+        CertGenerationResponse certGenerationResponse = new CertGenerationResponseImpl( req.getMessageId() );
+
+        // write the response
+        session.getIoSession().write( certGenerationResponse );
     }
 
 
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/EndTransactionHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/EndTransactionHandler.java
index ab30426..d2580c5 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/EndTransactionHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/EndTransactionHandler.java
@@ -24,7 +24,6 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.directory.api.ldap.extras.extended.ads_impl.endTransaction.EndTransactionRequestDecorator;
 import org.apache.directory.api.ldap.extras.extended.endTransaction.EndTransactionRequest;
 import org.apache.directory.api.ldap.extras.extended.endTransaction.EndTransactionResponse;
 import org.apache.directory.api.ldap.extras.extended.endTransaction.EndTransactionResponseImpl;
@@ -76,7 +75,7 @@ public class EndTransactionHandler implements ExtendedOperationHandler<ExtendedR
         // We need to create a new transaction ID for the current session.
         // If the current session is already processing a transaction, we will return an error
         CoreSession coreSession = session.getCoreSession();
-        coreSession.endSessionTransaction( ( ( EndTransactionRequestDecorator ) req ).getCommit() );
+        coreSession.endSessionTransaction( ( ( EndTransactionRequest ) req ).getCommit() );
 
         EndTransactionResponse endTransactionResponse = new EndTransactionResponseImpl( req.getMessageId() );
 
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/GracefulShutdownHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/GracefulShutdownHandler.java
index 4980392..d127cb5 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/GracefulShutdownHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/GracefulShutdownHandler.java
@@ -259,7 +259,7 @@ public class GracefulShutdownHandler implements
                 try
                 {
                     future.awaitUninterruptibly( 1000 );
-                    sessionIt.next().close( true );
+                    sessionIt.next().closeNow();
                 }
                 catch ( Exception e )
                 {
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/StoredProcedureExtendedOperationHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/StoredProcedureExtendedOperationHandler.java
index ffe92c2..905a867 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/StoredProcedureExtendedOperationHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/StoredProcedureExtendedOperationHandler.java
@@ -28,7 +28,8 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.commons.lang3.SerializationUtils;
-import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.extras.extended.ads_impl.storedProcedure.StoredProcedureFactory;
 import org.apache.directory.api.ldap.extras.extended.storedProcedure.StoredProcedureRequest;
 import org.apache.directory.api.ldap.extras.extended.storedProcedure.StoredProcedureResponse;
 import org.apache.directory.api.ldap.model.entry.Entry;
@@ -94,9 +95,11 @@ public class StoredProcedureExtendedOperationHandler implements
         Object[] values = valueList.toArray( EMPTY_CLASS_ARRAY );
         Object response = engine.invokeProcedure( session.getCoreSession(), procedure, values );
         byte[] serializedResponse = SerializationUtils.serialize( ( Serializable ) response );
-        StoredProcedureResponse resp =
-            LdapApiServiceFactory.getSingleton().newExtendedResponse( req.getRequestName(), req.getMessageId(),
-                serializedResponse );
+        LdapApiService codec = session.getLdapServer().getDirectoryService().getLdapCodecService();
+        StoredProcedureFactory factory = ( StoredProcedureFactory ) codec.getExtendedResponseFactories().get( req.getRequestName() );
+        StoredProcedureResponse resp = ( StoredProcedureResponse ) factory.newResponse( serializedResponse );
+        resp.setMessageId( req.getMessageId() );
+        
         session.getIoSession().write( resp );
     }
 
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/WhoAmIHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/WhoAmIHandler.java
index 32ecb81..f8982c9 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/WhoAmIHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/extended/WhoAmIHandler.java
@@ -24,6 +24,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
+import org.apache.directory.api.ldap.extras.extended.ads_impl.whoAmI.WhoAmIFactory;
 import org.apache.directory.api.ldap.extras.extended.whoAmI.WhoAmIRequest;
 import org.apache.directory.api.ldap.extras.extended.whoAmI.WhoAmIResponse;
 import org.apache.directory.api.ldap.extras.extended.whoAmI.WhoAmIResponseImpl;
@@ -74,9 +75,11 @@ public class WhoAmIHandler implements ExtendedOperationHandler<WhoAmIRequest, Wh
 
         LdapPrincipal ldapPrincipal = requestor.getCoreSession().getAuthenticatedPrincipal();
         
-        WhoAmIResponse whoAmIResponse = new WhoAmIResponseImpl( req.getMessageId(), ResultCodeEnum.SUCCESS );
+        WhoAmIResponseImpl whoAmIResponse = new WhoAmIResponseImpl( req.getMessageId(), ResultCodeEnum.SUCCESS );
 
         String authzId = "dn:" + ldapPrincipal.getDn();
+       
+        WhoAmIFactory.decode( whoAmIResponse, Strings.getBytesUtf8( authzId ) );
         whoAmIResponse.setAuthzId( Strings.getBytesUtf8( authzId ) );
         
         // write the response
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java
index e627017..82bb76e 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java
@@ -29,7 +29,6 @@ import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsDecorator;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncRequest.SyncRequestValue;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.cursor.Cursor;
@@ -62,6 +61,7 @@ import org.apache.directory.api.ldap.model.message.SearchResultReferenceImpl;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
 import org.apache.directory.api.ldap.model.message.controls.PagedResults;
+import org.apache.directory.api.ldap.model.message.controls.PagedResultsImpl;
 import org.apache.directory.api.ldap.model.message.controls.PersistentSearch;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
@@ -437,7 +437,7 @@ public class SearchRequestHandler extends LdapRequestHandler<SearchRequest>
 
     private void readPagedResults( LdapSession session, SearchRequest req, LdapResult ldapResult,
         Cursor<Entry> cursor, long sizeLimit, int pagedLimit, PagedSearchContext pagedContext,
-        PagedResultsDecorator pagedResultsControl ) throws Exception
+        PagedResults pagedResultsControl ) throws Exception
     {
         req.addAbandonListener( new SearchAbandonListener( ldapServer, cursor ) );
         setTimeLimitsOnCursor( req, session, cursor );
@@ -496,8 +496,7 @@ public class SearchRequestHandler extends LdapRequestHandler<SearchRequest>
                 }
             }
 
-            pagedResultsControl = new PagedResultsDecorator( ldapServer.getDirectoryService()
-                .getLdapCodecService() );
+            pagedResultsControl = new PagedResultsImpl();
             pagedResultsControl.setCritical( true );
             pagedResultsControl.setSize( 0 );
             req.getResultResponse().addControl( pagedResultsControl );
@@ -591,11 +590,11 @@ public class SearchRequestHandler extends LdapRequestHandler<SearchRequest>
     /**
      * Handle a Paged Search request.
      */
-    private SearchResultDone doPagedSearch( LdapSession session, SearchRequest req, PagedResultsDecorator control )
+    private SearchResultDone doPagedSearch( LdapSession session, SearchRequest req, PagedResults control )
         throws Exception
     {
-        PagedResultsDecorator pagedSearchControl = control;
-        PagedResultsDecorator pagedResultsControl = null;
+        PagedResults pagedSearchControl = control;
+        PagedResults pagedResultsControl = null;
 
         // Get the size limits
         // Don't bother setting size limits for administrators that don't ask for it
@@ -676,8 +675,7 @@ public class SearchRequestHandler extends LdapRequestHandler<SearchRequest>
 
                 session.addPagedSearchContext( pagedContext );
                 cookie = pagedContext.getCookie();
-                pagedResultsControl = new PagedResultsDecorator( ldapServer.getDirectoryService()
-                    .getLdapCodecService() );
+                pagedResultsControl = new PagedResultsImpl();
                 pagedResultsControl.setCookie( cookie );
                 pagedResultsControl.setSize( 0 );
                 pagedResultsControl.setCritical( true );
@@ -710,8 +708,7 @@ public class SearchRequestHandler extends LdapRequestHandler<SearchRequest>
 
                 // get the cookie
                 cookie = pagedContext.getCookie();
-                pagedResultsControl = new PagedResultsDecorator( ldapServer.getDirectoryService()
-                    .getLdapCodecService() );
+                pagedResultsControl = new PagedResultsImpl();
                 pagedResultsControl.setCookie( cookie );
                 pagedResultsControl.setSize( 0 );
                 pagedResultsControl.setCritical( true );
@@ -734,8 +731,7 @@ public class SearchRequestHandler extends LdapRequestHandler<SearchRequest>
                 session.addPagedSearchContext( pagedContext );
 
                 cookie = pagedContext.getCookie();
-                pagedResultsControl = new PagedResultsDecorator( ldapServer.getDirectoryService()
-                    .getLdapCodecService() );
+                pagedResultsControl = new PagedResultsImpl();
                 pagedResultsControl.setCookie( cookie );
                 pagedResultsControl.setSize( 0 );
                 pagedResultsControl.setCritical( true );
@@ -792,7 +788,7 @@ public class SearchRequestHandler extends LdapRequestHandler<SearchRequest>
         if ( control != null )
         {
             // Let's deal with the pagedControl
-            return doPagedSearch( session, req, ( PagedResultsDecorator ) control );
+            return doPagedSearch( session, req, ( PagedResults ) control );
         }
 
         // A normal search
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/consumer/ReplicationConsumerImpl.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/consumer/ReplicationConsumerImpl.java
index 0a1983d..37759c5 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/consumer/ReplicationConsumerImpl.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/consumer/ReplicationConsumerImpl.java
@@ -27,15 +27,14 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.collections4.map.LRUMap;
-import org.apache.directory.api.ldap.codec.controls.manageDsaIT.ManageDsaITDecorator;
 import org.apache.directory.api.ldap.extras.controls.SynchronizationModeEnum;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone.SyncDoneValue;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncRequest.SyncRequestValue;
+import org.apache.directory.api.ldap.extras.controls.syncrepl.syncRequest.SyncRequestValueImpl;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateTypeEnum;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValue;
-import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncRequestValueDecorator;
 import org.apache.directory.api.ldap.extras.intermediate.syncrepl.SyncInfoValue;
-import org.apache.directory.api.ldap.extras.intermediate.syncrepl_impl.SyncInfoValueDecorator;
+import org.apache.directory.api.ldap.extras.intermediate.syncrepl.SyncInfoValueImpl;
 import org.apache.directory.api.ldap.model.constants.Loggers;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.csn.Csn;
@@ -296,8 +295,7 @@ public class ReplicationConsumerImpl implements ConnectionClosedEventListener, R
 
         if ( !config.isChaseReferrals() )
         {
-            searchRequest.addControl( new ManageDsaITDecorator( directoryService.getLdapCodecService(),
-                new ManageDsaITImpl() ) );
+            searchRequest.addControl( new ManageDsaITImpl() );
         }
 
         if ( CONSUMER_LOG.isDebugEnabled() )
@@ -488,8 +486,7 @@ public class ReplicationConsumerImpl implements ConnectionClosedEventListener, R
                 return;
             }
 
-            SyncInfoValueDecorator decorator = new SyncInfoValueDecorator( directoryService.getLdapCodecService() );
-            SyncInfoValue syncInfoValue = ( SyncInfoValue ) decorator.decode( syncInfoBytes );
+            SyncInfoValue syncInfoValue = new SyncInfoValueImpl();
 
             byte[] cookie = syncInfoValue.getCookie();
 
@@ -751,7 +748,7 @@ public class ReplicationConsumerImpl implements ConnectionClosedEventListener, R
     {
         CONSUMER_LOG.debug( "Starting synchronization mode {}, reloadHint {}", syncType, reloadHint );
         // Prepare the Syncrepl Request
-        SyncRequestValue syncReq = new SyncRequestValueDecorator( directoryService.getLdapCodecService() );
+        SyncRequestValue syncReq = new SyncRequestValueImpl();
 
         syncReq.setMode( syncType );
         syncReq.setReloadHint( reloadHint );
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/provider/SyncReplRequestHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/provider/SyncReplRequestHandler.java
index 0edac1f..154ab4c 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/provider/SyncReplRequestHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/provider/SyncReplRequestHandler.java
@@ -40,11 +40,11 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.directory.api.ldap.extras.controls.SynchronizationModeEnum;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone.SyncDoneValue;
+import org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone.SyncDoneValueImpl;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncRequest.SyncRequestValue;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateTypeEnum;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValue;
-import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncDoneValueDecorator;
-import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncStateValueDecorator;
+import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValueImpl;
 import org.apache.directory.api.ldap.extras.intermediate.syncrepl.SyncInfoValue;
 import org.apache.directory.api.ldap.extras.intermediate.syncrepl.SyncInfoValueImpl;
 import org.apache.directory.api.ldap.extras.intermediate.syncrepl.SynchronizationInfoEnum;
@@ -464,8 +464,7 @@ public class SyncReplRequestHandler implements ReplicationRequestHandler
             {
                 SearchResultDone searchDoneResp = ( SearchResultDone ) req.getResultResponse();
                 searchDoneResp.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
-                SyncDoneValue syncDone = new SyncDoneValueDecorator(
-                    ldapServer.getDirectoryService().getLdapCodecService() );
+                SyncDoneValue syncDone = new SyncDoneValueImpl();
                 syncDone.setCookie( cookie );
                 searchDoneResp.addControl( syncDone );
 
@@ -608,8 +607,7 @@ public class SyncReplRequestHandler implements ReplicationRequestHandler
                 byte[] cookie = LdapProtocolUtils.createCookie( replicaLog.getId(), contextCsn );
 
                 // no need to send from the log, that will be done in the next refreshOnly session
-                SyncDoneValue syncDone = new SyncDoneValueDecorator(
-                    ldapServer.getDirectoryService().getLdapCodecService() );
+                SyncDoneValue syncDone = new SyncDoneValueImpl();
                 syncDone.setCookie( cookie );
                 searchDoneResp.addControl( syncDone );
                 PROVIDER_LOG.info( "Sending the searchResultDone response to consumer {}, {}", replicaLog,
@@ -763,8 +761,7 @@ public class SyncReplRequestHandler implements ReplicationRequestHandler
         Attribute uuid = entry.get( SchemaConstants.ENTRY_UUID_AT );
 
         // Create the SyncState control
-        SyncStateValue syncStateControl = new SyncStateValueDecorator(
-            ldapServer.getDirectoryService().getLdapCodecService() );
+        SyncStateValue syncStateControl = new SyncStateValueImpl();
         syncStateControl.setSyncStateType( syncStateType );
         syncStateControl.setEntryUUID( Strings.uuidToBytes( uuid.getString() ) );
 
@@ -1157,8 +1154,7 @@ public class SyncReplRequestHandler implements ReplicationRequestHandler
     {
         SearchResultDone searchDoneResp = ( SearchResultDone ) req.getResultResponse();
         searchDoneResp.getLdapResult().setResultCode( ResultCodeEnum.E_SYNC_REFRESH_REQUIRED );
-        SyncDoneValue syncDone = new SyncDoneValueDecorator(
-            ldapServer.getDirectoryService().getLdapCodecService() );
+        SyncDoneValue syncDone = new SyncDoneValueImpl();
         searchDoneResp.addControl( syncDone );
 
         session.getIoSession().write( searchDoneResp );
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/provider/SyncReplSearchListener.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/provider/SyncReplSearchListener.java
index 4f6ebe8..8cef693 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/provider/SyncReplSearchListener.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/provider/SyncReplSearchListener.java
@@ -22,7 +22,7 @@ package org.apache.directory.server.ldap.replication.provider;
 
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateTypeEnum;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValue;
-import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncStateValueDecorator;
+import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValueImpl;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
@@ -175,7 +175,7 @@ public class SyncReplSearchListener implements DirectoryListener, AbandonListene
     private SyncStateValue createControl( DirectoryService directoryService, SyncStateTypeEnum operation, Entry entry ) 
         throws LdapInvalidAttributeValueException
     {
-        SyncStateValue syncStateValue = new SyncStateValueDecorator( directoryService.getLdapCodecService() );
+        SyncStateValue syncStateValue = new SyncStateValueImpl();
 
         syncStateValue.setSyncStateType( operation );
         String uuidStr = entry.get( SchemaConstants.ENTRY_UUID_AT ).getString();
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/bind/SaslBindIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/bind/SaslBindIT.java
index 1f46b07..3aa3a9a 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/bind/SaslBindIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/bind/SaslBindIT.java
@@ -36,10 +36,9 @@ import javax.naming.directory.InitialDirContext;
 
 import org.apache.commons.net.SocketClient;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.codec.api.AbstractMessageDecorator;
 import org.apache.directory.api.ldap.codec.api.LdapDecoder;
 import org.apache.directory.api.ldap.codec.api.LdapEncoder;
-import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
+import org.apache.directory.api.ldap.codec.api.LdapMessageContainerDirect;
 import org.apache.directory.api.ldap.model.constants.SaslQoP;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.constants.SupportedSaslMechanisms;
@@ -728,8 +727,9 @@ public class SaslBindIT extends AbstractLdapTestUnit
             }
 
             // Retrieve the response back from server to my last request.
-            LdapMessageContainer<AbstractMessageDecorator<? extends Message>> container = new LdapMessageContainer(
+            LdapMessageContainerDirect<? extends Message> container = new LdapMessageContainerDirect(
                 ldapServer.getDirectoryService().getLdapCodecService() );
+            
             return ( BindResponse ) decoder.decode( _input_, container );
         }
 
@@ -767,8 +767,9 @@ public class SaslBindIT extends AbstractLdapTestUnit
             }
 
             // Retrieve the response back from server to my last request.
-            LdapMessageContainer<AbstractMessageDecorator<? extends Message>> container = new LdapMessageContainer(
+            LdapMessageContainerDirect<? extends Message> container = new LdapMessageContainerDirect(
                 ldapServer.getDirectoryService().getLdapCodecService() );
+            
             return ( BindResponse ) decoder.decode( _input_, container );
         }
     }
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/extended/DitUtilitiesProcedure.java b/server-integ/src/test/java/org/apache/directory/server/operations/extended/DitUtilitiesProcedure.java
index bdf56eb..8b91285 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/extended/DitUtilitiesProcedure.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/extended/DitUtilitiesProcedure.java
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
 
 public class DitUtilitiesProcedure
 {
-    private static final Logger log = LoggerFactory.getLogger( DitUtilitiesProcedure.class );
+    private static final Logger LOG = LoggerFactory.getLogger( DitUtilitiesProcedure.class );
 
 
     /**
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/extended/PwdModifyIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/extended/PwdModifyIT.java
index 71df9b4..7dd5397 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/extended/PwdModifyIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/extended/PwdModifyIT.java
@@ -28,14 +28,10 @@ import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
-import org.apache.directory.api.ldap.codec.api.LdapApiService;
 import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyErrorEnum;
-import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequestImpl;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponse;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponseImpl;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseDecorator;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyRequest;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyRequestImpl;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyResponse;
@@ -90,10 +86,7 @@ import org.junit.runner.RunWith;
     { Sha512PasswordHashingInterceptor.class })
 public class PwdModifyIT extends AbstractLdapTestUnit
 {
-    private static final LdapApiService codec = LdapApiServiceFactory.getSingleton();
-
-    private static final PasswordPolicyResponseDecorator PP_REQ_CTRL =
-        new PasswordPolicyResponseDecorator( codec, new PasswordPolicyResponseImpl() );
+    private static final PasswordPolicyResponse PP_REQ_CTRL = new PasswordPolicyResponseImpl();
 
     /** The passwordPolicy configuration */
     private PasswordPolicyConfiguration policyConfig;
@@ -111,7 +104,7 @@ public class PwdModifyIT extends AbstractLdapTestUnit
             return null;
         }
 
-        return ( ( PasswordPolicyResponseDecorator ) control ).getDecorated();
+        return ( PasswordPolicyResponse ) control;
     }
 
 
@@ -517,8 +510,8 @@ public class PwdModifyIT extends AbstractLdapTestUnit
             Dn userDn = new Dn( "cn=UserXY,ou=system" );
 
             userConnection = getNetworkConnectionAs( ldapServer, userDn.toString(), "secret3" );
-            PasswordPolicyResponseDecorator passwordPolicyRequestControl =
-                new PasswordPolicyResponseDecorator( LdapApiServiceFactory.getSingleton(), new PasswordPolicyResponseImpl() );
+            PasswordPolicyResponse passwordPolicyRequestControl =
+                new PasswordPolicyResponseImpl();
             PasswordModifyRequest selfPwdModifyRequest = new PasswordModifyRequestImpl();
             selfPwdModifyRequest.setUserIdentity( Strings.getBytesUtf8( userDn.getNormName() ) );
             selfPwdModifyRequest.setOldPassword( Strings.getBytesUtf8( "secret3" ) );
@@ -533,8 +526,8 @@ public class PwdModifyIT extends AbstractLdapTestUnit
                 .getControl( passwordPolicyRequestControl.getOid() );
             assertNotNull( passwordPolicyResponseControl );
             assertEquals( PasswordPolicyErrorEnum.PASSWORD_TOO_YOUNG,
-                ( ( PasswordPolicyResponseDecorator ) passwordPolicyResponseControl )
-                    .getDecorated().getPasswordPolicyError() );
+                ( ( PasswordPolicyResponse ) passwordPolicyResponseControl )
+                    .getPasswordPolicyError() );
 
             addUser( adminConnection, "UserZZ", "secret4" );
             Dn otherUserDn = new Dn( "cn=UserZZ,ou=system" );
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchApiIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchApiIT.java
index 09ebd90..8bd4b3a 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchApiIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchApiIT.java
@@ -33,7 +33,6 @@ import java.util.Set;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
 import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
-import org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsDecorator;
 import org.apache.directory.api.ldap.model.cursor.CursorException;
 import org.apache.directory.api.ldap.model.cursor.EntryCursor;
 import org.apache.directory.api.ldap.model.cursor.SearchCursor;
@@ -1036,7 +1035,7 @@ public class PagedSearchApiIT extends AbstractLdapTestUnit
         {
             connection.bind( "uid=admin,ou=system", "secret" );
     
-            PagedResults pagedSearchControl = new PagedResultsDecorator( codec );
+            PagedResults pagedSearchControl = new PagedResultsImpl();
             pagedSearchControl.setSize( 3 );
     
             SearchRequest searchRequest = new SearchRequestImpl();
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchIT.java
index c28ea18..d3e174f 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchIT.java
@@ -41,7 +41,6 @@ import javax.naming.ldap.PagedResultsResponseControl;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
 import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
-import org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsDecorator;
 import org.apache.directory.api.ldap.model.cursor.EntryCursor;
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.message.Control;
@@ -51,6 +50,7 @@ import org.apache.directory.api.ldap.model.message.SearchRequestImpl;
 import org.apache.directory.api.ldap.model.message.SearchResultDone;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.message.controls.PagedResults;
+import org.apache.directory.api.ldap.model.message.controls.PagedResultsImpl;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.util.JndiUtils;
 import org.apache.directory.api.util.Network;
@@ -220,7 +220,7 @@ public class PagedSearchIT extends AbstractLdapTestUnit
         SearchControls controls = new SearchControls();
         controls.setCountLimit( sizeLimit );
         controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
-        PagedResultsDecorator pagedSearchControl = new PagedResultsDecorator( codec );
+        PagedResults pagedSearchControl = new PagedResultsImpl();
         pagedSearchControl.setSize( pagedSize );
 
         ( ( LdapContext ) ctx ).setRequestControls( JndiUtils.toJndiControls( codec, new Control[]
@@ -237,7 +237,7 @@ public class PagedSearchIT extends AbstractLdapTestUnit
     private void createNextSearchControls( DirContext ctx, byte[] cookie, int pagedSize )
         throws NamingException, EncoderException
     {
-        PagedResultsDecorator pagedSearchControl = new PagedResultsDecorator( codec );
+        PagedResults pagedSearchControl = new PagedResultsImpl();
         pagedSearchControl.setCookie( cookie );
         pagedSearchControl.setSize( pagedSize );
         ( ( LdapContext ) ctx ).setRequestControls( JndiUtils.toJndiControls( codec, new Control[]
@@ -1040,7 +1040,7 @@ public class PagedSearchIT extends AbstractLdapTestUnit
         SearchControls controls = new SearchControls();
         controls.setCountLimit( ( int ) LdapServer.NO_SIZE_LIMIT );
         controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
-        PagedResults pagedSearchControl = new PagedResultsDecorator( codec );
+        PagedResults pagedSearchControl = new PagedResultsImpl();
         pagedSearchControl.setSize( 3 );
 
         // Loop over all the elements
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchApiIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchApiIT.java
index 52035d5..7811358 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchApiIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchApiIT.java
@@ -44,10 +44,8 @@ import javax.naming.event.ObjectChangeListener;
 import javax.naming.ldap.HasControls;
 import javax.naming.ldap.LdapContext;
 
-import org.apache.directory.api.ldap.codec.api.CodecControl;
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
-import org.apache.directory.api.ldap.codec.controls.search.entryChange.EntryChangeDecorator;
-import org.apache.directory.api.ldap.codec.controls.search.persistentSearch.PersistentSearchDecorator;
+import org.apache.directory.api.ldap.codec.controls.search.entryChange.EntryChangeFactory;
 import org.apache.directory.api.ldap.model.cursor.SearchCursor;
 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
 import org.apache.directory.api.ldap.model.entry.Entry;
@@ -605,23 +603,22 @@ public class PersistentSearchApiIT extends AbstractLdapTestUnit
     {
         boolean isReady = false;
         PSearchNotification result;
-        final PersistentSearchDecorator persistentSearch;
+        final PersistentSearch persistentSearch;
         LdapContext ctx;
         NamingEnumeration<SearchResult> list;
 
 
         PSearchListener()
         {
-            persistentSearch = new PersistentSearchDecorator( getLdapServer().getDirectoryService()
-                .getLdapCodecService() );
+            persistentSearch = new PersistentSearchImpl();
         }
 
 
         PSearchListener( PersistentSearch persistentSearch )
         {
-            CodecControl<? extends Control> wrapped =
-                getLdapServer().getDirectoryService().getLdapCodecService().newRequestControl( persistentSearch );
-            this.persistentSearch = ( PersistentSearchDecorator ) wrapped;
+            LdapApiService codec = getLdapServer().getDirectoryService().getLdapCodecService();
+            
+            this.persistentSearch = ( PersistentSearch ) codec.getRequestControlFactories().get( PersistentSearch.OID ).newControl();
         }
 
 
@@ -660,8 +657,8 @@ public class PersistentSearchApiIT extends AbstractLdapTestUnit
         {
             LOG.debug( "PSearchListener.run() called." );
             LdapApiService codec = getLdapServer().getDirectoryService().getLdapCodecService();
+            EntryChangeFactory factory = ( EntryChangeFactory ) codec.getResponseControlFactories().get( EntryChange.OID );
             persistentSearch.setCritical( true );
-            persistentSearch.setValue( persistentSearch.getValue() );
 
             Control[] ctxCtls = new Control[]
                 { persistentSearch };
@@ -694,7 +691,7 @@ public class PersistentSearchApiIT extends AbstractLdapTestUnit
                                     EntryChange.OID ) )
                                 {
                                     ecControl = ( EntryChange ) JndiUtils.fromJndiResponseControl( codec, jndiControl );
-                                    ( ( EntryChangeDecorator ) ecControl ).decode( jndiControl.getEncodedValue() );
+                                    factory.decodeValue( ecControl, jndiControl.getEncodedValue() );
                                 }
                             }
                         }
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java
index 866446f..467bfbd 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java
@@ -44,10 +44,8 @@ import javax.naming.event.ObjectChangeListener;
 import javax.naming.ldap.HasControls;
 import javax.naming.ldap.LdapContext;
 
-import org.apache.directory.api.ldap.codec.api.CodecControl;
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
-import org.apache.directory.api.ldap.codec.controls.search.entryChange.EntryChangeDecorator;
-import org.apache.directory.api.ldap.codec.controls.search.persistentSearch.PersistentSearchDecorator;
+import org.apache.directory.api.ldap.codec.controls.search.entryChange.EntryChangeFactory;
 import org.apache.directory.api.ldap.model.cursor.SearchCursor;
 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
 import org.apache.directory.api.ldap.model.entry.Entry;
@@ -605,23 +603,20 @@ public class PersistentSearchIT extends AbstractLdapTestUnit
     {
         boolean isReady = false;
         PSearchNotification result;
-        final PersistentSearchDecorator persistentSearch;
+        final PersistentSearch persistentSearch;
         LdapContext ctx;
         NamingEnumeration<SearchResult> list;
 
 
         PSearchListener()
         {
-            persistentSearch = new PersistentSearchDecorator( getLdapServer().getDirectoryService()
-                .getLdapCodecService() );
+            persistentSearch = new PersistentSearchImpl();
         }
 
 
         PSearchListener( PersistentSearch persistentSearch )
         {
-            CodecControl<? extends Control> wrapped =
-                getLdapServer().getDirectoryService().getLdapCodecService().newRequestControl( persistentSearch );
-            this.persistentSearch = ( PersistentSearchDecorator ) wrapped;
+            this.persistentSearch = persistentSearch;
         }
 
 
@@ -660,8 +655,8 @@ public class PersistentSearchIT extends AbstractLdapTestUnit
         {
             LOG.debug( "PSearchListener.run() called." );
             LdapApiService codec = getLdapServer().getDirectoryService().getLdapCodecService();
+            EntryChangeFactory factory = ( EntryChangeFactory ) codec.getResponseControlFactories().get( EntryChange.OID );
             persistentSearch.setCritical( true );
-            persistentSearch.setValue( persistentSearch.getValue() );
 
             Control[] ctxCtls = new Control[]
                 { persistentSearch };
@@ -694,7 +689,7 @@ public class PersistentSearchIT extends AbstractLdapTestUnit
                                     EntryChange.OID ) )
                                 {
                                     ecControl = ( EntryChange ) JndiUtils.fromJndiResponseControl( codec, jndiControl );
-                                    ( ( EntryChangeDecorator ) ecControl ).decode( jndiControl.getEncodedValue() );
+                                    factory.decodeValue( ecControl, jndiControl.getEncodedValue() );
                                 }
                             }
                         }
diff --git a/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java b/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java
index 2f0c14f..6d61ea5 100644
--- a/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java
@@ -45,7 +45,6 @@ import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyReque
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyErrorEnum;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequestImpl;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponse;
-import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseDecorator;
 import org.apache.directory.api.ldap.model.constants.LdapSecurityConstants;
 import org.apache.directory.api.ldap.model.constants.PasswordPolicySchemaConstants;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
@@ -167,7 +166,7 @@ public class PasswordPolicyIT extends AbstractLdapTestUnit
             return null;
         }
 
-        return ( ( PasswordPolicyResponseDecorator ) control ).getDecorated();
+        return ( PasswordPolicyResponse) control;
     }
 
 
diff --git a/server-integ/src/test/java/org/apache/directory/server/replication/MockSyncReplConsumer.java b/server-integ/src/test/java/org/apache/directory/server/replication/MockSyncReplConsumer.java
index 5e43043..a4717bd 100644
--- a/server-integ/src/test/java/org/apache/directory/server/replication/MockSyncReplConsumer.java
+++ b/server-integ/src/test/java/org/apache/directory/server/replication/MockSyncReplConsumer.java
@@ -32,17 +32,15 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.directory.api.ldap.codec.api.LdapApiService;
-import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
 import org.apache.directory.api.ldap.extras.controls.SyncModifyDnType;
 import org.apache.directory.api.ldap.extras.controls.SynchronizationModeEnum;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone.SyncDoneValue;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncRequest.SyncRequestValue;
+import org.apache.directory.api.ldap.extras.controls.syncrepl.syncRequest.SyncRequestValueImpl;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateTypeEnum;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValue;
-import org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncRequestValueDecorator;
 import org.apache.directory.api.ldap.extras.intermediate.syncrepl.SyncInfoValue;
-import org.apache.directory.api.ldap.extras.intermediate.syncrepl_impl.SyncInfoValueDecorator;
+import org.apache.directory.api.ldap.extras.intermediate.syncrepl_impl.SyncInfoValueFactory;
 import org.apache.directory.api.ldap.model.constants.Loggers;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.cursor.EntryCursor;
@@ -103,9 +101,6 @@ public class MockSyncReplConsumer implements ConnectionClosedEventListener, Repl
     /** A dedicated logger for the consumer */
     private static final Logger CONSUMER_LOG = LoggerFactory.getLogger( Loggers.CONSUMER_LOG.getName() );
 
-    /** The codec */
-    private LdapApiService ldapCodecService = LdapApiServiceFactory.getSingleton();
-
     /** the syncrepl configuration */
     private SyncReplConfiguration config;
 
@@ -414,8 +409,7 @@ public class MockSyncReplConsumer implements ConnectionClosedEventListener, Repl
                 return;
             }
 
-            SyncInfoValueDecorator decorator = new SyncInfoValueDecorator( ldapCodecService );
-            SyncInfoValue syncInfoValue = ( SyncInfoValue ) decorator.decode( syncInfoBytes );
+            SyncInfoValue syncInfoValue = new SyncInfoValueFactory().newResponse( syncInfoBytes );
 
             byte[] cookie = syncInfoValue.getCookie();
 
@@ -667,7 +661,7 @@ public class MockSyncReplConsumer implements ConnectionClosedEventListener, Repl
      */
     private ReplicationStatusEnum doSyncSearch( SynchronizationModeEnum syncType, boolean reloadHint ) throws Exception
     {
-        SyncRequestValue syncReq = new SyncRequestValueDecorator( ldapCodecService );
+        SyncRequestValue syncReq = new SyncRequestValueImpl();
 
         syncReq.setMode( syncType );
         syncReq.setReloadHint( reloadHint );
diff --git a/test-framework/src/main/java/org/apache/directory/server/core/integ/FrameworkRunner.java b/test-framework/src/main/java/org/apache/directory/server/core/integ/FrameworkRunner.java
index 52d73e4..fa73e97 100644
--- a/test-framework/src/main/java/org/apache/directory/server/core/integ/FrameworkRunner.java
+++ b/test-framework/src/main/java/org/apache/directory/server/core/integ/FrameworkRunner.java
@@ -192,6 +192,7 @@ public class FrameworkRunner extends BlockJUnit4ClassRunner
         }
         catch ( Exception e )
         {
+            e.printStackTrace();
             LOG.error( I18n.err( I18n.ERR_181, getTestClass().getName() ) );
             LOG.error( e.getLocalizedMessage() );
             notifier.fireTestFailure( new Failure( getDescription(), e ) );