2016-07-20 16 views
-6

Ich habe ein kleines Problem mit Attributen. Ich arbeite gerade an einem Projekt, das E-Mails von einem LDAP-Server in die Java-Anwendung parst, die in der Zukunft einige interessante Dinge mit E-Mails machen wird."string" ein String-Attribut zu String Java

Ich bin derzeit mit diesem Code, die E-Mails von den Benutzern über LDAP nimmt und es muss E-Mails in der User-Klasse setzen, wie in meinem Code gesehen:

 [some code here, TRY CATCH is also included] 


     LdapContext ctx = new InitialLdapContext(env, null); 
       ctx.setRequestControls(null); 
     NamingEnumeration<?> namingEnum2 = ctx.search("[path to the server]", "(objectClass=user)", getSimpleSearchControls()); 


    System.out.println("Test: print emails from whole DIRECOTRY: \n"); 


    while (namingEnum2.hasMore()) { 

     SearchResult result = (SearchResult) namingEnum2.next(); 
     Attributes attrs = result.getAttributes(); 

     System.out.println(attrs.get("mail")); 
     /** This line above works fine, but every time there is no email 
      in User info, it prints "null" in some cases when there is 
      no email, which is not perfect. But this is just here to see 
      if everything works and indeed it does.**/ 

     /**User Class accepts a String parameter, checks if it's empty 
      and all that, does some checking and etc... BUT! attrs.get("mail") 
      is an Attribute, NOT a String. And I need to somehow "cast" this 
      attribute to a String, so I can work with it.**/ 
     User user = new User(attrs.get("mail")); //error yet,because the parameter is not a String. 

     User user = new User(attrs.get("mail").toString());//gives an expeption. 

     /** And I know that there is a toString() method in Attribute Class, 
      but it doesn't work, it gives an "java.lang.NullPointerException" 
      exception when I use it as attrs.get("mail").toString() **/ 
    } 

Hier ist Konstruktor der Klasse User:

public User(String mail){ 
     eMail = "NO EMAIL!"; 
     if (mail != null && !mail.isEmpty()){ 


      eMail = mail; 
     } 
     else 
     { 


      eMail = "NO EMAIL!"; 
     } 


    } 
+4

Können Sie Ihren Code lesbar formatieren, so dass er konsistent eingedrückt wird und keine willkürlichen Leerzeilen enthält? Es sieht derzeit so aus, als wäre es auf den Boden gefallen. – khelwood

+0

.toString() gibt eine Exception, weil attrs.get ("mail") Null selbst zurückgibt –

+0

Warum ist meine Frage Bewertung so down btw? Es ist nicht wie eine super dumme Frage, wie "Hallo Welt" in der Konsole in JavaScript oder Java, dasselbe Ding lul "auszudrucken". Die Formatierung meines Codes ist nicht perfekt, aber dennoch lesbar. Es gab viele Kommentare von anderen Programmierern auf Russisch, die ich löschen musste, also macht es euch nichts aus. Habe ich etwas falsch gemacht, meine Frage zu stellen? –

Antwort

1

versuchen, diese

User user = new User(attrs.get("mail")!=null?attrs.get("mail").toString():null); 
+2

['Objects.toString (attrs.get (" mail "))]] (https://docs.oracle.com/javase/7/docs/ api/java/util/Objects.html # toString (java.lang.Object)) entspricht in etwa Ihrer ternären Anweisung (sie ruft nicht zweimal 'attrs.get' auf). –

+0

In der Tat hat es funktioniert! Können Sie erklären, warum es funktioniert hat? Es ist das erste Mal, dass ich mit Attributen im Allgemeinen arbeiten muss, also sehe ich wahrscheinlich dumm aus –

+0

Es funktionierte nicht, da attrs.get ("mail") Null zurückgab und Sie die toString() Methode auf null.So für Nullwert nicht aufrufen können , null wird an das Benutzerobjekt übergeben. –

0

Zuerst müssen Sie das angegebene Attribut von != null Verwendung besteht überprüfen (zB Objects.toString verwendet, die, dass im Inneren der Fall ist, oder manuell if) überprüfen und dann entweder verwenden toString auf dem Attribute, wie println tut innen:

User user = new User(Objects.toString(attrs.get("mail"))); 

Oder Sie können auch verwenden (einen einzelnen Wert in dem Attribut abzurufen, wenn Sie viele haben Sie getAll verwenden müssen):

Object mail = null; 
if (attrs.get("mail") != null) { 
    mail = attrs.get("mail").get(); 
} 
User user = new User(mail.toString()); 
+0

Es gibt mir dieses Zeug: java.lang.NullPointerException \t bei LdapConnection.main (LdapConnection.java:77) \t bei sun.reflect.NativeMethodAccessorImpl.invoke0 (Mutter Methode) \t bei sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) \t bei sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) \t bei java.lang.reflect.Method.invoke (Method.java:498) \t bei com.intellij.rt .execution.application.AppMain.main (AppMain.java:147) –

+0

Es ist keine gute Idee, sich auf die Implementierung von toString zu verlassen. Was ist, wenn es sich ändert? –

+0

@MarkChorley Welche andere Option haben Sie, wenn 'get()' ein Objekt zurückgibt? –