由于程序在远程服务器上运行,因此您不能直接从 RPG 调用它。鉴于它是一个 Web 服务,我将创建一个 Java 程序以在 iSeries 上运行并从 RPG 中调用该 Java 程序。现在,RPG 可以直接与 Java 交互。您必须创建一些 D-specs 来声明类和方法调用的原型。在下面的示例中,假设在包“tools”中存在一个名为 ServiceCaller 的 Java 类。它有一个名为 getServiceReply 的方法,它接受三个字符字段并返回一个整数。
*本地定义Java类。
DServiceCaller SO CLASS(*JAVA:'tools.ServiceCaller')
*类构造函数。无参数。
DnewServiceCaller PR O EXTPROC(*JAVA:
D'tools.ServiceCaller':
D *构造器)
D CLASS(*JAVA:'tools.ServiceCaller')
*获取服务回复。
*public int getServiceReply(byte[] parm1, byte[] parm2, byte[] parm3)
DgetServiceReply PR 10I 0 EXTPROC(*JAVA:
D'tools.ServiceCaller':
D'getServiceReply')
D Parm1 400A 常数
D Parm2 400A 常数
D Parm3 400A 常数
您的 RPG 计算规范将类似于以下自由格式示例:
/自由
ServiceCaller = newServiceCaller();
iReply = getServiceReply(ServiceCaller:'Parm1':'Parm2':'Parm3');
/无结束
在 java 代码中,在 getServiceReply 方法中,将这些字节数组转换为如下字符串:
sParm1 = 新字符串(parm1);
sParm2 = 新字符串(parm2);
sParm3 = 新字符串(parm3);
当然,这是一个过于简单的示例,您的应用程序需求会略有不同。您将需要添加错误处理代码以防 Web 服务不响应。您可能还想在课堂上使用 getter 和 setter。这完全取决于您的应用程序需求和远程 Web 服务的要求。
关于 RPG 类型到 Java 类型的一些注意事项:
RPG 类型 Java 类型
10I 0 整数
3I 0 字节
5I 0 短
20I 0 长
N 布尔值
一个字节[]
如果您感觉特别有野心,您可以从您的 RPG 中调用本机 Java HTTP 类。但是我发现,专门编写用于与 RPG 对话的自定义 Java 程序充当中间人是一种更简单的方法。尽管 RPG 可以与 Java 对话,但它不如 Java 与 Java 对话那么漂亮。
可以在 ILE RPG 程序员指南中找到有关从 RPG 调用 Java 的其他信息。V5R4 版本可以在这里找到:http: //publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/books/sc092507.pdf