'lo all,

Somehow I've hit the following exception when adding an entry to my (embedded) ApacheDS server:

2008-10-02 16:13:19,182 ERROR [pool-9-thread-7] handlers.ReferralAwareRequestHandler - OTHER: failed for     Add Request :
    objectclass: smxparty
    smxpartyid: 2000114
: java.lang.Long cannot be cast to java.lang.String
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
    at org.apache.directory.shared.ldap.schema.DeepTrimToLowerNormalizer.normalize(DeepTrimToLowerNormalizer.java:59)
    at org.apache.directory.shared.ldap.schema.CachingNormalizer.normalize(CachingNormalizer.java:99)
    at org.apache.directory.shared.ldap.schema.NormalizingComparator.compare(NormalizingComparator.java:74)
    at org.apache.directory.server.schema.SerializableComparator.compare(SerializableComparator.java:99)

I'm assuming the problem here is triggering on the smxpartyid attribute, which is defined as:

dn: m-oid=, ou=attributeTypes, cn=smx3, ou=schema
objectclass: metaAttributeType
objectclass: metaTop
objectclass: top
m-name: smxpartyid
m-equality: integerMatch
m-length: 0

In code, this is being setup and passed to LDAP as String's:

            final Attributes attributes = new BasicAttributes();
            attributes.put(new BasicAttribute("objectclass", "smxparty"));
            attributes.put(new BasicAttribute("smxpartyid", party.getId().toString()));

At what point is ApacheDS converting this to a Long (is this based on the m-equality: integerMatch?).  I assume the code should be falling into something other than NormalizingComparator (or NormalizingComparator shouldn't assume String's).

I'm using ApacheDS 1.5.4.


"It is easier to optimize correct code than to correct optimized code." -- Bill Harlan