2016-10-31 7 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 코드가 정상적으로 작동합니다. 코드는 디버그, 예외가 getNMTW 기능에서 발생하는 경우

/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 방법은 잘 작동, 잘못한다

public class NumberToWord 
{ 
..... 
    . 
    . 
    public static String strconvert(String nms) { 
    . 
    . 
    . 
    return nms; 
    } 

} 

내 RPGLE 코드는,이, 아래 같은 것입니다.

CLASSPATH가 이미 설정되었습니다. 나는 NoClassFound 오류 대신 NoSuchMethodError를 얻고 있기 때문에 괜찮다고 생각한다.

답변

2

getNMTW 함수가 varchar를 Java 메소드에 전달하도록 설정된 함수에 대한 선언처럼 보입니다. RPG가 Java를 호출하면 varchar 필드가 Java 바이트 배열로 변환됩니다. 먼저 RPG 필드를 Java String으로 변환 한 다음 해당 문자열을 전달해야합니다. 이 시도 : 다음

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'); 

두 번째 옵션은 바이트 배열을 수용하고 자바의 String으로 바이트 배열을 변환하는 자바 getNMTW 방법을 변경하는 것입니다. 이것은 RPG 코드의 혼란을 덜어주기 때문에 선호되는 방법입니다. 그러나 어느 쪽이든 작동합니다.