我期待调用从RPG在iSeries V5R4上运行的Java程序。远程程序是一个网络服务客户端(执行邮政编码查找),在WebSphere运行。

在理想情况下,我想叫它从RPG直接?那可能吗?或者我必须创建一个Java程序在iSeries运行并使用RMI或东西来调用远程Java程序。

我们并不热衷于调用webservice的extenral直接,因为它意味着从阿瑟赛德世界开放通道直接到i系列。

我不是一个RPG程序员,只是寻找一些指向我们的球员在正确的方向或任何我需要启用使Java程序的RPG乡亲更消耗品。

谢谢, 斯科特

有帮助吗?

解决方案

由于该程序在远程服务器上运行,则不能直接从RPG调用它。鉴于这是一个Web服务,我将创建一个Java程序在iSeries上运行,并从内部RPG调用Java程序。 Nowaday的,RPG可与Java直接接口。你不得不创造一些d-规范申报类和原型出来的方法调用。在下面的例子中,假设一个Java类存在所谓的包“工具” ServiceCaller。它有一个称为getServiceReply单个方法,该方法接受三个字符字段和返回一个整数。

 *Define the Java class locally.                                       
DServiceCaller    S               O   CLASS(*JAVA:'tools.ServiceCaller')

 *Class constructor.  No parameters.                                   
DnewServiceCaller PR              O   EXTPROC(*JAVA:                   
D                                       'tools.ServiceCaller':          
D                                       *CONSTRUCTOR)                  
D                                     CLASS(*JAVA:'tools.ServiceCaller')

 *GetServiceReply.
 *public int getServiceReply(byte[] parm1, byte[] parm2, byte[] parm3)
DgetServiceReply  PR            10I 0 EXTPROC(*JAVA:
D                                       'tools.ServiceCaller':
D                                       'getServiceReply')
D Parm1                        400A   CONST
D Parm2                        400A   CONST
D Parm3                        400A   CONST

您RPG计算的标准将会是这个样子的自由形式例如:

/free
  ServiceCaller = newServiceCaller();
  iReply = getServiceReply(ServiceCaller:'Parm1':'Parm2':'Parm3');
/end-free

在Java代码,该方法getServiceReply内,转换那些字节数组为字符串是这样的:

sParm1 = new String(parm1);
sParm2 = new String(parm2);
sParm3 = new String(parm3);

当然,这是一个简化的示例和应用程序的需要会稍有不同。您将要添加错误处理代码的情况下,网络服务不回答。您可能还需要使用getter和setter方法在你的类。这一切都取决于您的应用需求和远程网络服务的要求。

在RPG类型的一些注意事项为Java类型:

RPG Type      Java Type
10I 0         int
 3I 0         byte
 5I 0         short
20I 0         long
  N           boolean
  A           byte[]

如果你感觉特别有事业心,你可以从你的RPG中调用本地Java HTTP类。但我发现,一个自定义的Java程序作为一个中间是专门写去跟RPG是去一个更简单的方法。虽然RPG可以与Java,它不是一样漂亮的Java说话的Java。

从RPG调用Java的附加信息可以在ILE RPG程序员指南中找到。该V5R4版本可以在这里找到:的http:// publib .boulder.ibm.com /信息中心/ i系列/ V5R4 /主题/书籍/ sc092507.pdf

其他提示

由于是web服务,另一种解决方案是使用斯科特克莱门特的HTTP API。它可在他的 http://www.scottklement.com/httpapi/ 网站。

一个对我很大的好处是,这是完全RPG,并且不使用任何Java它可以是一个有点呆滞的时候。我并不真正熟悉的Web服务在Java中是如何工作的,但似乎你没有形成所有的XML和它为你做。随着HTTP API,你需要做的是你自己。

还有斯科特·克莱门特在他的网站上其他一些有用的东西。一些灵巧的工具的另一个站点 http://www.think400.dk/downloads.htm

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top