簡體   English   中英

MalformedInputException而在AS400上通過Java流化運行時進程執行(cobol obj)的結果時

[英]MalformedInputException while streaming results from Runtime process execution(cobol obj) via Java on AS400

我正在嘗試通過java調用一個簡單的Hello World Cobol程序。 Java代碼采用IFS文件結構,並且cobol對象停放在庫中。 我面臨多個問題:

  1. 流程執行返回的錯誤流不是可讀格式。
  2. 即使cobol代碼的終止返回0,我也得到錯誤流結果。
  3. 我在進程的輸入流中看不到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.  

我應該專注於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”));

我不是Cobol程序員,但我認為Cobol動詞DISPLAY不會寫入stdout。 請查閱Cobol手冊,但我想您將需要在Cobol程序中實際打開stdout並對其進行寫入,而不是使用DISPLAY。

當我想在IBM i上調用程序時,請使用JTOpen IBM Toolbox for Java 如果您不熟悉IBM Infocenter,可能很難找到Javadoc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM