sco*_*yab 1 java rpg ibm-midrange
我正在寻找从Iseries V5r4上运行的RPG调用Java程序.远程程序是在Websphere中运行的Web服务客户端(执行邮政编码查找).
理想情况下,我想直接从RPG中调用它?那可能吗?或者我是否必须创建一个在iSeries上运行的java程序,并使用RMI或其他东西来调用远程java程序.
我们并不热衷于直接调用extenral webservice,因为它意味着从其他世界直接到iSeries的开放路径.
我不是一个RPG程序员,只是想找点东西指出我们的人正确的方向或我需要的任何东西,以使java程序更适合RPG人员.
谢谢,斯科特
由于程序在远程服务器上运行,因此无法直接从RPG调用它.鉴于它是一个Web服务,我将创建一个在iSeries上运行的Java程序,并从RPG中调用该Java程序.现在,RPG可以直接与Java连接.你必须创建一些D-specs来声明类并将方法调用原型化.在下面的示例中,假设在"工具"包中存在一个名为ServiceCaller的Java类.它有一个名为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);
当然,这是一个过于简单的示例,您的应用程序需求会略有不同.如果Web服务没有回复,您将需要添加错误处理代码.您可能还想在课堂上使用getter和setter.这完全取决于您的应用程序需求和远程Web服务的要求.
关于Java类型的RPG类型的一些注释:
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/infocenter/iseries/v5r4/topic/books/sc092507.pdf
| 归档时间: |
|
| 查看次数: |
6495 次 |
| 最近记录: |