2016-02-25 72 views
0

当iBatis试图应用结果映射时,会抛出一个BulkBeanException,但通过同一个jar跨部署不一致(本地很好,服务器部署不是)。net.sf.cglib.beans.BulkBeanException使用iBatis和Spring

我想出如何停止的问题(见我的回答如下),但我更感兴趣的是听到有关战略来诊断cglibification发生/在不同的运行环境发生了不同。我假设不一致的行为是由于在该库被加载顺序差异,但还没有想出如何确认这一点($PATH$CLASSPATH解决,同样的事情在不同的环境中)。有没有别的东西,我应该看什么?

遇到错误

  • java -jar <jar>在CentOS盒上的OS X

没有得到错误

  • java -jar <jar>通过Eclipse
  • 骡子运行在OS X
  • 通过Eclipse通过Maven的
  • 的JUnit在OS X
  • 的JUnit在OS X

堆栈跟踪

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$3.doInSqlMapClient(SqlMapClientTemplate.java:298) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1] 
     at org.springframework.orm.ibatis.SqlMapClientTemplate$3.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 

回答

1

这个Java bean在其上的iBATIS试图申请结果地图有异常(非豆符合的?)setter方法。这些制定者未返回void的是标准的,但返回的对象本身,以便set操作可能会被链接(我们有一些哈斯克尔程序员在这个项目上工作:))。

凡正在发生它是通过改变setter方法回到他们以前在那里他们与void回报定义的状态来解决。