RPGLE中创建java.io.File对象报错RNQ0301,求问题排查
问题:RPGLE中创建java.io.File对象触发NoSuchMethodError错误
我正尝试在RPGLE中使用jsoup,但对Java了解不多,目前卡在创建java.io.File对象供jsoup使用的环节,显然存在操作错误却无法定位问题。
以下是我的代码:
// Create Java String Object Dcl-Pr newString Object(*Java:'java.lang.String') ExtProc(*Java:'java.lang.String':*CONSTRUCTOR); *N Varchar(32767) Const; End-Pr; // Create Java File Object Dcl-Pr newFile Object(*Java:'java.io.File') ExtProc(*Java:'java.io.File':*CONSTRUCTOR); *N Object(*Java:'java.lang.string'); End-Pr; Dcl-S String Object(*Java:'java.lang.string'); Dcl-S File Object(*Java:'java.io.File'); String = newString('/java/jsoup/46525580.html'); File = newFile(String);
String对象已成功创建,我通过String.getBytes方法验证并将数据返回至字母字段。但调用newFile时触发RNQ0301错误:
Message . . . . : Java exception received when calling Java method (C G D F). Cause . . . . . : RPG procedure JSOUP in program RLSTESTLIB/JSOUP received Java exception "java.lang.NoSuchMethodError: java/io/File.<init>(Ljava/lang/string;)V" when calling method "<init>" with signature "(Ljava.lang.string;)V" in class "java.io.File".
我哪里操作错误?我为java.io.File构造器创建的原型显然有误,但因对Java不够熟悉无法找出问题所在。
错误原因
Java是大小写敏感的语言,你在定义newFile原型和String变量时,错误地将java.lang.String写成了小写的java.lang.string,而Java中根本不存在java.lang.string这个类,导致JVM找不到匹配的File构造方法(正确的构造方法参数类型是java.lang.String)。
修正后的代码
把所有小写的java.lang.string替换为大写的java.lang.String即可:
// Create Java String Object Dcl-Pr newString Object(*Java:'java.lang.String') ExtProc(*Java:'java.lang.String':*CONSTRUCTOR); *N Varchar(32767) Const; End-Pr; // Create Java File Object Dcl-Pr newFile Object(*Java:'java.io.File') ExtProc(*Java:'java.io.File':*CONSTRUCTOR); *N Object(*Java:'java.lang.String'); // 修正此处的大小写 End-Pr; Dcl-S String Object(*Java:'java.lang.String'); // 修正此处的大小写 Dcl-S File Object(*Java:'java.io.File'); String = newString('/java/jsoup/46525580.html'); File = newFile(String);
补充说明
- Java中的类名、方法名、变量名严格区分大小写,
String是Java核心类的标准写法,必须首字母大写。 - 修正后,
newFile原型会正确匹配java.io.File中接收String类型参数的构造方法,就能成功创建File对象了。
内容的提问来源于stack exchange,提问作者Rob Schember
相关产品推荐
相关产品推荐

