我有一个正在运行的应用程序,在其中单击表的“编辑” 链接后,NoSuchMethodError
的日志中出现错误,并且控件停留在当前页面,而不是进入编辑页面。
在获取错误时,下面的代码已被击中;
Field[] fields = entityObj.getClass().getDeclaredFields();
for(int i=0;i<fields.length;i++){
Field field =fields[i];
field.setAccessible(true);
if(field.getDeclaredAnnotation(EmbeddedId.class)!=null){
return true;
}
}
return false;
在上面的代码行中,
if(field.getDeclaredAnnotation(EmbeddedId.class)!=null)
我遇到了特定的错误。
还提到了以下日志;
Caused by: java.lang.NoSuchMethodError: java.lang.reflect.Field.getDeclaredAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
at com.sprint.neo.querymodel.common.QueryObjectUtil.checkEnitityIsHasEmbeddedId(QueryObjectUtil.java:131)
at com.sprint.neo.querymodel.common.EntityManager.getEntityObject(EntityManager.java:89)
at com.sprint.neo.querymodel.common.EntityManager.loadEntityObject(EntityManager.java:72)
at com.sprint.neo.querymodel.common.EntityManager.entityload(EntityManager.java:60)
at com.sprint.neo.querymodel.common.EntityManager.loadAndGetEntityObject(EntityManager.java:56)
at com.sprint.neo.querymodel.common.QueryObjectUtil.getListOfEntityObject(QueryObjectUtil.java:718)
at com.sprint.neo.querymodel.common.QueryObjectCache.excuteUpdate(QueryObjectCache.java:251)
at com.sprint.neo.querymodel.common.QueryObjectRow.excuteUpdate(QueryObjectRow.java:298)
at com.sprint.neo.engine.controller.actions.TaskViewEditAction.edit(TaskViewEditAction.java:83)
由于所有jsp均已正确实现,因此控件应进入 edit jsp 页。 我对日志中的错误表示怀疑的是,是否缺少关于Reflection api的 jar 文件。 请为我提出解决此问题的解决方案。任何有价值的建议都会有所帮助。非常感谢。
答案 0 :(得分:1)
您正在使用方法Field.getDeclaredAnnotation(Class)
。此方法是Java 8中引入的。在Java 7及更早版本中不可用。您需要升级您的JDK。
Field
是AccessibleObject
的子类,并从该类继承方法。参见the Javadoc:它说“ Since:1.8”,这是内部编号方案中Java 8的版本。