使用UnboundID连接到LDAP服务器,构造函数与文档示例不匹配

时间:2013-06-25 23:45:07

标签: ldap unboundid-ldap-sdk

我正在为我们的某个应用程序实现UnboundID内存中的ldap服务器,但是从开始我遇到了一个问题:

我需要连接一次生产服务器,以便使用以下方式获取模式:

  Schema newSchema = Schema.getSchema(connection);
  config.setSchema(newSchema); 

文档说要使用ssl建立与LDAP服务器的连接,我需要使用SSUtil,如:

 SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager());

 LDAPConnection connection =
    new LDAPConnection(sslUtil.createSSLSocketFactory());
 connection.connect("server.example.com", 636);

我厌倦了上面和编译器抱怨

  The constructor LDAPConnection(SSLSocketFactory) is undefined

并且在查看LDAPConnection时确实没有这样的构造函数。我正在使用unboundid-ldapsdk-se.jar jar,有没有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

实际上有一个与提供的签名匹配的构造函数。该构造函数是:

  /**
   * Creates a new LDAP connection using the specified socket factory.  No
   * actual network connection will be established.
   *
   * @param  socketFactory  The socket factory to use when establishing
   *                        connections.  If it is {@code null}, then a default
   *                        socket factory will be used.
   */
  public LDAPConnection(final SocketFactory socketFactory)
  {
    this(socketFactory, null);
  }

SSLSocketFactory是SocketFactory的子类,因此示例中包含的代码应该没有任何问题。我刚刚通过创建一个包含这三行的类(创建SSLUtil,创建LDAPConnection,建立连接)来确认这一点,并且使用JDK 5,JDK 6和JDK 7编译时没有任何警告或错误。

另外,为了解决另一个评论,LDAP SDK不建议创建TrustAllTrustManager。它确实提供了一个使用TrustAllTrustManager的示例,但下面还有另一个示例演示了使用信任库的过程。此外,TrustAllTrustStore类的文档表明它仅建议用于测试目的。尽管如此,我刚刚对SSLUtil示例进行了更改,这使得此建议更加清晰。