我们的服务器已更新为java 8,下面的代码不再有效。我使用的是最新版本的jtopen,无法在java 7或8中使用它。
代码使用jtopen(java工具包)访问IBM i上的集成文件系统。
AS400 as400 = new AS400("myip","myuser","mypassword")
IFSFile file = new IFSFile(as400, params.path);
if (file.exists()){
Ifs ifs = new Ifs()
ifs.CopyFile(as400,params.path,response)
as400.disconnectAllServices();
}
else {
redirect(action: "fileNotFound")
}
我收到以下错误:
java.beans.IntrospectionException:找不到方法:setLastModified。 Stacktrace如下:java.lang.reflect.InvocationTargetException:null 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 〜[NA:1.8.0_77] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 〜[NA:1.8.0_77] 在java.lang.Thread.run(Thread.java:745)[na:1.8.0_77] 引起:java.lang.Error:java.beans.IntrospectionException:找不到方法:setLastModified 在com.ibm.as400.access.IFSFileBeanInfo。(IFSFileBeanInfo.java:126) 〜[jt400-8.7.jar:JTOpen 8.7] 在java.lang.Class.newInstance(Class.java:442)〜[na:1.8.0_77] at com.sun.beans.finder.InstanceFinder.instantiate(InstanceFinder.java:96) 〜[NA:1.8.0_77] 在com.sun.beans.finder.InstanceFinder.find(InstanceFinder.java:66) 〜[NA:1.8.0_77] 在java.beans.Introspector.findExplicitBeanInfo(Introspector.java:448) 〜[NA:1.8.0_77] 在java.beans.Introspector。(Introspector.java:398)〜[na:1.8.0_77] 在java.beans.Introspector.getBeanInfo(Introspector.java:173)〜[na:1.8.0_77] 在PageController.getBoardReport(PageController.groovy:113)〜[main /:na]
任何想法如何解决这个问题?
答案 0 :(得分:2)
看起来1.7中的Java bean基础结构发生了变化,要求setter方法的返回类型为void(参见Why did PropertyDescriptor behavior change from Java 1.6 to 1.7?)。 setLastModified方法的返回类型为boolean,以匹配java.io.File中的类似方法。已将IFSFileBeanInfo.java的修复程序检入JTOpen CVS存储库。您将需要自己构建JTOpen,向IBM服务部门询问包含该修复程序的jt400.jar,或者等待JTOpen的下一个版本。