Autor Thema: Java-Fehlermeldung bei Programmausführung  (Gelesen 8879 mal)

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Java-Fehlermeldung bei Programmausführung
« am: 10.12.08 - 10:07:42 »
Hi,

ich habe einen LS-Agent, der mittels LS2J eine Java-Bibliothek aufruft/startet und Parameter übergibt. Im Prinzip passiert folgendes:
Der LS-Agent ermittelt aus einem Maildokument diverse Werte und übergibt diese an Java.
Das Java-Programm erstellt dann anhand dieser Daten in unserem ERP eine 1:1 Mail in unserem Posteingang.

Doch kurz vor Ende der Abarbeitung bricht Java ab und in der Java-Konsole von Notes steht folgende Meldung:
Code
java.lang.NullPointerException
	at lotus.domino.JavaConnectLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:629)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:595)
	at lotus.domino.JavaConnectLoader.loadClass(Unknown Source)
	at de.ibees.afps.connector.http.common14.DataObjectContainer.addBinary(DataObjectContainer.java:60)
	at de.ibees.notes.addin.NotesAddIn.createPosteingang(NotesAddIn.java:198)
	at de.ibees.notes.addin.SucheGUI.buttonOk_actionPerformed(SucheGUI.java:394)
	at de.ibees.notes.addin.SucheGUI$4.actionPerformed(SucheGUI.java:277)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1879)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2199)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:450)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:288)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:264)
	at java.awt.Component.processMouseEvent(Component.java:5529)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3148)
	at java.awt.Component.processEvent(Component.java:5294)
	at java.awt.Container.processEvent(Container.java:2001)
	at java.awt.Component.dispatchEventImpl(Component.java:3996)
	at java.awt.Container.dispatchEventImpl(Container.java:2059)
	at java.awt.Component.dispatchEvent(Component.java:3844)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4249)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3929)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3859)
	at java.awt.Container.dispatchEventImpl(Container.java:2045)
	at java.awt.Window.dispatchEventImpl(Window.java:1810)
	at java.awt.Component.dispatchEvent(Component.java:3844)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:545)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:268)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:197)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:191)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:144)
Jetzt weiß ich nicht so recht, wo ich ansetzen soll! Irgendwas haut anscheinend etwas mit einem ClassLoader nicht ganz hin (Notes-seitig; erste 4 Zeilen)?
Das Java-Projekt ist in Eclipse geschrieben und dann die einzelnen Class-Files in eine Domino Java-Bibliothek importiert. Unter Eclipse läuft alles ohne Probleme durch.

Habt ihr ne Idee, wo ich wie ansetzen könnte, um den Fehler einzukreisen/beheben?
Braucht ihr noch weitere Infos?

Danke und Gruß
« Letzte Änderung: 10.12.08 - 10:38:41 von magic_halli »
Lotus Notes 8.0.2

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #1 am: 10.12.08 - 10:17:51 »
Wurde beim Erstellen im Eclipse auf die JRE von Domino/Notes Rücksicht genommen?
Das ist eh kein Hintergrund-Agent, oder?
« Letzte Änderung: 10.12.08 - 10:21:54 von m3 »
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #2 am: 10.12.08 - 10:24:26 »
Wurde beim Erstellen im Eclipse auf die JRE von Domino/Notes Rücksicht genommen?
Das ist eh kein Hintergrund-Agent, oder?
Ich habe in Eclipse den Compiler auf 1.4 gestellt.

Der Agent und das Java-Programm werden nur auf Buttonklick gestartet.
Lotus Notes 8.0.2

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #3 am: 10.12.08 - 11:39:37 »
Nur die Compiler-Compliance oder nutzt du ein höheres JRE und regelst die Compliance-Stufe herunter?

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #4 am: 10.12.08 - 11:50:21 »
Nur die Compiler-Compliance oder nutzt du ein höheres JRE und regelst die Compliance-Stufe herunter?
Ich nutze JRE1.6 und regel es nur herunter...
Mein Java-Programm steigt aber nur mit der Exception aus, wenn ich einen Anhang mit speichere (warum auch immer). Wenn ich eine Mail ohne Anhang übertrage, dann läuft es ohne Probleme durch - trotz JRE1.6 und "nur" runterregeln! Ich versteh´s nicht...  ???

Idee/Vorgehen:
Ich installier mir jetzt mal SDK1.4.2, weiße das meinem Eclipse-Projekt zu, importiere nochmal alles in Domino und hoffe, dass es dann geht!
Lotus Notes 8.0.2

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #5 am: 10.12.08 - 11:57:48 »
Nach nochmaligem Nachdenken konnte das eben gar nicht die Lösung sein, wovon ich sprach. Bei dem Gedanken, den ich im Hinterkopf hatte, hätte es bei dir Compilerfehler geben müssen.

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #6 am: 10.12.08 - 11:59:44 »
Naja, aber es kann in dem Fall doch trotzdem so sein, dass eine Bibliothek verwendet wird/wurde, die im Standardset von 1.4.2 nicht vorhanden ist, oder?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #7 am: 10.12.08 - 12:17:26 »
Da bin ich mir nicht sicher. Das kann aber sein, dass der Classpath in der Notes-Bibliothek dann nicht stimmt. Aber dazu habe ich das bisher zu selten gemacht und Libs aus Java importiert.

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #8 am: 10.12.08 - 12:24:39 »
So, also das Eclipse-Projekt direkt mit eingebundenem Java1.4.2 compiliert bringt auch nix - Fehlermeldung bleibt genau gleich! Hab erstmal alles wieder auf Urzustand zurückgefahren.

