Вызов программ AS/400 RPG из Java

Я хочу вызывать программы AS/400 RPG из Java, но сталкиваюсь с ошибкой, как показано ниже.

com.ibm.as400.data.PcmlException: получено исключение: [com.ibm.as400.access.ObjectDoesNotExistException] /QSYS.LIB/%LIBL%.LIB/GETKURSJAV.PGM: объект не существует. в com.ibm.as400.data.ProgramCallDocument.callProgram(ProgramCallDocument.java:458) в CallRPG.main(CallRPG.java:34) Причина: com.ibm.as400.access.ObjectDoesNotExistException: /QSYS.LIB/%LIBL %.LIB/GETKURSJAV.PGM: Объект не существует. в com.ibm.as400.access.RemoteCommandImplRemote.runProgramOffThread(RemoteCommandImplRemote.java:595) в com.ibm.as400.access.RemoteCommandImplRemote.runProgram(RemoteCommandImplRemote.java:532) в com.ibm.as400.access.ProgramCall.run (ProgramCall.java:780) по адресу com.ibm.as400.data.PcmlProgram.callProgram(PcmlProgram.java:681) по адресу com.ibm.as400.data.PcmlDocument.callProgram(PcmlDocument.java:462) по адресу com.ibm. as400.data.ProgramCallDocument.callProgram(ProgramCallDocument.java:445) ... еще 1

и это мой java-код

import com.ibm.as400.access.AS400;
import com.ibm.as400.access.AS400Message;
import com.ibm.as400.access.ProgramParameter;
import com.ibm.as400.data.PcmlException;
import com.ibm.as400.data.ProgramCallDocument;

public class CallRPG {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    AS400 as400 = null;

    String host = "10.2.62.7";
    String username = "USERNAME";
    String password = "PASSWORD";

    as400 = new AS400(host, username, password);

    if (as400 == null) {
        System.out.println("Connection Failed");
    } else {
        System.out.println("Connection Success");
    }
    ProgramCallDocument pcml;

    try {
        pcml = new ProgramCallDocument(as400, "getkursjav.pcml");
        pcml.setValue("GETKURSJAV.CCCKRS", "51");
        pcml.setValue("GETKURSJAV.IDXKRS", "5");

        // call the program
        boolean rc = pcml.callProgram("GETKURSJAV");
        if (rc == false) {
            System.out.println("Program failed");
        } else {

            int outputData = (int) pcml.getValue("GETKURSJAV.ZRTNKRS");
            System.out.println(outputData / 100000);            
        }
    } catch (PcmlException pe) {
        System.out.println(" Caught Exception ");
        pe.printStackTrace();
    } finally {
        System.exit(0);
    }

}

}

и это мой файл pcml

<pcml version="4.0">
   <program name="GETKURSJAV" path="/QSYS.LIB/%LIBL%.LIB/GETKURSJAV.PGM">
      <data name="CCCKRS" type="packed" length="2" precision="0" usage="input" />
      <data name="IDXKRS" type="packed" length="2" precision="0" usage="input" />
      <data name="ZRTNKRS" type="char" length="10" usage="output" />
   </program>
</pcml>

что не так с моим кодом? Нужно ли добавлять as400 CURLIB и PRGLIB в мой код Java? если да, как я могу добавить библиотеки?


person rafitio    schedule 07.09.2017    source источник
comment
Примечание: if (as400 == null) это невозможно, потому что вы сделали new   -  person    schedule 07.09.2017
comment
Это похоже на проблему со списком библиотек. Вы уверены, что программа есть в списке библиотек задания?   -  person jmarkmurphy    schedule 07.09.2017
comment
Уверены, что %LIBL% в порядке? (Не парень AS/400.) Похоже на переменную env.   -  person Joop Eggen    schedule 07.09.2017


Ответы (1)


Согласно этой статье, Вызов RPG на AS400 из Java разрешена %LIBL%.LIB...

Но это специально не показано в документации для тега программы PCML.

Этот раздел документации, Имена путей интегрированной файловой системы для серверных объектов имеет введите здесь описание изображения

Я бы попробовал использовать просто
path="/QSYS.LIB/%LIBL%/GETKURSJAV.PGM"

person Charles    schedule 07.09.2017
comment
привет, спасибо за вашу помощь. Я вот менял путь на path="/QSYS.LIB/%LIBL%/GETKURSJAV.PGM" ошибка не показывалась, а теперь результат пустой. - person rafitio; 08.09.2017
comment
outputdata - это INT в java, но из RPG возвращается CHAR ... возможно, это часть вашей проблемы? - person Charles; 08.09.2017
comment
Я изменил вывод на CHAR, но результат все еще пустой. - person rafitio; 12.09.2017
comment
Что он должен вернуть? Вы уверены, что программа RPG возвращает это? Вероятно, следует опубликовать код RPG в отдельном вопросе. - person Charles; 12.09.2017
comment
привет, проблема решена. Я добавил ADDLIBLE LIB в свой код Java. Спасибо - person rafitio; 14.09.2017