[英]Call java method from RPGLE (as400)
我需要從RPGLE調用Java方法,我收到以下錯誤。 我認為我制作方法原型的方法是錯誤的。
Cause . . . . . : RPG procedure TESTJ in program TESTLIB/TESTJ received
Java exception "java.lang.NoSuchMethodError:
NumberToWord.strconvert([B)Ljava/lang/String;" when calling method
"strconvert" with signature "([B)Ljava.lang.String;" in class
"NumberToWord".
我的Java代碼工作正常。 代碼如下所示
public class NumberToWord
{
.....
.
.
public static String strconvert(String nms) {
.
.
.
return nms;
}
}
我的RPGLE代碼應該是錯誤的,
/free
ctl-opt dftactgrp(*no) actgrp(*caller);
dcl-s String1 object(*java:'java.lang.String');
dcl-s String2 object(*java:'java.lang.String');
dcl-s str varchar(250);
dcl-s JAVA_String object( *JAVA :'java.lang.String' );
dcl-pr JAVA_toString like( JAVA_String )
extproc( *JAVA :
'java.lang.String' :
*constructor );
value varchar( 65535 ) const;
end-pr;
dcl-pr getNMTW static like( JAVA_String )
extproc( *JAVA :
'NumberToWord' :
'strconvert' );
value varchar(65535) const;
end-pr;
dcl-pr getBytes char(250) extproc(*java:'java.lang.String':'getBytes');
end-pr;
String1 = JAVA_toString('543'); //works fine
str = getBytes(String1); //works fine
String2 = getNMTW('12345'); //exception occurs at this point
str = getBytes(String2);
*INLR = *ON;
/END-FREE
JAVA_toString和getBytes方法工作正常,調試時,getNMTW函數會發生異常。
CLASSPATH已設置。 我認為這很好,因為我收到了NoSuchMethodError而不是NoClassFound錯誤。
您的函數getNMTW聲明似乎設置為將varchar傳遞給Java方法。 當RPG調用Java時,varchar字段將轉換為Java字節數組。 因此,您首先需要將RPG字段轉換為Java字符串,然后再傳遞該字符串。 嘗試這個:
dcl-pr getNMTW static like( JAVA_String )
extproc( *JAVA :
'NumberToWord' :
'strconvert' );
value object( *JAVA :'java.lang.String' ) ;
end-pr;
接着:
String2 = JAVA_toString('12345');
String2 = getNMTW('12345');
第二種選擇是將Java getNMTW方法更改為接受字節數組,然后在Java中將字節數組轉換為String。 這是我的首選方法,因為它有助於使RPG代碼保持混亂。 但是任何一種方法都行得通。
我發現了錯誤。
當JVM已經啟動時,在該作業中Java無法識別所做的更改,因此我必須先注銷然后再次登錄以查看對Java函數所做的更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.