
|
If you were logged in you would be able to see more operations.
|
|
|
| Resolution Date: |
02/Jul/06 06:48 AM
|
|
When fetching for DNs in LdapBrowser, you get an exception while encoding the SearchResultEntry :
...
Caused by: java.lang.ClassCastException: org.apache.directory.shared.ldap.name.LdapDN
at org.apache.directory.shared.ldap.codec.search.SearchResultEntry.computeLength(SearchResultEntry.java:240)
at org.apache.directory.shared.ldap.codec.LdapMessage.computeLength(LdapMessage.java:530)
at org.apache.directory.shared.ldap.codec.LdapMessage.encode(LdapMessage.java:602)
at org.apache.directory.shared.ldap.codec.TwixEncoder.encodeBlocking(TwixEncoder.java:121)
at org.apache.directory.shared.ldap.codec.TwixEncoder.encode(TwixEncoder.java:200)
at org.apache.directory.shared.ldap.message.MessageEncoder.encode(MessageEncoder.java:131)
at org.apache.mina.filter.codec.asn1.Asn1CodecEncoder.encode(Asn1CodecEncoder.java:55)
at org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:226)
... 22 more
The problem is that when encoding a SearchResultEntry, the values are supposed to be Strings or byte arrays, not LdapDNs. When you fetch for DNs in the root DSE, the result is stored in the SearchResultEntry as LdapDN objects, not Strings, and it's allowad, as the method which set the value accept an Object.
We have to fix two problems :
- first, check that the Object is either a String or a byte[], nothing else (defensive programming)
- second, avoid storing LdapDN objects where String or byte[] are expected :)
|
|
Description
|
When fetching for DNs in LdapBrowser, you get an exception while encoding the SearchResultEntry :
...
Caused by: java.lang.ClassCastException: org.apache.directory.shared.ldap.name.LdapDN
at org.apache.directory.shared.ldap.codec.search.SearchResultEntry.computeLength(SearchResultEntry.java:240)
at org.apache.directory.shared.ldap.codec.LdapMessage.computeLength(LdapMessage.java:530)
at org.apache.directory.shared.ldap.codec.LdapMessage.encode(LdapMessage.java:602)
at org.apache.directory.shared.ldap.codec.TwixEncoder.encodeBlocking(TwixEncoder.java:121)
at org.apache.directory.shared.ldap.codec.TwixEncoder.encode(TwixEncoder.java:200)
at org.apache.directory.shared.ldap.message.MessageEncoder.encode(MessageEncoder.java:131)
at org.apache.mina.filter.codec.asn1.Asn1CodecEncoder.encode(Asn1CodecEncoder.java:55)
at org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:226)
... 22 more
The problem is that when encoding a SearchResultEntry, the values are supposed to be Strings or byte arrays, not LdapDNs. When you fetch for DNs in the root DSE, the result is stored in the SearchResultEntry as LdapDN objects, not Strings, and it's allowad, as the method which set the value accept an Object.
We have to fix two problems :
- first, check that the Object is either a String or a byte[], nothing else (defensive programming)
- second, avoid storing LdapDN objects where String or byte[] are expected :)
|
Show » |
|