소스를 다시 보니까
person objectClass를 add 하시는거 같은데
일반적으로 person 에는
facimiletelephonenumber attributeType 이 없는걸로 아는데..
이것은 물론 LDAP server 의 종류에 따라 다르겠지만,
보통 facimiletelephonenumber 는
organizationalPerson 이나 inetOrgPerson objectClass 에 있습니다..
(제가 사용하는 NDS eDirectory 8.5 에는 말이죠)
님께서 사용하시는 LDAP Server의 person objectClass의
Description을 확인하시려면 다음의 소스를 실행해 보세여~ :)
/*
* person objectClass의 description 확인하기
*/
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
public class SchemaTest
{
// 환경 변수 세팅
private static final String HOST = "ldap://localhost:389";
private static final String TYPE = "simple";
private static final String DN = "cn=admin,o=Onenet";
private static final String PW = "password";
public static void main(String[] javaholic)
throws Exception
{
// 역시 일반적인 환경 설정..
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, HOST);
env.put(Context.SECURITY_AUTHENTICATION, TYPE);
env.put(Context.SECURITY_PRINCIPAL, DN);
env.put(Context.SECURITY_CREDENTIALS, PW);
//env.put("com.sun.jndi.ldap.trace.ber", System.err);
DirContext dctx = new InitialDirContext(env);
System.out.println("== InitialDirContext was created");
// Subschema Entry의 context 얻어오기
DirContext schema = dctx.getSchema("");
// objectClass의 description 이 정의된 context 얻어오기
// "ClassDefinition" 은 LDAP Server에 따라 다를 수도 있슴다
DirContext classDef = (DirContext)schema.lookup("ClassDefinition");
// person objectClass의 description 의 값을 attributes 로 가지고 오기
Attributes attrs = classDef.getAttributes("person");
// person objectClass의 description 출력
for (NamingEnumeration ne = attrs.getAll() ; ne.hasMore() ; )
{
Attribute attr = (Attribute)ne.next();
for (NamingEnumeration ne2 = attr.getAll(); ne2.hasMore(); )
{
System.out.println(attr.getID() + " : " + ne2.next());
}
}
// 연결 종료
dctx.close();
}
}
인덴트 알아서 잘 맞춰 보세여 ^^;
에러가 나면 말씀해 주시구여~
그럼 잘 되시길 빕니다~~`
|