0

我们有一个通过 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 类上的访问方法被拒绝的可能原因。

4

0 回答 0