找不到方法的异常: java.lang.NoSuchMethodException: No applicable method found

这个异常出现在SQL trace 里面, 原因是调用java 代码的时候找不到方法.

遇到过一次这样的bug, 客户在升级之后, 在PO receipt 界面和Misc receipt 界面再也不能输入serial number 了. 看代码的时候, 发现本来在应该调用TrxProcessor.validateSerialNumbers 这个方法的时候没有调用. 原因就是找不到这个方法.

我们看客户的App Check, 对比了两个文件后发现, 调用的地方和这个方法的参数是一致的. 会是原因导致找不到方法呢?

通过下面的代码查到客户的数据库文件版本

set serveroutput on;
begin
fnd_aolj_util.getClassVersionfromDB('oracle.apps.inv.transaction.server.TrxProcessor');
END;

这个版本和App Check 里面的版本不一致, 而这两个版本的文件的这个方法, 参数是不一致的. 调用的时候没有找到对应参数的方法了.

这时可以重新编译这个 java 文件, 但前提是手上得有源代码. 也可以通过下面的方法让数据库重新编译java 文件, 使得与App Check 的文件版本保持一致:

1. 连接instance

2. 使用命令adadmin, 输入系统和数据库密码

3. 在 AD Administration Main Menu 上选择 [3. Compile/Reload Application Database Entities menu]

4. 选择 [4. Reload JAR files to database]

这样的话, 数据库的java 文件将会重新编译, 以保持一致.

你可能感兴趣的:(java,数据库,异常,method,版本,No,applicable)