Da bin ich mir nicht sicher. Das kann aber sein, dass der Classpath in der Notes-Bibliothek dann nicht stimmt. Aber dazu habe ich das bisher zu selten gemacht und Libs aus Java importiert.
Welcher Classpath in welcher Notes-Bibliothek (in meiner?) könnte nicht stimmen?
Die Compilierung in Notes erfolgt ohne Probleme!
Oder redest Du in Bezug auf:
Code
at lotus.domino.JavaConnectLoader.findClass(Unknown Source)
...
at lotus.domino.JavaConnectLoader.loadClass(Unknown Source)
« Letzte Änderung: 10.12.08 - 12:27:24 von magic_halli »
Lotus Notes 8.0.2

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #9 am: 10.12.08 - 13:32:27 »
Wenn die Bibliothek auch unter Notes kompiliert, dann weiß ich leider nicht weiter. Leider kenne ich mich in genau dem Zusammenspiel LS2J zu wenig aus.

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #10 am: 10.12.08 - 14:36:43 »
Mh, kann ich meine Java-Bibliothek, die ja unter 'Gemeinsamer Code/Scriptbibliotheken' gespeichert ist irgendwie mit Eclipse Remote Debuggen? Geht sowas?

Wenn ja, wie richte ich das erstmal ein - gibts HowTo´s hierfür?
Lotus Notes 8.0.2

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #11 am: 10.12.08 - 14:48:52 »
Hier findet er etwas nicht:
Code
de.ibees.afps.connector.http.common14.DataObjectContainer.addBinary(DataObjectContainer.java:60)
DataObjectContainer, Zeile 60. Was machst du da?
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #12 am: 10.12.08 - 14:59:56 »
Hier findet er etwas nicht:
Code
de.ibees.afps.connector.http.common14.DataObjectContainer.addBinary(DataObjectContainer.java:60)
DataObjectContainer, Zeile 60. Was machst du da?
Hier wird eine Methode aufgerufen, die ein byte[] in xml umwandelt. Diese Klasse/Methode ist in meinem eingebundenen Jar-File drin, welches ich in dem ganzen Projekt nutze.
Anscheinend wird dort die NullPointerException geworfen, weil die Methode nicht erreichbar scheint?!
...ist aber völlig unerklärlich, da ich in meinem Code direkt über der Zeile, welche diese 'addBinary'-Methode aufruft, eine 'addString'-Methode der gleichen Klasse aufrufe!

Deshalb bin ich jetzt grad dran Remote Debugging einzurichten, damit ich meine Java-Bibliothek mit dem Eclipse-Debugger analysieren kann...
Lotus Notes 8.0.2

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #13 am: 10.12.08 - 17:46:37 »
Kannst du nicht einfach die Zeile hier hinposten. Oder ist die zu geheim ?  ;D
Ich vermute, dass du dort aus irgendwelchen Gründen null übergibst und das da nicht geht.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #14 am: 11.12.08 - 08:05:08 »
Kannst du nicht einfach die Zeile hier hinposten. Oder ist die zu geheim ?  ;D
Ich vermute, dass du dort aus irgendwelchen Gründen null übergibst und das da nicht geht.
Ok, ich poste mal Code (ist nicht geheim), aber ob da ein Zusammenhang ersichtlich wird - glaube fast nicht, da sehr komplex...?!

1. Erzeugung byte[] 'binary' und Übergabe an Methode 'addBinary' aus Klasse 'DataObjectContainer':
Code
...
String filename = filepath.substring(filepath.lastIndexOf("\\")+1, filepath.length());
byte[] binary = getBinaryFromFile(filepath);

DataObjectContainer anlageCon = anlagenCon.createSubContainer("Anlage");
anlageCon.addString("Name", filename);
anlageCon.addString("DateiName", filename);
anlageCon.addBinary("Binary", binary);

Die Exception wird geworfen, wenn 'addBinary'-Methode aufgerufen werden soll. Mit 'addString' gibts keinerlei Probleme! (seeeehr komisch)

2. Die Methoden 'addString' und 'addBinary' aus der Klasse 'DataObjectContainer' (plus deren "Helper-Methoden"):
Code
private TreeMap _dataObjectMap;

  public void addString(String name, String value) {
    add(name.toLowerCase(), new StringWrapper(value));
  }

  public void addBinary(String name, byte[] value) {
    add(name.toLowerCase(), new BinaryWrapper(value));
  }

...
  private void add(String name, ValueWrapper value) {
    _dataObjectMap.put(name.toLowerCase(), value);
  }

