1

我希望从在 Iseries V5r4 上运行的 RPG 调用 Java 程序。远程程序是一个 Web 服务客户端(执行邮政编码查找),在 Websphere 中运行。

理想情况下,我想直接从 RPG 中调用它?那可能吗?还是我必须创建一个 java 程序才能在 iSeries 上运行并使用 RMI 或其他东西来调用远程 java 程序。

我们并不热衷于直接调用外部 Web 服务,因为这意味着打开从另一个世界直接到 iSeries 的路径。

我不是一个 RPG 程序员,只是在寻找能够为我们的人指明正确方向的东西,或者我需要启用的任何东西,以使 Java 程序更适合 RPG 人。

谢谢,斯科特

4

2 回答 2

9

由于程序在远程服务器上运行,因此您不能直接从 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

于 2009-08-17T13:50:59.707 回答
3

由于它是一个 Web 服务,另一个解决方案是使用 Scott Klement 的 HTTP API。它可以在他的网站http://www.scottklement.com/httpapi/上找到。

对我来说最大的好处之一是这完全是 RPG 并且不使用任何有时会有点迟钝的 Java。我并不真正熟悉 Web 服务在 Java 中是如何工作的,但看起来您不必形成所有的 XML,它已经为您完成了。使用 HTTP API,您需要自己做。

Scott Klement 在他的网站上还有其他一些有用的东西。另一个带有一些简洁工具的站点是http://www.think400.dk/downloads.htm

于 2009-08-19T14:07:02.953 回答