从 ile RPG 调用 Java set 和 get 方法

Calling Java set and get Method from ile RPG

我正在与 ile RPG 和 Java 进行交叉交流。 我想在带有一些字符串参数的 .jar 文件中调用 Class 并想 return 一个字符串到我的 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";
        }
    }

你像 getOut 一样声明 setOut...RPG 等待一个字符串 return 并且没有参数要传递...

您必须像这样更改您的声明:

    D setOut          PR                 EXTPROC(*JAVA:                    
    D                                             'FirstCall':              
    D                                             'setOut')                 
    D  strparm                        O   Class  (*Java:'java.lang.String') 
    D                                    CONST

如果您还需要这样的 return 参数 (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

setOut 原型不应有 return 值。从 setOut 行中删除 "O"。

D setOut          PR                  EXTPROC(*JAVA:                    
D                                             'FirstCall':              
D                                             'setOut')                 
D  strparm                        O   Class  (*Java:'java.lang.String') 
D                                     CONST