Hello,
Am 22.09.2014 17:13, schrieb Kiran Ayyagari:
hard to tell without seeing your code, but this issue is not related
to instance layout.
hier is a shortened version of the code (together with JUnit test) which
results in the previously mentioned error:
package ldap;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
import org.apache.directory.server.core.api.DirectoryService;
import org.apache.directory.server.core.api.InstanceLayout;
import
org.apache.directory.server.core.factory.DefaultDirectoryServiceFactory;
import org.apache.directory.server.ldap.LdapServer;
import org.apache.directory.server.protocol.shared.transport.TcpTransport;
public class Test {
/**
* Provokes an error with unknown source.
*
* @throws Exception
*/
@org.junit.Test
public void provokeError() throws Exception {
EmbeddedServer els = null;
try {
els = new EmbeddedServer("localhost", 10489);
els.start();
LdapContext ctx = initContext("ldap://localhost:10489",
"userCertificate");
searchCertificate(ctx, "ou=certificates,dc=smpki",
SearchControls.SUBTREE_SCOPE,
"033E07C49E8AF56994859466BEBFAA9057A36924");
} finally {
if (els != null) {
els.stop();
}
}
}
private LdapContext initContext(String ldapServer, String
attributeName) throws NamingException {
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
env.put(Context.SECURITY_CREDENTIALS, "secret");
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapServer);
return new InitialLdapContext(env, null);
}
private NamingEnumeration<SearchResult>
searchCertificate(LdapContext ctx, String searchBase, int searchScope,
String subjectKeyIdentifier) throws NamingException {
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(searchScope);
String searchFilter = "(&(objectClass=smpki)(cn=" +
subjectKeyIdentifier + "))";
return ctx.search(searchBase, searchFilter, searchControls);
}
private static final class EmbeddedServer {
private DirectoryService directoryService;
private LdapServer ldapService;
public EmbeddedServer(final String host, final int port) throws
Exception {
init(host, port);
}
private void init(final String host, final int port) throws
Exception {
DefaultDirectoryServiceFactory factory = new
DefaultDirectoryServiceFactory();
factory.init("Test");
this.directoryService = factory.getDirectoryService();
this.directoryService.getChangeLog().setEnabled(false);
this.directoryService.setShutdownHookEnabled(true);
this.directoryService.setInstanceLayout(new
InstanceLayout("/tmp/ldapServer"));
this.ldapService = new LdapServer();
this.ldapService.setTransports(new TcpTransport(host, port));
this.ldapService.setDirectoryService(this.directoryService);
}
public void start() throws Exception {
this.directoryService.startup();
this.ldapService.start();
}
public void stop() throws Exception {
this.ldapService.stop();
this.directoryService.shutdown();
}
}
}
I'm using Apache DS 2.0.0-M17 on Windows 7 Professional 64bit, Eclipse
4.2, JDK 1.6.0_43 (64 bit)