PDA

View Full Version : V6R1 und FTP



xattoo
16-09-08, 10:00
Hallo,

ich habe ein kleines Problem. Unsere Java Anwendung greift auf die i Series via FTP zu und kopiert Daten auf den Server.
Ein Kunde hat nun auf V6R1 migriert und nun kann sich unsere Anwendung nicht mehr mit dem FTP server der i5 verbinden.
Wir erhalten immer die Meldung "Error 95 Schlüsselring nicht vorhanden". Unter den FTP Server Atrributen steht im Parameter Secure Socket Layer zulassen ALWSSL "*yes". Laut IBM Hilfe sollte der FTP Server Verbindungen mit und ohne SSL Zertifikat annehmen.

Hat jemand eine Idee

KM
17-09-08, 07:00
Hallo,

wie greifst Du denn auf den FTP-Server der iSeries zu ? Über SSL ? Falls über SSL, ist dann auch ein Zertifikat im DCM konfiguriert ?

Gruß,
KM

xattoo
17-09-08, 08:30
Nein, wir greifen nicht via SSL zu.

xattoo
17-09-08, 08:31
Nein, wir greifen nicht via SSL zu.
Wir nehmen die Java Toolbox JTopen V6.1 und die Klasse die die Fehlermeldung zurück gibt ist AS400FTP. Die Fehlermeldung lautet :

Exception:

toString:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1

--------------------
getStackTrace:
java.lang.String.substring(Unknown Source)
com.ibm.as400.access.ftp.getDataSocket(FTP.java:23 73)
com.ibm.as400.access.ftp.doAppendOrPut(FTP.java:72 4)
com.ibm.as400.access.ftp.put(FTP.java:1580)
com.ibm.as400.access.AS400FTP.put(AS400FTP.java:69 5)
com.ibm.as400.access.ftp.put(FTP.java:1662)
com.ibm.as400.access.AS400FTP.put(AS400FTP.java:75 2)
com.ibm.as400.access.ftp.put(FTP.java:1617)
com.ibm.as400.access.AS400FTP.put(AS400FTP.java:72 3)
com.b_a_u.client.app.install_i5.models.Model_Toolb ox_i5_Abstract.putInstallFile(Model_Toolbox_i5_Abs tract.java:293)
com.b_a_u.client.app.install_i5.Control_Install_i5 _web.putInstallFile(Control_Install_i5_web.java:30 4)
com.b_a_u.client.app.install_i5.threads.ExecuteDow nload_AED_Daten.run(ExecuteDownload_AED_Daten.java :126)
java.lang.Thread.run(Unknown Source)

In der Methode ftp.put kann kein Inputstream gelesen werden.

Wir haben auch schon die neue JTopen 6.3 getestet, das ergebniss ist leider auch erfolglos, selbe Fehlermeldung.

Vielen Dank für deine Hilfe KM

Gruß
Xattoo

KM
18-09-08, 10:07
Aber was hat nun die eine Fehlermeldung mit der anderen zu tun ?
Könntest Du mal etwas Code posten und schreiben wo welcher Fehler passiert ?

Versuche doch mal alternativ zum Toolbox-FTP die freie Java FTP library edtFTPj. Damit mache ich meine FTP-Übertragungen.

Gruß,
KM

xattoo
18-09-08, 11:34
Hallo KM,

die erste gepostete Fehlermeldung kommt vom FTP Server auf der i5, die zweite Fehlermeldung erzeugt unsere Applikation. Die Meldungen stehen also in Abhängigkeit miteinander.

Die Frage die ich mir stelle ist warum wird dieser Fehler nur auf einer V6R1 Maschine erzeugt . Bei unseren Kunden sind verschieden Release V5R1 - V5R4 im Einsatz die alle wunderbar funktionieren.

Es muss sich also etwas beim Release Stand V6R1 geändert haben.

Sorry vielleicht hab ich die Problemschilderung falsch dargestellt.

Hier kurz eine Erklärung der Java Anwendung.

Java Anwendung die auf einem Client läuft, lädt sich aus dem Internet eine gezipte Savfile herunter.
Diese wird am Client Rechner ausgepackt (unzip). Danach wird via FTP die Savefile auf den Host übertragen. Die Savefile wird auf dem Host mit dem Befehl rstlib ausgepackt und danach über ein CL Programm weiterverarbeitet.

Bei der übertragung der SaveFile erhalten wir nun auf der Client Seite eine Java Exception (die oben gepostete) zusätzlich haben wir uns den FTP Server Job angeschaut und hier erhalten wir auch eine Fehlermeldung (w.o gepostet).

