On Wed, May 4, 2011 at 11:13 AM, Kiran Ayyagari <[email protected]> wrote: > On Wed, May 4, 2011 at 8:24 PM, Daniel Fisher <[email protected]> wrote: >> On Tue, May 3, 2011 at 4:07 PM, Kiran Ayyagari <[email protected]> wrote: >>> Hi Daniel, >>> >>> On Wed, May 4, 2011 at 12:33 AM, Daniel Fisher <[email protected]> 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
