OgnlRuntime can not access a member of class java.util.ArrayList$SubList with modifiers "public"

探讨了在使用MyBatis框架时遇到的序列化问题,特别是关于内部类的访问权限和序列化需求,以及如何解决由ArrayList的subList引起的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内部类无法序列化


  • Action 向页面传输时,定义 Action 内部的 VO 类,无法传输
  • MyBatis 调用 Mapper 接口,传入List 集合,List = subList 的提示如下异常

Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression ‘orderIdList != null and orderIdList.size() > 0’.
Cause: org.apache.ibatis.ognl.MethodFailedException:
Method “size” failed for object [2590]
[java.lang.IllegalAccessException:
Class org.apache.ibatis.ognl.OgnlRuntime can not access a member of class java.util.ArrayList S u b L i s t w i t h m o d i f i e r s " p u b l i c " ] a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . O g n l C a c h e . g e t V a l u e ( O g n l C a c h e . j a v a : 50 ) a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . E x p r e s s i o n E v a l u a t o r . e v a l u a t e B o o l e a n ( E x p r e s s i o n E v a l u a t o r . j a v a : 32 ) a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . I f S q l N o d e . a p p l y ( I f S q l N o d e . j a v a : 33 ) a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . C h o o s e S q l N o d e . a p p l y ( C h o o s e S q l N o d e . j a v a : 34 ) a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . M i x e d S q l N o d e . a p p l y ( M i x e d S q l N o d e . j a v a : 32 ) a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . D y n a m i c S q l S o u r c e . g e t B o u n d S q l ( D y n a m i c S q l S o u r c e . j a v a : 40 ) a t o r g . a p a c h e . i b a t i s . m a p p i n g . M a p p e d S t a t e m e n t . g e t B o u n d S q l ( M a p p e d S t a t e m e n t . j a v a : 278 ) a t o r g . a p a c h e . i b a t i s . e x e c u t o r . C a c h i n g E x e c u t o r . q u e r y ( C a c h i n g E x e c u t o r . j a v a : 75 ) a t o r g . a p a c h e . i b a t i s . s e s s i o n . d e f a u l t s . D e f a u l t S q l S e s s i o n . s e l e c t L i s t ( D e f a u l t S q l S e s s i o n . j a v a : 108 ) a t o r g . a p a c h e . i b a t i s . s e s s i o n . d e f a u l t s . D e f a u l t S q l S e s s i o n . s e l e c t L i s t ( D e f a u l t S q l S e s s i o n . j a v a : 102 ) a t s u n . r e f l e c t . G e n e r a t e d M e t h o d A c c e s s o r 234. i n v o k e ( U n k n o w n S o u r c e ) a t s u n . r e f l e c t . D e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 43 ) a t j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 497 ) a t o r g . m y b a t i s . s p r i n g . S q l S e s s i o n T e m p l a t e SubList with modifiers "public"] at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:50) at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32) at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:33) at org.apache.ibatis.scripting.xmltags.ChooseSqlNode.apply(ChooseSqlNode.java:34) at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32) at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:40) at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:278) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:75) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102) at sun.reflect.GeneratedMethodAccessor234.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.mybatis.spring.SqlSessionTemplate SubListwithmodifiers"public"]atorg.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:50)atorg.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)atorg.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:33)atorg.apache.ibatis.scripting.xmltags.ChooseSqlNode.apply(ChooseSqlNode.java:34)atorg.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)atorg.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:40)atorg.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:278)atorg.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:75)atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)atsun.reflect.GeneratedMethodAccessor234.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)atjava.lang.reflect.Method.invoke(Method.java:497)atorg.mybatis.spring.SqlSessionTemplateSqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)
… 12 more

java.lang.NullPointerException loginAction.LoginAction.abc(LoginAction.java:31) java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.base/java.lang.reflect.Method.invoke(Method.java:566) ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:873) ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1539) ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68) com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:96) com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:88) ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1615) ognl.ASTMethod.getValueBody(ASTMethod.java:91) ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) ognl.SimpleNode.getValue(SimpleNode.java:258) ognl.Ognl.getValue(Ognl.java:467) ognl.Ognl.getValue(Ognl.java:431) com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:351) com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:403) com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:349) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:436) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252) org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:253) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:177) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterIntercept
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值