我用的是spring+ibatis+struts
我在手动开启事务时报的错,程序执行到sqlMap.startTransaction();时报错,请问是什么原因?急急急!!!!java代码:
try {
String reource="sql-map-config.xml";

reader =Resources.getResourceAsReader("sql-map-config.xml");

 sqlMap =SqlMapClientBuilder.buildSqlMapClient(reader);
//  sqlMap=XmlSqlMapBuilder.buildSqlMap(reader);


sqlMap.startTransaction();
Object obj1=save(params);
System.out.println("obj1:"+obj1==null);
Object obj=save(organ);
System.out.println("obj:"+obj==null);
if((obj!=null)&&(obj1!=null)){
flag=true;
sqlMap.commitTransaction();

}else{
sqlMap.endTransaction();
}
错误信息:java.lang.NullPointerException
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.startTransaction(SqlMapExecutorDelegate.java:732)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.startTransaction(SqlMapSessionImpl.java:164)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.startTransaction(SqlMapClientImpl.java:141)
at com.venus.common.service.OrganManager.saveAll(OrganManager.java:220)
at com.venus.common.service.OrganManager$$FastClassByCGLIB$$ef3f2a1a.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:693)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:139)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:628)
at com.venus.common.service.OrganManager$$EnhancerByCGLIB$$35119c7.saveAll(<generated>)
at com.venus.common.web.OrganAction.add(OrganAction.java:166)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.venus.common.filter.SessionTimeOutFilter.doFilter(SessionTimeOutFilter.java:40)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:619)

解决方案 »

  1.   

    sqlMap =SqlMapClientBuilder.buildSqlMapClient(reader);
    sqlMap为空,确定下你的文件名是否写正确,路径是否正确。。
      

  2.   


    再补充一点,我用debug调试的时候在这句抛出了异常
    sqlMap =SqlMapClientBuilder.buildSqlMapClient(reader);完整的方法:
    public boolean saveAll(Organ organ,Map params,String path){
    Reader reader = null;
    SqlMapClient sqlMap = null;
    Connection conn=null;
    boolean flag = false;
    // Resource resource = new ClassPathResource("sql-map-config.xml");  try {
    String reource="sql-map-config.xml";

    reader =Resources.getResourceAsReader("sql-map-config.xml");

     sqlMap =SqlMapClientBuilder.buildSqlMapClient(reader);
    //  sqlMap=XmlSqlMapBuilder.buildSqlMap(reader);


    sqlMap.startTransaction();
    Object obj1=save(params);
    System.out.println("obj1:"+obj1==null);
    Object obj=save(organ);
    System.out.println("obj:"+obj==null);
    if((obj!=null)&&(obj1!=null)){
    flag=true;
    sqlMap.commitTransaction();

    }else{
    sqlMap.endTransaction();
    }




    } catch (Exception e) {
    // TODO Auto-generated catch block
    System.out.println("message:"+e.getMessage());
    e.printStackTrace();

    }
      
    return flag;
    }
      

  3.   

    sql-map-config.xml在src下面,而且我打印System.out.println(sqlMap==null);时为false,你QQ是多少我加你吧,我的295833641