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
|