directory-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Yiannis Mavroukakis <imavrouka...@gameaccount.com>
Subject Re: [ApacheDS] Using LdifEntry with a ModifyOperationContext
Date Wed, 18 Mar 2009 18:02:36 GMT
Or maybe there is!..Almost a result, I am doing this now,

  List<Modification> modItems = ServerEntryUtils.toServerModification(
                                ldifEntry.getModificationItemsArray( ) ,
                                directoryService.getRegistries( 
).getAttributeTypeRegistry( ) );
                       
modOp.modify( ldifEntry.getDn( ) , modItems ,clusterBypass );
 
Modification: replace
, attribute :     entryCSN: '0x32 0x30 0x30 0x39 0x30 0x33 0x31 0x31 
0x31 0x37 0x33 0x31 0x33 0x31 0x2E 0x30 ...'

It now blows up with the following exception,

javax.naming.NoPermissionException: Cannot modify the attribute 'entryCSN']

Why is it not possible to modify this? Is this a per-server unique 
value? And if so I assume it won't hurt if I don't include it in the 
Modification List in ldifEntry?

Thanks guys,

Yiannis.

Yiannis Mavroukakis wrote:
> Ouch I just realised this won't really ever 
> work..ModifyOperationContext requires a ServerModification item for it 
> to work, which in turns requires ServerAttribute to be constructed and 
> I can't get any of them out of an Ldif object in the context of a 
> Modify operation...double damn!
>
> Y.
>
> Yiannis Mavroukakis wrote:
>>
>>
>> Emmanuel Lecharny wrote:
>>> 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.
>>>
>>>
>> Whoops :-)
>>
>> 81d:36
>> java.lang.IllegalStateException: Cannot use standard serialization 
>> for a ServerAttribute
>>        at 
>> org.apache.directory.server.core.entry.DefaultServerAttribute.writeExternal(DefaultServerAttribute.java:1190)

>>
>>        at 
>> java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1421) 
>>
>>

Mime
View raw message