3. Die Klasse 'BinaryWrapper' :
Code
public class BinaryWrapper extends ObjectWrapper implements ValueWrapper {
  public final static String DATATYPE = "binary";

  public BinaryWrapper(byte[] value) {
    super(value);
  }
...
}

Punkte 2. und 3. stammen aus einem JAR, welches bereits seit ewigen Zeiten entwickelt und genutzt wird... hier kann der Fehler nicht liegen!!! Probleme gibts erst im Zusammenspiel aus/mit Notes.
Die Frage ist eben nur, wieso klappt bei 1. zuerst 'addString' und 'addBinary' wirft NullPointerException?!?! Mein byte[] 'value' hat definitiv eine Größe (zu Testzwecken vorher ausgegeben - stimmt auch).

So, wenn das jetzt helfen sollte, wäre ich echt überwältigt...

Danke und Gruß


EDIT: ...deshalb meine Frage noch hinterher: Kann man eine Java-Bibliothek (kein Java-Agent), die im Designer gespeichert ist, mit Eclipse remote debuggen?  ???
« Letzte Änderung: 11.12.08 - 08:08:21 von magic_halli »
Lotus Notes 8.0.2

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #15 am: 11.12.08 - 10:09:10 »
Code
DataObjectContainer anlageCon = anlagenCon.createSubContainer("Anlage");

Also das Problem könnte dann aus der Methode createSubContainer("Anlage") kommen. Denn von hieraus beziehst du deinen neuen DataObjectContainer, der an dieser Stelle offensichtlich null ist. Dazu müsstest du mal in diese Methode schauen, ob die unter Umständen auch mal null zurückgeben kann.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #16 am: 11.12.08 - 11:14:17 »
EDIT: ...deshalb meine Frage noch hinterher: Kann man eine Java-Bibliothek (kein Java-Agent), die im Designer gespeichert ist, mit Eclipse remote debuggen?  ???
Hast du das mal versucht wie hier beschrieben (mit Eclipse statt mit Rational Architect)?
http://www.tlcc.com/admin/tips.nsf/tipurlref/20041213

Eigentlich müsste das gehen.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #17 am: 12.12.08 - 10:30:54 »
So, nach vielen Fragezeichen und Konfusionen konnte ich mein ClassLoader-Problem lösen. Allerdings wirft die Lösung dennoch Fragen auf!
Ich muss die Klasse 'BinaryWrapper', welche durch die 'addBinary'-Methode eigentlich instanziert wird (siehe Quellcode-Ausschnitte), noch vor meiner eigentlichen Programmausführung (Einstieg ist hierbei eine Gui-Initialisierung) separat instanzieren!!!
Code
public class SucheGUI extends JFrame {

 public SucheGUI(...) {
   // neu: Klasse BinaryWrapper instanzieren
   initWrapper();

  // hier dann meine ursprüngliche Programmabarbeitung
  initGUI();
  ...
 }

...

 private void initWrapper() {
    try {
      new BinaryWrapper(new byte[0]);
    }
    catch (Exception err) {
      err.printStackTrace();
    }
  }

}

Nur so konnte ich die NullPointerException eliminieren! Seeeehr komisch und verstehen tu ich das nicht wirklich...
Anscheinend gibt es ein Problem mit Notes, dass dieses sonst irgendwie diese Klasse nicht laden konnte?!?!
Bleibt natürlich noch zu klären, warum das so ist, denn eine befriedigende Lösung ist das auf Dauer nicht wirklich. Gibts da vielleicht irgendwelche Sicherheitsrichtlinien od. -Einschränkungen auf Notes-Seite?! Zumal bei der Ausführung in Eclipse eine solche Instanzierung nicht nötig ist - wäre mir auch unlogisch.

Gruß
Lotus Notes 8.0.2

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #18 am: 12.12.08 - 10:51:03 »
Schwierig bis unmöglich das per Ferndiagnose zu lösen. Glaub nicht, dass das etwas mit Sicherheitszeugs zu tun. Vielleicht wird das vorher intern so initialisiert, dass dem Constructor statt dem byte-Array null übergeben wird.
Hauptsache es funktioniert.  ;D
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: Java-Fehlermeldung bei Programmausführung
« Antwort #19 am: 12.12.08 - 11:02:56 »
... Glaub nicht, dass das etwas mit Sicherheitszeugs zu tun. Vielleicht wird das vorher intern so initialisiert, dass dem Constructor statt dem byte-Array null übergeben wird.
Hauptsache es funktioniert.  ;D
Klar, es funktioniert... fühle mich auch erstmal ziemlich gut!  8)

...aber es macht mich trotzdem nachdenklich in Bezug auf weitere Programmierarbeiten mit Notes-LS2J-Java, denn wenn dann in größeren Projekten solche Fehler auftreten und die Ursache nicht wirklich geklärt ist, fällt mir der ganze Mist wieder auf die Füße. Naja, ich ergebe mich erstmal meinem Schicksal.  ;)

Danke und Gruß
Lotus Notes 8.0.2

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz