Zur Unterstützung s.
http://java.sun.com/j2se/1.4.2/docs/api/index.html1. Grundsätzlich:
Meldungen im NotesDokument richten sich an den User, da der User das NotesDokument sieht.
Exception Stack Traces sind aber nicht für den User bestimmt. Sie sind mehr ein effizientes Kommunikationsmittel, damit der technische Experte für die Anwendung (dh. der Entwickler) die Ursache des Fehlers herausfinden kann.
In das Dokument würde ich eine für den User verständliche Meldung schreiben.
Den Inhalt des Stacktraces in ein LogFile.
Z.B. könntest du so arbeiten:
e.setMessage("Das Feld xxxx enthält keinen Wert");
und dann:
doc.replaceItemValue("FailureMessage", e.getMessage());
2. Wie kommst du jetzt an die StackTrace Information?
Die Methode Document.replaceItemValue(String itemName, Object itemValue) konvertiert bestimmte Typen von Objekt direkt in ein entsprechendes Notes-Feldformat. Z.B. Document.replaceItemValue("eineZahl", new Integer(4)); erzeugt ein Notes Zahlenfeld.
Ich vermute stark (habs nicht ausprobiert), dass wenn man der Methode ein Object itemValue von einem Typ übergibt, mit dem es nicht direkt etwas anfangen kann (s. Notes Hilfe), die Methode versucht daraus einen String zu machen.
Jedes Objekt in Java besitzt eine String Repräsentation. Einfach weil alle Klassen von java.lang.Object erben und java.lang.Object besitzt eine Methode toString(). Da diese Methode in der Basisklasse von allen Objekten vorhanden ist, kann sie für jedes Objekt egal welchen Typs aufgerufen werden.
Nun übergibst du ihr ein Objekt e vom Typ Exception (oder ein child von Exception). Exception wiederum erbt von java.lang.Throwable.
java.lang.Throwable besitzt eine Methode toString(), welche die Methode toString() von java.lang.Object überschreibt.
Nur leider wird man damit wenig anfangen können.
Aus 1.4.1 java-api:
Throwable.
toString
public String toString()Returns a short description of this throwable. If this Throwable object was created with a non-null detail message string, then the result is the concatenation of three strings:
The name of the actual class of this object
": " (a colon and a space)
The result of the getMessage() method for this object
If this Throwable object was created with a null detail message string, then the name of the actual class of this object is returned.
Overrides:
toString in class Object
Returns:
a string representation of this throwable.
Was du in die Konsole geschrieben hast, ist auch etwas anderes:
Nicht System.out.println(e); sondern e.printStackTrace();
Logging Frameworks wie log4j unterstützen mit speziellen Methoden die automatische Ausgabe von StackTraces. Z.B. muß man log4j einfach logger.error(e) oder so aufrufen.
Kann man auch von Hand über die Methode
StackTraceElement[] Throwable.getStackTrace(). Wie du siehst ist StackTraceElement ein Array (diese Klammern[]). StackTraceElement enthält wiederum eine toString() Methode, die das zurückgibt, was unter e.printStackTrace() ausgegeben wird.
Du könnstest mal das folgende ausprobieren:
doc.replaceItemValue("FailureMessage", e.getStackTrace());
FailureMessage sollte dafür aber ein Mehrfachwertefeld sein.
Gruß Axel