这个异常出现在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 文件将会重新编译, 以保持一致.