我正在与ile RPG和Java进行交叉通信。 我想用一些字符串参数在.jar文件中调用类 并想将字符串返回到我的RPG程序。
我的设定方法出现问题。我无法从RPG中调用此方法。
我的“ getOut()”方法调用运行良好。我得到正确的jString。 CLASSPATH设置正确。
看看我的代码:
RPG代码:
D FirstCall S O Class(*Java:'FirstCall')
D FirstCall1 S LIKE(FirstCall)
D*
D* Constructor in .jar File
D new_FirstCall PR O EXTPROC(*Java:
D 'FirstCall'
D :*CONSTRUCTOR)
D*
D* Create Java String Object
D makestring PR O EXTPROC(*JAVA:
D 'java.lang.String':
D *CONSTRUCTOR)
D bytes 30A CONST VARYING
D*
D* Prototype for Java String's getBytes method
D cvtToBytes PR 30A EXTPROC(*JAVA:
D 'java.lang.String':
D 'getBytes')
D Varying
D*
D* Get Methode in .jar File //this work well
D getOut PR o EXTPROC(*JAVA:
D 'FirstCall':
D 'getOut')
D Class (*JAVA:'java.lang.String')
D*
D* Set Methode in .jar File //Here i have some problems
D setOut PR O EXTPROC(*JAVA:
D 'FirstCall':
D 'setOut')
D Class (*Java:'java.lang.String')
D*
C* Parameter
C *entry plist
C parm $input
C parm $output
/Free
exSr setCLASSPATH;
FirstCall = new_FirstCall();
fldjString = makestring(%trimr($input));
//Set Method call
setOut(FirstCall:fldjString);
fldjString2 = getOut(FirstCall);
fldBty = cvtToBytes(fldjString);
$output = fldBty;
*INLR = *ON;
/End-Free
Java代码:
public class FirstCall
{
public String sOut;
public static void main(String[] args) throws Exception{
}
public FirstCall(){
}
public String getOut(){
return sOut;
}
public void setOut(String sIn){
sOut = sIn + " - java";
}
}
答案 0 :(得分:1)
setOut原型不应具有返回值。从setOut行中删除“ O”。
D setOut PR EXTPROC(*JAVA:
D 'FirstCall':
D 'setOut')
D strparm O Class (*Java:'java.lang.String')
D CONST
答案 1 :(得分:0)
您像getOut一样声明setOut ... RPG等待字符串返回并且没有parm传递...
您必须这样更改声明:
D setOut PR EXTPROC(*JAVA:
D 'FirstCall':
D 'setOut')
D strparm O Class (*Java:'java.lang.String')
D CONST
如果您还需要这样的返回参数(STRING):
D setOut PR O EXTPROC(*JAVA:
D 'FirstCall':
D 'setOut')
D Class (*Java:'java.lang.String')
D strparm O Class (*Java:'java.lang.String')
D CONST