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

时间:2012-07-27 17:28:21

标签: java encoding ibm-midrange cobol

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

  1. 流程执行返回的错误流不是可读格式。
  2. 即使cobol代码的终止返回0,我也会收到错误流结果。
  3. 我无法在流程的输入流中看到cobol输出结果。(如果我理解错误流,可以解决这个问题)
  4. 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 个答案:

答案 0 :(得分: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 :(得分:1)

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

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