Es muss sich also beim Release V6R1 gegenüber V5R4 oder früher etwas elementares geändert haben.

@KM Funktioniert deine Anwendung auch mit Release V6R1 ?

xattoo
18-09-08, 11:53
Hier der Code


Methode connectFTP_Server


Public boolean connectFTP_Server() {
boolean boolConnectFTP_Server = false;
String strCurrentMethod = "connectFTP_Server()";
sbErrorDescription = new StringBuffer();
if (as400 == null) {
return false;
}
this.ftpClient = new AS400FTP(getAs400());
this.ftpClient.addFTPListener(new MyFTPListener());
try {
this.ftpClient.setPort(System_i5_config_Static
.getSystem_i5_FTP_Port());
appendSessionLogEntry_fromFTPServer(this.ftpClient .getLastMessage());
sbErrorDescription.append(this.ftpClient.getLastMe ssage());
} catch (PropertyVetoException e1) {
Exc.excInfo_Sun.getInfo(e1, CLASSNAME, strCurrentMethod,
sbErrorDescription);
return false;
}
try {
boolConnectFTP_Server = this.ftpClient.connect();
appendSessionLogEntry_fromFTPServer(this.ftpClient .getLastMessage());
} catch (UnknownHostException e) {
sbErrorDescription.append("Der Hostname: "
+ getAs400().getSystemName());
sbErrorDescription.append(SEP + "ist ungültig");
Exc.excInfo_Sun.getInfo(e, CLASSNAME, strCurrentMethod,
sbErrorDescription);
return false;

Klasse MyFTPListener


class MyFTPListener extends java.lang.Object implements FTPListener {
String strCurrentMethod = "connected(FTPEvent fe)";

public void connected(FTPEvent fe) {
try {
appendSessionLogEntry_fromFTPServer("Testanfrage an FTP-Server: "
+ ftpClient.issueCommand("NOOP"));
appendSessionLogEntry_fromFTPServer(ftpClient
.issueCommand("SYSTEM"));
ftpClient.setDataTransferType(AS400FTP.BINARY);
appendSessionLogEntry_fromFTPServer(ftpClient.getL astMessage());
ftpClient.issueCommand("SITE NAMEFMT 1");
appendSessionLogEntry_fromInstall_i5("---------------------------------------");

} catch (IOException ioe) {
Exc.excInfo_Sun.getInfo(ioe, CLASSNAME, strCurrentMethod, null);
return;
}
}

public void disconnected(FTPEvent fe) {
appendSessionLogEntry_fromFTPServer(ftpClient.getL astMessage());
}

public void listed(FTPEvent fe) {
}

public void put(FTPEvent fe) {
appendSessionLogEntry_fromFTPServer(ftpClient.getL astMessage());
}

public void retrieved(FTPEvent fe) {
}


Methode puInstallFile:


public boolean putInstallFile(String strSourceFileName) {
boolean boolPut = false;
String strCurrentMethod = "putInstallFile()";
sbErrorDescription = new StringBuffer();
if (this.ftpClient == null || strSourceFileName == null) {
return false;
}
if (quitFTP_Server() == false){
return false;
}
if (connectFTP_Server() == false) {
return false;
}
strSourceFileName = Transform_StringValue
.setStringVariable(strSourceFileName);
QSYSObjectPathName targetPath = null;
try {
targetPath = build_INSTALL_SAVF_TargetPath(strSourceFileName);
if (targetPath == null) {
return false;
}
} catch (ExtendedIllegalArgumentException exc) {
Exc.excInfo_IBM
.getInfo(exc, getClassInfo(), strCurrentMethod, null);
return false;
}
//
String strTargetFileName = targetPath.getPath();
try {
appendSessionLogEntry_fromInstall_i5(SEP);
String strNewInst = "=================================";
appendSessionLogEntry_fromInstall_i5(strNewInst);
String strLogEnty = "Start Datenübertragung für Datei:";
appendSessionLogEntry_fromInstall_i5(strLogEnty);
appendSessionLogEntry_fromInstall_i5(strSourceFile Name);

Hier fällt die Anwendung auf die Nase

boolPut = this.ftpClient.put(strSourceFileName, strTargetFileName);

appendSessionLogEntry_fromFTPServer(ftpClient.getL astMessage());
sbErrorDescription.append(strLogEnty + " fehlgeschlagen:");
sbErrorDescription.append(this.ftpClient.getLastMe ssage());
} catch (IOException e)