我们有一个通过 JT400 连接到 AS400 的 java 程序。我们想读/写 IFS。但是,除了使用典型的 parms(url,usr,pwd) 成功创建 AS400 对象外,我们无法在 IFSFILE 和 IFSFILEWRITER 类上执行方法。
Java 程序基本上取自 IBM IFSFILE 代码示例。我添加了注释来注释故障点。源代码下方是显示源代码流程的 Eclipse 控制台条目。`
导入 java.io.BufferedWriter; 导入 java.io.IOException; 导入 java.io.PrintWriter; 导入 com.ibm.as400.access.AS400; 导入 com.ibm.as400.access.AS400SecurityException; 导入 com.ibm.as400.access.IFSFile; 导入 com.ibm.as400.access.IFSFileWriter; 公共类 WriteSAPReturn { 公共静态无效主要(字符串[]参数){ AS400 as400 = null; 尝试 { 字符串 url = args[0]; 字符串 usr = args[1]; 字符串密码 = args[2]; 字符串 sapReturnFileName = args[3]; //“IFS 上不存在的文件” 字符串 sapReturnMessage = args[4]; // “成功”; as400 = 新的 AS400(url, usr, pwd); // 这样就成功创建了 as400 对象。用户具有 QSECOFR 权限。 System.out.println("as400 对象已创建。"); System.out.println("正在寻找 IFS 文件:ifsFile.getAbsolutePath(); "); IFSFile ifsFile = new IFSFile(as400, sapReturnFileName); if (ifsFile.exists()) { System.out.println("找到 IFS 文件。"); } 别的 { System.out.println("IFSFile 未找到。\n正在创建 ifsFile.getAbsolutePath()"); ifsFile.createNewFile();// 当 IFS 文件不存在时,此行失败并出现相同的读取超时异常 (IOException)。 } System.out.println("创建文件写入器" + ifsFile.getAbsolutePath()); PrintWriter writer = new PrintWriter(new BufferedWriter(new IFSFileWriter(ifsFile))); // 抛出 IOException:读取超时。 writer.write(sapReturnMessage); writer.flush(); writer.close(); } 捕捉(AS400SecurityException e){ System.out.println("AS400SecurityException " + e.getMessage()); e.printStackTrace(); } 捕捉(IOException e){ System.out.println("IOException" + e.getMessage()); e.printStackTrace(); } 捕捉(异常 e){ System.out.println("异常" + e.getMessage()); e.printStackTrace(); } 最后 { System.out.println("终于"); if (as400 != null) { System.out.println("断开 as400"); as400.disconnectAllServices(); } } } } `
以下是列出此代码所采用路径的 Eclipse 控制台条目。
as400 对象创建。 as400 版本:7 // as400.getVersion() url: // as400.getSystem() usr: // as400.getUserId() pwd: // 从传入的 args[] 中捕获 isConnected: false // 这显示 False 但创建了 as400 对象,我们正在从中提取变量。 isConnectionAlive: false // 这显示为 False,但创建了 as400 对象,我们正在从中提取变量。 寻找 IFS 文件: 未找到 IFS 文件。 创建文件 ifsFile.createNewFile(); IOException 读取超时 java.net.SocketTimeoutException:读取超时 在 java.net.SocketInputStream.socketRead0(本机方法) 在 java.net.SocketInputStream.socketRead(未知来源) 在 java.net.SocketInputStream.read(未知来源) 在 java.net.SocketInputStream.read(未知来源) 在 com.ibm.as400.access.DataStream.readFromStream(DataStream.java:52) 在 com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:52) 在 com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:357) 在 java.lang.Thread.run(未知来源) 最后 断开as400
IFSFile.exists() 是唯一正确执行的 IFS 相关方法。我们的远程访问尝试被拒绝。我们不知道下一步该去哪里跟踪 IFSFile/IFSFileWriter 类上的访问方法被拒绝的可能原因。