directory-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Emmanuel Lecharny <elecha...@apache.org>
Subject Re: [ApacheDS] Using LdifEntry with a ModifyOperationContext
Date Wed, 18 Mar 2009 10:11:22 GMT
Yiannis Mavroukakis wrote:
>
> Hello everyone :-)
>
> I've got a problem trying to use LdifEntry with 
> ModifyOperationContext. If you remember from
> previous emails, I'm using LdifEntry because it can be serialized. I'm 
> stuffing my Modification
> objects in the LdifEntry object like so
>
>        for( AttributeType attributeType : list )
>        {
>            EntryAttribute entryAttribute = ( (ServerAttribute) entry
>                    .get( attributeType ) ).toClientAttribute( );
>            ldiff.addAttribute( entryAttribute );
>            if( changeType.equals( ChangeType.Modify ) )
>            {
>                ClientModification mod = new ClientModification(
>                        ModificationOperation.REPLACE_ATTRIBUTE ,
>                        entryAttribute );
>                ldiff.addModificationItem( mod );
>            }
>        }
>
> This serializes fine, however ModifyOperationContext.modify() gives me a
>
> java.lang.ClassCastException: 
> org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute 
> cannot be cast to org.apache.directory.server.core.entry.ServerAttribute
>
> when I pass the LdifEntry object modification list to it because it 
> expects ServerAttributes and not ClientAttributes and as far as I can 
> remember, ServerAttributes are not serializable (?). Is there any way 
> I can get around this requirement?
Just store the initial entry.getAttribute() into the modification :

       for( AttributeType attributeType : list )
       {
           EntryAttribute entryAttribute = ( (ServerAttribute) entry
                   .get( attributeType ) ).toClientAttribute( );
           ldiff.addAttribute( entryAttribute );
           if( changeType.equals( ChangeType.Modify ) )
           {
               ClientModification mod = new ClientModification(
                       ModificationOperation.REPLACE_ATTRIBUTE ,
                       entry.get( attributeType ) );                  
<----------------------
               ldiff.addModificationItem( mod );
           }
       }

It should work.


-- 
--
cordialement, regards,
Emmanuel L├ęcharny
www.iktek.com
directory.apache.org



Mime
View raw message