2012-08-28 14 views
6

Sorun herşeyi söylüyor. , WF-008-DAM-PS o anahtar kısım içermediğini:javax.naming.directory.Attribute öğesinden değer nasıl çıkarılır

cn: WF-008-DAM-PS 

kod parçacığı olduğunu:

private void searchGroup() throws NamingException { 
    NamingEnumeration<SearchResult> searchResults = getLdapDirContext().search(groupDN, "(objectclass=groupOfUniqueNames)", getSearchControls()); 
    String searchGroupCn = getCNForBrand(m_binder.getLocal("brandId"), m_binder.getLocal("brandName")); 
    Log.info(searchGroupCn); 
    while (searchResults.hasMore()) { 
     SearchResult searchResult = searchResults.next(); 
     Attributes attributes = searchResult.getAttributes(); 
     Attribute groupCn = attributes.get("cn"); 
     if(groupCn != null) { 
      Log.info(groupCn.toString());    
     } 
    } 
} 

nasıl sadece değer elde edebilirsiniz Bir Özellik Baskı yaparken değil mi? Saygılar.

cevap

4

getValue() yöntemini veya getValue(int) yöntemini çağırın.

+0

bu iki yöntem javax.naming.directory.BasicAttribute veya javax.naming.directory.Attribute mevcut ise (Attribute örnek birden değerlere sahip olduğunda)? Bir yöntem (int) var. –

+0

'Attribute' bir arabirimdir, 'BasicAttribute 'Attribute özelliğini uygular. Yani, 'groupCn' varsayarak son nesne o = groupCn.getValue()' tek değerlidir. Çok değerli ise, tamsayı dizini 'groupCn.getValue (index)' ' –

+0

olarak parametre olarak kullanın. Ancak, http://docs.oracle.com/javase/1.4 adresinde getValue() yöntemi yoktur. 2/docs/api/javax/adlandırma/dizin/BasicAttribute.html veya http://docs.oracle.com/javase/1.4.2/docs/api/javax/naming/directory/Attribute.html –

6

çözümdür:

Attribute groupCn = attributes.get("cn"); 
String value = groupCn.get(); 
1

Genel

o zaman kalan varsayalım:

Attributes attributes; 
Attribute a = attributes.get("something"); 
  • if(a.size() == 1)
    • o zaman tüm değerleri üzerinden benzersiz değerini
  • if(a.size() > 1)

    • iterate almak için a.get() veya a.get(0) kullanabilirsiniz: Burada a.get() kullanırsanız

      for (int i = 0 ; i < a.size() ; i++) { 
          Object currentVal = a.get(i); 
          // do something with currentVal 
      } 
      

      , bu dönecektir sadece ilk değer, çünkü iç uygulaması (BasicAttribute'da) şu şekilde görünür:

      public Object get() throws NamingException { 
          if (values.size() == 0) { 
           throw new NoSuchElementException("Attribute " + getID() + " has no value"); 
          } else { 
           return values.elementAt(0); 
          } 
      } 
      

Her iki yöntem de (get(int) ve get()) bir NamingException atar.

Uygulama örneği

LdapContext ctx = new InitialLdapContext(env, null); 

Attributes attributes = ctx.getAttributes("", new String[] { "supportedSASLMechanisms" }); 
System.out.println(attributes); // {supportedsaslmechanisms=supportedSASLMechanisms: GSSAPI, EXTERNAL, DIGEST-MD5} 

Attribute a = atts.get("supportedsaslmechanisms"); 
System.out.println(a); // supportedSASLMechanisms: GSSAPI, EXTERNAL, DIGEST-MD5 

System.out.println(a.get()); // GSSAPI 

for (int i = 0; i < a.size(); i++) { 
    System.out.print(a.get(i) + " "); // GSSAPI EXTERNAL DIGEST-MD5 
} 
+0

@Downvoter, lütfen kararınızla ilgili bir açıklama ekleyin ... Bunun çok iyi bir cevap olduğunu düşünüyorum. –

İlgili konular