Emmanuel, thanks for the answer.. About the jira, should it be an improvement, new feature or bug?
Thanks again Flavio On Thu, Jan 9, 2014 at 11:22 PM, Emmanuel Lécharny <[email protected]>wrote: > Le 1/10/14 7:56 AM, Flavio Mattos a écrit : > > After decompiling the class Strings I was able to see that this API tries > > to > > lower-case everything. The TO_LOWER_CASE array (char []) does not have > any > > chinese/japanese character that is why the ArrayIndexOutOfBoundsException > > happens... The question is: What now? should I override those methods? > > Is there another way? > > Well, you are not supposed to use anything but ASCII chars in a LDIF > based entry (http://www.ietf.org/rfc/rfc2849.txt): > > attrval-spec = AttributeDescription value-spec SEP > > value-spec = ":" ( FILL 0*1(SAFE-STRING) / > ":" FILL (BASE64-STRING) / > "<" FILL url) > > SAFE-STRING = [SAFE-INIT-CHAR *SAFE-CHAR] > > SAFE-CHAR = %x01-09 / %x0B-0C / %x0E-7F > ; any value <= 127 decimal except NUL, LF, > ; and CR > > SAFE-INIT-CHAR = %x01-09 / %x0B-0C / %x0E-1F / > %x21-39 / %x3B / %x3D-7F > ; any value <= 127 except NUL, LF, CR, > ; SPACE, colon (":", ASCII 58 decimal) > ; and less-than ("<" , ASCII 60 decimal) > > > The char you are using is well out of this scope. What you must do is to > base-64 encode the String, like in : > > Entry entry = new > > > DefaultEntry("uid=netbeans,ou=customer_service,ou=employees,dc=example,dc=com", > "cn: netbeans", > "sn: netbeans", > "givenName::", new String( Base64.encode( > Strings.getBytesUtf8( "范" ) ) ), > "mail: [email protected]", > "userPassword: > {SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=", > "objectClass: inetOrgPerson", > "objectClass: organizationalPerson", > "objectClass: person", > "objectClass: top" > ); > > I admit this is not exactly convenient, for many reasons : > > o you should not get an ArrayIndexOutOfBoundsException, but a better > exception that tells you what's really wrong > o the conversion should be automatic assuming the value is not an ASCII > char. I would rather have something like : > > Entry entry = new > > > DefaultEntry("uid=netbeans,ou=customer_service,ou=employees,dc=example,dc=com", > "cn: netbeans", > "sn: netbeans", > "givenName", "范", // or "giveName:", "范", > or even "givenName::", "范", or even better "givenName: 范", > ... > ); > where the "范" string is automatically converted to a Base 64 String, > and the '::' being automatically added > o I must warn you that using "范" as a String in some java code is > really a bad idea : it forces you to use a 'UTF-8' file format, which > may be lost if someone is convertng your file to another charset. I > would rather suggest you to use '\U8303'. Note that it won't fix the > issue you have. > > I consider that my initial proposal is just a workaround, and my > suggestion should be implemented. Woudl you be kind enough to fill a > JIRA so that we don't forget to fix this ? > > Sidenote : the Entry.toString method is not convenient either. It adds ' > around a binary values (a pb you already mentionned in a previous post). > We should rather show the value as a base64 encoded String (and provide > anotehr toString() method if we want to expose the binary value as a hex > string). > > Many thanks ! > > > -- > Regards, > Cordialement, > Emmanuel Lécharny > www.iktek.com > >
