directory-api mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Fisher <dfis...@vt.edu>
Subject Re: Reading Binary Attributes
Date Wed, 04 May 2011 15:44:15 GMT
On Wed, May 4, 2011 at 11:13 AM, Kiran Ayyagari <kayyagari@apache.org> wrote:
> On Wed, May 4, 2011 at 8:24 PM, Daniel Fisher <dfisher@vt.edu> wrote:
>> On Tue, May 3, 2011 at 4:07 PM, Kiran Ayyagari <kayyagari@apache.org> wrote:
>>> Hi Daniel,
>>>
>>> On Wed, May 4, 2011 at 12:33 AM, Daniel Fisher <dfisher@vt.edu> wrote:
>>>> Hello,
>>>> I'm doing some testing with 1.0.0-M3 and I'm having trouble reading
>>>> binary attributes.
>>>> Specifically for jpegPhoto in OpenLDAP 2.4.23:
>>>>
>>>> # jpegPhoto
>>>> # Used to store one or more images of a person using the JPEG File
>>>> # Interchange Format [JFIF].
>>>> attributetype ( 0.9.2342.19200300.100.1.60
>>>>    NAME 'jpegPhoto'
>>>>    DESC 'RFC2798: a JPEG image'
>>>>    SYNTAX 1.3.6.1.4.1.1466.115.121.1.28 )
>>>>
>>>> the byte[] I get from Attribute#get()#getBytes() is about twice as big
>>>> as I expect. Attribute#isHumanReadable() also returns true. Which
>>>> makes me think the value has been encoded.
>>>> Code snippet of what I'm doing:
>>>>        while (cursor.next()) {
>>>>          SearchResultEntry result = (SearchResultEntry) cursor.get();
>>>>          Entry e = result.getEntry();
>>>>          Attribute photo = e.get("jpegPhoto");
>>>>          if (photo != null) {
>>>>            byte[] bytes = photo.get().getBytes();
>>>>            FileOutputStream fos = new FileOutputStream("photo.jpg");
>>>>            fos.write(bytes);
>>>>            fos.close();
>>>>          }
>>>>        }
>>>>
>>>> ldapsearch returns the value I expect. Is there some special syntax
>>>> for binary values I'm missing? Thanks
>>>>
>>> this is due to the fact that by default the client connection is not
>>> schema aware, to make it schema aware call loadSchema() method
>>> of the connection before performing any operations.
>>> Let us know if you still have any issues.
>>> Thank you for testing.
>>
>> Thanks. After reviewing the source it appears that binary attributes
>> are only supported with a schema aware connection. If you expose the
>> BinaryAttributeDetector (maybe on LdapConnection) then clients could
>> have some control without dealing with schemas. This would afford the
>> same functionality that JNDI provides via the
>> 'java.naming.ldap.attributes.binary' property. Just a thought.
>>
> don't know how JNDI detects the binary attributes, but in our case it is
> done completely with the help of schema manager

JNDI has a list of names that it knows are binary. I believe it simply
matches on the attribute id as it reads results.
In your case the code delegates to the schema manager if one exists,
but if not a BinaryAttributeDetector is provided that always returns
false. My suggestion was to expose that property so clients could
provide a custom implementation.

--Daniel Fisher

Mime
View raw message