2011-03-11 2 views

답변

3

당신은 서브 스키마 하위 항목을 조회 할 수있는 즉, CN = 스키마 (아래 코드는 아파치 디렉토리 서버에 대해 테스트되었습니다)

DirContext ctx = new InitialLdapContext(env, null); 

SearchControls searchControls = new SearchControls(); 
searchControls.setSearchScope(SearchControls.OBJECT_SCOPE); 
searchControls.setReturningAttributes(new String[] 
    { "objectClasses" }); 
NamingEnumeration<SearchResult> results = ctx.search("cn=schema", "(ObjectClass=*)", searchControls); 

SearchResult result = results.next(); 
Attributes entry = result.getAttributes(); 

Attribute objectClasses = entry.get("objectClasses"); 
System.out.println(objectClasses); 
+0

입니다

  • ControlDefinition 같은 바인딩을 제공 할 수 있습니다. 주목할 또 하나의 작은 점은 filter가 objectclass = subschema 여야한다는 것입니다. 그러나 중요하지 않습니다. – kalyan

  • +0

    대단히 감사합니다. 그 코드는 잘 작동했습니다. – pankaj

    +3

    nope, cn = schema는 스키마 위치를 지정하는 LDAP V3 표준 값입니다. – kayyagari

    4
    DirContext schema=dcx.getSchema(""); 
    NamingEnumeration bindings = schema.listBindings("ClassDefinition"); 
    while (bindings.hasMore()) 
    { 
        Binding bd = (Binding)bindings.next(); 
        System.out.println(bd.getName() + ": " + bd.getObject()); 
    } 
    

    당신은

    • AttributeDefinition
    • 같은 다양한 바인딩을 사용할 수 있습니다
    • ClassDefinition
    • 구문 정의

    스키마 컨텍스트는
    • MatchingRule
    • ExtensionDefinition이 특정 구현
    • SASLDefinition 당신은 CN = 스키마를 하드 코딩 할 때 조심해야

    +0

    Java 1.5 이상에서는 캐스트가 필요하지 않습니다. –

    +0

    @RobinGreen, 제네릭'NamingEnumeration '을 사용하면 바인딩은 쓸모가 없지만 위의 예에서 유용합니다. –

    관련 문제