Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

JAVA Agent / LDAP-Notes

(1/2) > >>

arcon:
Hallo, ich habe hier einen Agent der aus LDAP Daten lesen und in ein Notesdocument
Schreib soll.


Nur hatt er ein Problem mit dem Vector und ich komme nicht drauf welches ?


--- Code: ---Hashtabelle fuer Properties

INITIAL_CONTEXT_FACTORY : com.sun.jndi.ldap.LdapCtxFactory

PROVIDER_URL : ldap://ldap.wuestenrot.at

Context

Initialisieren des Contextes

Result= [uid: aub]

NotesException: Unknown or unsupported object type in Vector

   at lotus.domino.local.Document.NappendItemValue(Native Method)

   at lotus.domino.local.Document.appendItemValue(Unknown Source)

   at JavaAgent.NotesMain(JavaAgent.java:62)

   at lotus.domino.AgentBase.runNotes(Unknown Source)

   at lotus.domino.NotesThread.run(NotesThread.java:208)

--- Ende Code ---


--- Code: ---import lotus.domino.*;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.DirContext;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import java.util.Vector;

public class JavaAgent extends AgentBase {

   public void NotesMain() {

      try {
         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();
               
         System.out.println("Hashtabelle fuer Properties");
         Hashtable env = new Hashtable(11);
         
         System.out.println("INITIAL_CONTEXT_FACTORY : com.sun.jndi.ldap.LdapCtxFactory");
         env.put(   Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
         
         System.out.println("PROVIDER_URL : ldap://ldap.xxx.at");
         env.put(   Context.PROVIDER_URL,"ldap://ldap.xxx.at/o=xxx,c=at");
         
         System.out.println("Context");
      try {
         // initialisieren des Contextes
         System.out.println("Initialisieren des Contextes");
         DirContext ctx = new InitialDirContext(env);

         // Suchparameter
         SearchControls constraints = new SearchControls();
         // Auch Unterebenen durchsuchen
         constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

         // Suche starten
         NamingEnumeration results =
            ctx.search("ou=personen", "o=wds", constraints);

         // Durch alle gefundenen Datensätze durchgehen
         while (results != null && results.hasMore()) {
            // Das nächste Ergebnis aussuchen
            SearchResult si = (SearchResult) results.next();
            // Attribute
            Attributes attrs = si.getAttributes();
            if (attrs == null)
               System.out.println("No attributes");
            else // Nur die UID ausgeben
            try {
               Database db = agentContext.getCurrentDatabase();
               Document doc = db.createDocument();
               doc.appendItemValue("Form", "LDAP");
                  doc.appendItemValue("Subject", "Test Document");
                  
                  Vector v = new Vector();
               v.addElement(attrs.get("uid"));  
               System.out.println("Result= " + v);
               
                  doc.appendItemValue("UID",v);
                  System.out.println("Result= " + attrs.get("uid"));
               doc.save();
               }catch(Exception e) {e.printStackTrace();}                   
         }
         // und tschüss ...
         ctx.close();
      } catch (NamingException e) {
         System.err.println("Problem : " + e);
      }
         
      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}



--- Ende Code ---

Ich hoffe einer weis Rat  :( Arcon

animate:
Fehler ist scheinbar in dieser Zeile

 System.out.println("Result= " + v);


ich weiß net ob das geht, so nen String mit nem Vector zu verbinden.
ich würds mal mit
 System.out.println("Result= " + v.toString());

probieren

Axel_Janssen:

--- Zitat von: potsmoker am 08.01.04 - 16:46:00 ---Fehler ist scheinbar in dieser Zeile

 System.out.println("Result= " + v);


ich weiß net ob das geht, so nen String mit nem Vector zu verbinden.
ich würds mal mit
 System.out.println("Result= " + v.toString());

probieren

--- Ende Zitat ---

Interessanter Thread.  ;D

Potsmoker, das kann es nicht sein.
Jede Klasse erbt von java.lang.Object.
java.lang.Object hat eine Methode toString(), die von der jeweiligen konkreten Klasse überschrieben werden kann.
Klassen sind Förmchen von Objekten.  

Dadurch ist sichergestellt, dass jedes Objekt eine Methode toString() besitzt (da das - sagen wir - Sandkastenförmchen --> Klasse eine hat).
 
Bei einer String-Konkenatierung von Objekten (wie in dem betreffenden System.out.println statement) wird in Java immer automatisch die toString()-Methode der jeweiligen Objekte aufgerufen.  

Das Problem scheint zu sein, dass der Vector Objekte enthält, deren Klassen nicht gefunden werden. Möglicherweise kannst du den Typ der Objekte im Vector über
a) einen Debugger (z.B. von Eclipse)
oder
b) Introspection
herausfinden.

Bin mir aber nicht sicher. Das ist ein nicht-triviales Problem.

Btw. wird in Vector die toString() Methode derart überschrieben, dass über die Elemente des Vectors iteriert wird und das in der Form:
"[" + Object1.toString() + "," + Object2.toString() + "," + ... + "," + Objectn.toString() + "]" ausgegeben wird. Kann jeder Interessierte selbst ausprobieren.

Gruß Axel

Manfred Dillmann:
Hallo Axel !

<off-topic>
Hey, Du lebst ja noch, ich habe ja nix mehr von Dir gehört - hattest bestimmt viel um die Ohren, richtig?
</off-topic>

Gruss
Manfred

Axel_Janssen:
Yup. In-der-Tat.

Inklusive eines Gesprächs mit dem Management, dass ich meine Posting-Politik umstellen soll.

Ich finde das völligst in Ordnung und es ist mehr ein Selbstschutz. Man muss sich einfach mal überlegen, wenn ich mit Leuten in einem Projekt arbeite und jemand da allein 10 Minuten Überstunden machen muß, ohne es zu wollen, ist das schon nicht o.k.. Es gibt noch zahlreiche andere Argumente.

Werde meine hiesigen Aktivitäten also weitgehendst auf das Wochenende beschränken (in der Woche habe ich zusäztlichen Zertifizierungs-Lern-Tasks).

Gruß Axel

 

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln