首页 文章

在AS400上通过Java从运行时进程执行(cobol obj)流式传输结果时出现MalformedInputException

提问于
浏览
0

我试图通过java调用一个简单的Hello World Cobol程序 . java代码在IFS文件结构中,cobol对象驻留在库中 . 我面临着多个问题:

  • 流程执行返回的错误流不是可读格式 .

  • 即使cobol代码的终止返回0,我也得到错误流结果 .

  • 我在进程的输入流中看不到cobol输出结果 . (如果我理解了错误流,可以解决这个问题)

cobol代码在独立调用时有效 . 我尝试过编码UTF8,UTF16,Cp943和默认值 . 当我使用UTF8时,UTF16我得到MalformedInputException,否则就是垃圾值 .

Java代码:(编译@ AS 400本身-java 1.5)

import java.io.*;

    public class CallCLPgm
    {
       public static void main(String[] args)
       {
          try
          {
          Process theProcess =  Runtime.getRuntime().exec("system CALL PROG6");
          //error stream
            BufferedReader inStream1 = new BufferedReader(new InputStreamReader
                     (theProcess.getErrorStream(),"UTF8"));
             System.out.println(inStream1.readLine());
            inStream1.close();
          //input stream   
             BufferedReader inStream = new BufferedReader(new InputStreamReader
                     (theProcess.getInputStream()));
             System.out.println(inStream.readLine());
             inStream.close();


             System.out.println("termination : "+theProcess.waitFor());
//Cobol code
      PROCEDURE DIVISION.        
      PROGRAM-BEGIN.     
          DISPLAY "Hello World".   
          STOP RUN.

2 回答

  • 2

    我应该专注于IBM编码格式http://publib.boulder.ibm.com/html/as400/v4r5/ic2924/index.htm?info/java/rzaha/fileenc.htm

    我使用“Cp037”代替美国而不是UTF8和其他格式 .

    BufferedReader inStream1 = new BufferedReader(new InputStreamReader(theProcess.getErrorStream(),“Cp037”));

  • 1

    我不是Cobol程序员,但我认为Cobol动词DISPLAY不会写入stdout . 查看Cobol手册,但我的猜测是你需要在你的Cobol程序中实际打开stdout并写入它而不是使用DISPLAY .

    当我想在IBM i上调用程序时,我使用JTOpen IBM Toolbox for Java . 如果您不熟悉IBM Infocenter,则很难找到Javadoc .

相关问题