从Java调用AS/400 RPG程序
我想从java调用AS/400 RPG程序,但我面临如下错误 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) ... 还有一个 这是我的java代码从Java调用AS/400 RPG程序,java,ibm-midrange,rpg,Java,Ibm Midrange,Rpg,我想从java调用AS/400 RPG程序,但我面临如下错误 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) 位于Cal
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 CULLIB和PRGLIB添加到我的java代码中?如果是,如何添加库?根据本文,允许使用%LIBL%.LIB 但它并没有具体显示在 文档的这一部分有 我会尝试只使用
path=“/QSYS.LIB/%LIBL%/GETKURSJAV.PGM”
旁注:if(as400==null)
这是不可能的,因为您做了一个新的
这看起来像是库列表问题。您确定该程序在作业的库列表中吗?确定%LIBL%可以吗?(不是AS/400的人。)看起来像一个env变量。嗨,谢谢你的帮助。我一直在将路径更改为path=“/QSYS.LIB/%LIBL%/GETKURSJAV.PGM”
错误没有显示,但现在结果是空的。outputdata在java中是一个INT,但从RPG返回一个CHAR…也许这是您的问题的一部分?我一直在将输出更改为CHAR,但结果仍然是空的。它应该返回什么?你确定RPG程序会返回这个吗?可能应该在单独的问题中发布RPG代码。嗨,问题解决了。我已经在java代码中添加了ADDLIBLE LIB
。谢谢