this.handler.registerMessageType( clazz, handler );
    public LdapProtocolProvider( Hashtable env ) throws LdapNamingException    {        Hashtable copy = ( Hashtable ) env.clone();        copy.put( Context.PROVIDER_URL, "" );        SessionRegistry.releaseSingleton();        new SessionRegistry( copy );        Iterator requestTypes = DEFAULT_HANDLERS.keySet().iterator();        while( requestTypes.hasNext() )        {            MessageHandler handler = null;            String type = ( String ) requestTypes.next();            Class clazz = null;            if( copy.containsKey( type ) )            {                try                {                    clazz = Class.forName( ( String ) copy.get( type ) );                }                catch( ClassNotFoundException e )                {                    LdapNamingException lne;                    String msg = "failed to load class " + clazz;                    msg += " for processing " + type + " objects.";                    lne = new LdapNamingException( msg, ResultCodeEnum.OTHER );                    lne.setRootCause( e );                    throw lne;                }            }            else            {                clazz = ( Class ) DEFAULT_HANDLERS.get( type );            }            try            {                handler = ( MessageHandler ) clazz.newInstance();            }            catch( Exception e )            {                LdapNamingException lne;                String msg = "failed to create handler instance of " + clazz;                msg += " for processing " + type + " objects.";                lne = new LdapNamingException( msg, ResultCodeEnum.OTHER );                lne.setRootCause( e );                throw lne;            }            this.handler.registerMessageType( clazz, handler );        }        this.codecFactory = new ProtocolCodecFactoryImpl( copy );    }