2016-10-31 18 views
0

RPGLEからJavaメソッドを呼び出す必要があります。 私はプロトタイプの方法が間違っていると思います。RPGLE(as400)の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は既に設定されています。私はNoClassFoundエラーの代わりにNoSuchMethodErrorを取得しているので、その素晴らしいと思います。

答えて

2

getNMTW関数がvarcharをJavaメソッドに渡すように宣言されているようです。 RPGがJavaを呼び出すと、varcharフィールドはJavaバイト配列に変換されます。 RPGフィールドをJava Stringに変換してから、その文字列を渡す必要があります。第二の選択肢は、バイト配列を受け入れ、その後、Javaで文字列にバイト配列を変換するために、あなたのJava getNMTW方法を変更することです

String2 = JAVA_toString('12345'); 
String2 = getNMTW('12345'); 

dcl-pr getNMTW static like(JAVA_String) 
        extproc(*JAVA : 
           'NumberToWord' : 
           'strconvert'); 
    value object(*JAVA :'java.lang.String') ; 
end-pr; 

して、これを試してみてください。これは、RPGコードの混乱を避けるため、私が推奨する方法です。しかしどちらの方法でも動作します。

関連する問題