On Thu, Dec 11, 2014 at 7:06 AM, Dunn-Roberts, Richard R (N-LEIDOS, INC.) < [email protected]> wrote:
> I am trying to add a document to an ou programatically. I am using > ApacheDS v 2.0.0-M17. I am also using Apache Directory Studio > 2.0.0.v20130628. > > I am able to connect to the server localhost, at port 10389, and am > working in partition dc=test,dc=com (for this example). > > The following organizational units exist in the partition - persistent > (ou=persistent,dc=test,dc=com), and under persistent, > documentStore(ou=documentStore,ou=persistent,dc=test,dc=com). > > If I import a document into the documentStore ou using an ldif import, it > works. The ldif file contains only the following lines: > 1. dn: documentIdentifier=D1,ou=documentStore,ou=persistent,dc=test,dc=com > 2. objectClass: document > 3. documentIdentifier: D1 > I can also create the document by right clicking on the ou node in the > LDAP browser, selecting New->New Entry (or New->New Context Entry; both > seem to open the same dialog). In the dialog, I select Create entry from > scratch, click Next, and select document from the Available object classes. > This addsdocument and top to the Selected object classes. I then click > Next. For RDN, I enter documentIdentifier and D2 to the entry fields, and > click (yep, you guessed it!) Next. This shows three attributes ... two > objectClass values (document and top), and one documentIdentifier value > (D2), as expected. The dialog indicates that these are must attributes. I > then click Finish, and the document node is displayed in the LDAP Browser > in AD Studio. > > Next, I try to create a document entry from a short java< > http://www.javaranch.com/> program. I can successfully create an ou using > the program, by creating an InitialDirContext< > http://docs.oracle.com/javase/8/docs/api/javax/naming/directory/InitialDirContext.html> > (let's call it idc. I can then create an ou using the following code: > 1. // The InitialDirContext is created using dn: > ou=documentStore,ou=persistent,dc=test,dc=com > 2. // The argument ouName is set to the value ou=anotherOu > 3. public void createOu( String ouName ) > 4. { > 5. try > 6. { > 7. // CreateOu attributes to be associated with the new context > 8. Attributes attrs = new BasicAttributes(true); // case-ignore > 9. Attribute objclass = new BasicAttribute("objectclass"); > 10. objclass.add("top"); > 11. objclass.add("organizationalUnit"); > 12. attrs.put(objclass); > 13. > 14. // CreateOu the context > 15. Context result = idc.createSubcontext(ouName, attrs); > 16. > 17. // Close the context when we're done > 18. result.close(); > 19. } > 20. catch ( NamingException e ) > 21. { > 22. System.err.println( "LdapTest::createOu(): " + e.getMessage() ); > 23. e.printStackTrace(); > 24. } > 25. } > This code completes successfully, and the new ou, anotherOu, is visible in > the LDAP Browser, when I reload the directoryStore ou. > > Finally, I modify the code above to attempt to programatically add a > document to the documentStore ou. The modified code is as follows: > 1. // The InitialDirContext is created using dn: > ou=documentStore,ou=persistent,dc=test,dc=com > 2. // The argument docName is set to the value documentIdentifier=D3 > 3. public void createDocument( String docName ) > 4. { > 5. try > 6. { > 7. // CreateOu attributes to be associated with the new context > 8. Attributes attrs = new BasicAttributes(true); // case-ignore > 9. Attribute objclass = new BasicAttribute("objectclass"); > 10. objclass.add("top"); > 11. objclass.add("document"); > 12. attrs.put(objclass); > 13. > 14. // CreateOu the context > 15. Context result = idc.createSubcontext(docName, attrs); > 16. > 17. // Close the context when we're done > 18. result.close(); > 19. } > 20. catch ( NamingException e ) > 21. { > 22. System.err.println( "LdapTest::createDocument(): " + > e.getMessage() ); > 23. e.printStackTrace(); > 24. } > 25. } > When I run this code, I get the following exception message and stack > trace: > 1. LdapTest::createDocument(): [LDAP: error code 16 - NO_SUCH_ATTRIBUTE: > failed for MessageType : ADD_REQUEST > 2. Message ID : 2 > 3. Add Request : > 4. Entry > 5. dn[n]: > documentIdentifer=D3,ou=documentStore,ou=persistent,dc=test,dc=com > 6. > there is a typo in the argument you are passing, I leave that for you to figure out ;) > 7. documentIdentifer: D3 > 8. ManageDsaITImpl Control > 9. Type OID : '2.16.840.1.113730.3.4.2' > 10. Criticality : 'false' > 11. ' > 12. : ERR_04269 ATTRIBUTE_TYPE for OID documentidentifer does not exist!] > 13. javax.naming.directory.NoSuchAttributeException: [LDAP: error code 16 > - NO_SUCH_ATTRIBUTE: failed for MessageType : ADD_REQUEST > 14. Message ID : 2 > 15. Add Request : > 16. Entry > 17. dn[n]: > documentIdentifer=D3,ou=documentStore,ou=persistent,dc=test,dc=com > 18. > 19. documentIdentifer: D3 > 20. ManageDsaITImpl Control > 21. Type OID : '2.16.840.1.113730.3.4.2' > 22. Criticality : 'false' > 23. ' > 24. : ERR_04269 ATTRIBUTE_TYPE for OID documentidentifer does not exist!]; > remaining name 'documentIdentifer=D3' > 25. at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3108) > 26. at > com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3033) > 27. at > com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2840) > 28. at > com.sun.jndi.ldap.LdapCtx.c_createSubcontext(LdapCtx.java:811) > 29. at > com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(ComponentDirContext.java:337) > 30. at > com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(PartialCompositeDirContext.java:266) > 31. at > com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(PartialCompositeDirContext.java:254) > 32. at > javax.naming.directory.InitialDirContext.createSubcontext(InitialDirContext.java:197) > 33. at > com.warsim.aui.ldaptest.CreateContext.createDocument(CreateContext.java:43) > 34. at > com.warsim.aui.ldaptest.CreateContext.main(CreateContext.java:75) > I am a novice LDAP user, and freely admit I don't understand it very well. > Any assistance in identifying my error, or identifying a solution, would be > greatly appreciated. > -- Kiran Ayyagari http://keydap.com
