net.sf.cglib.beans.BulkBeanException 使用 iBatis 和 Spring
net.sf.cglib.beans.BulkBeanException using iBatis and Spring
当 iBatis 尝试应用结果映射时抛出 BulkBeanException
,但通过相同的 jar 在部署之间不一致(本地很好,服务器部署不是)。
我找到了解决问题的方法(请参阅下面的回答),但我更感兴趣的是了解诊断 cglibification happened/happened 在不同运行时环境中的不同原因的策略。我认为不一致的行为是由于加载库的顺序不同造成的,但还没有弄清楚如何确认这一点($PATH
和 $CLASSPATH
在不同的环境中解决了同样的问题)。还有什么我应该看的吗?
出现错误
java -jar <jar>
美分OS 盒子
- Mule 运行时通过 Eclipse 在 OS X
没有得到错误
java -jar <jar>
在 OS X
- JUnit 通过 Maven 在 OS X
- 通过 Eclipse 在 OS X
上的 JUnit
堆栈跟踪
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in ibatis/MyClassName.xml.
--- The error occurred while applying a result map.
--- Check the MyClassName.result.
--- The error happened while setting a property on the result object.
--- Cause: net.sf.cglib.beans.BulkBeanException: 1
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:204) ~[mybatis-2.3.5.jar!/:?]
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139) ~[mybatis-2.3.5.jar!/:?]
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:578) ~[mybatis-2.3.5.jar!/:?]
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:552) ~[mybatis-2.3.5.jar!/:?]
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118) ~[mybatis-2.3.5.jar!/:?]
at org.springframework.orm.ibatis.SqlMapClientTemplate.doInSqlMapClient(SqlMapClientTemplate.java:298) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1]
at org.springframework.orm.ibatis.SqlMapClientTemplate.doInSqlMapClient(SqlMapClientTemplate.java:296) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1]
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:203) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1]
... 77 more
iBATIS 试图在其上应用结果映射的 Java bean 有异常(不符合 bean 标准?)setters。这些 setter 并没有像标准那样 return void
,而是 return 对象本身,以便 set
操作可以被链接(我们有一些 Haskell 程序员在这个项目上工作 :)).
通过将 setter 方法改回之前使用 void
return.
定义的状态,解决了问题
有同样的问题,ibatis 试图将 null 值设置为 primitive double,这导致了问题
当 iBatis 尝试应用结果映射时抛出 BulkBeanException
,但通过相同的 jar 在部署之间不一致(本地很好,服务器部署不是)。
我找到了解决问题的方法(请参阅下面的回答),但我更感兴趣的是了解诊断 cglibification happened/happened 在不同运行时环境中的不同原因的策略。我认为不一致的行为是由于加载库的顺序不同造成的,但还没有弄清楚如何确认这一点($PATH
和 $CLASSPATH
在不同的环境中解决了同样的问题)。还有什么我应该看的吗?
出现错误
java -jar <jar>
美分OS 盒子- Mule 运行时通过 Eclipse 在 OS X
没有得到错误
java -jar <jar>
在 OS X- JUnit 通过 Maven 在 OS X
- 通过 Eclipse 在 OS X 上的 JUnit
堆栈跟踪
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in ibatis/MyClassName.xml.
--- The error occurred while applying a result map.
--- Check the MyClassName.result.
--- The error happened while setting a property on the result object.
--- Cause: net.sf.cglib.beans.BulkBeanException: 1
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:204) ~[mybatis-2.3.5.jar!/:?]
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139) ~[mybatis-2.3.5.jar!/:?]
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:578) ~[mybatis-2.3.5.jar!/:?]
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:552) ~[mybatis-2.3.5.jar!/:?]
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118) ~[mybatis-2.3.5.jar!/:?]
at org.springframework.orm.ibatis.SqlMapClientTemplate.doInSqlMapClient(SqlMapClientTemplate.java:298) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1]
at org.springframework.orm.ibatis.SqlMapClientTemplate.doInSqlMapClient(SqlMapClientTemplate.java:296) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1]
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:203) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1]
... 77 more
iBATIS 试图在其上应用结果映射的 Java bean 有异常(不符合 bean 标准?)setters。这些 setter 并没有像标准那样 return void
,而是 return 对象本身,以便 set
操作可以被链接(我们有一些 Haskell 程序员在这个项目上工作 :)).
通过将 setter 方法改回之前使用 void
return.
有同样的问题,ibatis 试图将 null 值设置为 primitive double,这导致了问题