2017-07-26 9 views
0

私はWindows ADから一意の識別子を取得しようとしています。しかし、次のコード行で:例外を修正するにはjava.lang.ClassCastException:objctGUIDをADから取得するときにjava.lang.Stringを[Bにキャストすることはできませんか?

byte[] objGUIDByteArr = (byte[]) attrs.get("objectGUID").get(); 

私は次の例外のobjectGUIDからこの&取得byte[]値を修正する方法

java.lang.ClassCastException: java.lang.String cannot be cast to [B 

を取得していますか?

+0

「attrs」とは何ですか? –

+0

'javax.naming.directory.Attributes' – Shiva

答えて

1

デフォルト環境のStringの代わりにobjectGUIDをの形式で返さなければならないことをSpring LDAPに知らせるには、基本環境プロパティを渡す必要があります。

1

あなたの属性オブジェクトの実際のタイプはStringと思われます。

文字列をバイト配列に変換し、バックアップする適切な方法:

import javax.naming.NamingException; 
import javax.naming.directory.Attributes; 
import javax.naming.directory.BasicAttributes; 
import java.io.UnsupportedEncodingException; 
import java.util.Optional; 

public class Main { 
    public static void main(String[] args) { 
     Attributes as = new BasicAttributes("a1", "val1"); 
     try { 
      String attribute = (String) Optional.ofNullable(as.get("a1")) 
        .orElseThrow(() -> new IllegalArgumentException("No such attribute")) 
        .get(); 
      byte[] objGUIDByteArr = attribute.getBytes("UTF-8"); 
      System.out.println(new String(objGUIDByteArr)); 
     } catch (UnsupportedEncodingException | NamingException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

出力:

val1 

文書によると、あなたがnullを得ることができますので、私はあなたがNPEを避けるために、ヌル・ハンドリングを追加する必要があります(そのため、追加のチェックのためにOptionalを追加しました。これはjava 8から利用可能です):

/** 
    * Retrieves the attribute with the given attribute id from the 
    * attribute set. 
    * 
    * @param attrID The non-null id of the attribute to retrieve. 
    *   If this attribute set ignores the character 
    *   case of its attribute ids, the case of attrID 
    *   is ignored. 
    * @return The attribute identified by attrID; null if not found. 
    * @see #put 
    * @see #remove 
    */ 
Attribute get(String attrID); 
+0

応答のためのThanx。これを文字列に変換すると、 'byte []'の値が変更され、最終的な 'objectGUID'値が文字列形式で変更されます。 – Shiva

1

この例外は、属性インスタンスがGUID以外の値を持つことを意味します。これは、ADの複数の問題(他のLDAPディレクトリサービスとの同期中のエラー)のために発生する可能性があります。 try/catchを使用してこの問題を処理してください。

関連する問題