web-dev-qa-db-ja.com

エラー:環境またはシステムプロパティLDAPおよびJNDIでクラス名を指定する必要があります

これは私のコードです:

     public class TestConnection {

public static void main(String[] args) {
    String password = "s3cret";
    Map<String, String> env = new HashMap<String, String>();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.Sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:389/dc=userdev,dc=local");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    //env.put(Context.SECURITY_PRINCIPAL, "uid="+ username +"cn=users"); // replace with user DN
    env.put(Context.SECURITY_PRINCIPAL, "cn=dcmanager,cn=users,dc=userdev,dc=local"); // replace with user DN
    env.put(Context.SECURITY_CREDENTIALS, password);

    DirContext ctx = null;
    try {
       ctx = new InitialDirContext();
    } catch (NamingException e) {
       // handle
    }
    try {
       SearchControls controls = new SearchControls();
       controls.setSearchScope( SearchControls.SUBTREE_SCOPE);
       ctx.search( "", "(objectclass=person)", controls);
       // no need to process the results
    } catch (NameNotFoundException e) {
        e.printStackTrace();
        System.out.println("catch 1");
       // The base context was not found.
       // Just clean up and exit.
    } catch (NamingException e) {
        System.out.println("catch 2");
        e.printStackTrace();
       // exception handling
    } finally {
       // close ctx or do Java 7 try-with-resources http://docs.Oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
    }

}

    }

このエラーが発生しました(キャッチ2):javax.naming.NoInitialContextException:環境またはシステムプロパティで、またはアプレットパラメータとして、またはアプリケーションリソースファイルでクラス名を指定する必要があります:Java.naming.factory.initial

多くの解決策を探しましたが、エラーは発生しません。問題はどこだ?コンテキストかもしれませんが、コードは完全に正しいと思います。

5
user840718

入力したenvマップを使用してInitialDirContextオブジェクトを構築する必要があります。つまり、次のコードを使用して構成します。

ctx = new InitialDirContext(env);

3
Priyesh
For JBOSS AS

initialContextを作成する

public static final String PKG_INTERFACE="org.jboss.ejb.client.naming";
public static Context initialContext;
public static Context getInitialContext() throws NamingException{
if(initialContext==null){
    Properties properties=new Properties();
    properties.put(Context.URL_PKG_PREFIXES, PKG_INTERFACE);
    initialContext=new InitialContext(properties);
}


public static final String PKG_INTERFACE="org.jboss.ejb.client.naming";
check you are passing correct Sring i.e. "org.jboss.ejb.client.naming" in PKG_INTERFACE .

ファイルjboss-ejb-client.propertiesを作成してejbModuleのルートに置き、ejbModuleフォルダーをクラスパスに追加します。 jboss-ejb-client.propertiesのコンテンツ

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false

remote.connections=default

remote.connection.default.Host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
2
Neelam Chahal

これはctx = new InitialDirContext(env, null);である必要があります。envはハッシュテーブルです。

1
thomson