Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino
JAVA Agent / LDAP-Notes
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