PDA

View Full Version : START NON-TRANSLATABLEjava.lang.NoClassDefFoundError: okhttp3.RequestBody



Seiten : [1] 2

Wombat
14-05-20, 12:14
Hallo Forum,

eine Frage bzgl genannter Fehlermeldung.

Im QSH kann ich mein Programm ohne weiteres mit Javac Main_Service.java -cp 'Pfad/Der/Jar-Files/okhttp390.jar:/weitere/jar/files.jar:' kompilieren.

Rufe ich das Programm dann mittels Java auf (ob mit oder ohne Classpath) wird mir immer die Fehlermeldung



Ausnahmebedingung in Thread "main"# START NON-TRANSLATABLEjava.lang.NoClassDefFoundError: okhttp3.RequestBody
Caused by: java.lang.ClassNotFoundException: okhttp3.RequestBody
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:610)
at java.lang.ClassLoader.loadClassHelper(ClassLoader. java:925)
at java.lang.ClassLoader.loadClass(ClassLoader.java:8 70)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:343)
at java.lang.ClassLoader.loadClass(ClassLoader.java:8 53)

angezeigt.

Der classpath ist eingetragen. Es handelt sich bei der .jarFile um eine externe Jar, in einem Package.
Wieso kann ich es kompilieren, ohne Fehler, aber nicht ausführen?

Fuerchau
14-05-20, 15:07
Die Complierung macht nur einen Syntaxcheck und erstellt den Zwischencode.
Die Referenzen werden erst zur Laufzeit aufgelöst.
Vielleicht fehlt dir in der Quelle ja eine Import-Direktive ohne die die Klasse nur mit ihrem vollständigen Namen verwendet werden kann.

Bevor du Java auf die ibm i schiebst, empfehle ich dir, das über Eclipse erst zu testen.
Da hast du mehr Möglichkeiten.
Falls du die JT400.Jar dann benötigst, kannst du die auch lokal kopieren.

Wombat
14-05-20, 15:13
Ich habe das mit dem RDI entwickelt und so auch ausprobiert. Da funktionierte alles einwandfrei. Auch mit dem jt400.

Eigentlich sind die Import-Direktiven vorhanden.


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/* SQL */
import java.sql.*;

import java.util.ArrayList;

Fuerchau
14-05-20, 17:23
Dann kann es nur noch einen Syntaxfehler im Classpath geben.
Wie sieht dein Aufruf genau aus?

Wombat
15-05-20, 10:39
java Main_Service -cp
':/usr/local/Java/jar_files/okhttp3_9_0.jar:/usr/local/Java/jar_files/okio-1.14.0.jar:/usr/local/Java/jar_files/jt400.jar:/usr
/local/Java/jar_files/jt400.jar:/usr/local/Java/jar_files/java-json.jar'
Ausnahmebedingung in Thread "main"# START NON-TRANSLATABLEjava.lang.NoClassDefFoundError: okhttp3.RequestBody
Caused by: java.lang.ClassNotFoundException: okhttp3.RequestBody
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:610)
at java.lang.ClassLoader.loadClassHelper(ClassLoader. java:925)
at java.lang.ClassLoader.loadClass(ClassLoader.java:8 70)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:343)
at java.lang.ClassLoader.loadClass(ClassLoader.java:8 53)

ich rufe den Classpath bisher immer bei jedem Start mit auf. Auch wenn ich den Classpath über ein CL befülle, tritt die selbe Meldung auf.

Fuerchau
15-05-20, 10:53
Der Doppelpunkt am Anfang könnte u.U. ein Problem darstellen. Der Doppelpunkt dient zur Trennung der einzelnen Pfade.
Desweiteren ist das IFS der IBM i casesensitive (im Gegensatz zu Windows). Achte also bei den Dateien (bei den Verzeichnissen ist es u.U. nicht relevant) auf die genaue Schreibweise.

Wombat
19-05-20, 09:28
Auch ohne Doppelpunkt am Anfang tritt der Fehler auf. Die Dateinamen sind alle casesensitive aufgelistet.
Ich habe mal ausprobiert ob wenigstens eine externe Jar (java-json.jar) genommen wird und das ist der Fall. Alle anderen machen Probleme. Liegt es an der Quellenzuordnung der einzelnen jar-Files? Im RDI kann ich mir nur die Quellen der json-File anzeigen lassen. Die anderen jedoch nicht. Nehme ich irgendeine andere jar-File, funktioniert es nicht.

Ich habe dann die Klassen und Java Files manuell hinzugefügt und das funktioniert natürlich auch. Nur die jt400 macht dabei Probleme.

Fuerchau
19-05-20, 11:29
Da fällt mir leider dann auch nichts mehr ein. Ich mache da zuwenig mit Java und bisher lief alles, wass ich mit Eclipse (nicht RDi) entwickelt habe.
Hier kann ich nur raten.

Eine Variante könnte noch eine inkompatible Java-Version auf der IBM i sein.
Prüfe mal mit "Jave -version".

Wombat
19-05-20, 11:32
java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 8.0.5.25 - pap3280sr5fp25-20181030_01(SR5 FP25))
IBM J9 VM (build 2.9, JRE 1.8.0 OS/400 ppc-32-Bit 20181029_400846 (JIT enabled, AOT enabled)
OpenJ9 - c5c78da
OMR - 3d5ac33
IBM - 8c1bdc2)
JCL - 20181022_01 based on Oracle jdk8u191-b26

Fuerchau
19-05-20, 12:53
Java 8, das sieht zumindest gut aus. Aber eine Erklärung habe ich nicht.