这次我用Stripes + ibatis + jQuery + MySql + Tomcat 来开发一个网站IDE是IntelliJ IDEA 8.1.3。
当我起动tomcat的时候ibatis抛出异常,
有好心人帮我解决一下好吗?非常着急,赶着交活儿。
谢谢了!

<<错误信息>>
cmd /c D:\Sun\SDK\jdk\bin\java "-Dcatalina.base=C:\Documents and

Settings\yong\.IntelliJIdea8x\system\tomcat\Unnamed_sushiacademyabc0dca7" "-Dcatalina.home=D:\Program Files\Apache Software

Foundation\Tomcat 6.0" "-Djava.io.tmpdir=D:\Program Files\Apache Software Foundation\Tomcat 6.0\temp" -jar "D:\Program

Files\Apache Software Foundation\Tomcat 6.0\bin\bootstrap.jar" start
2009/11/18 0:56:28 org.apache.catalina.core.AprLifecycleListener init
情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on

the java.library.path: D:\Sun\SDK\jdk\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\PC

Connectivity Solution\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\Program Files\MySQL\MySQL Server 5.1

\bin;C:\php;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;D:\Program

Files\QuickTime\QTSystem\;D:\Sun\SDK\jdk\bin;d:\Sun\SDK\bin
2009/11/18 0:56:30 org.apache.coyote.http11.Http11Protocol init
情報: Coyote HTTP/1.1を http-8080 で初期化します
2009/11/18 0:56:30 org.apache.catalina.startup.Catalina load
情報: Initialization processed in 5004 ms
2009/11/18 0:56:31 org.apache.catalina.core.StandardService start
情報: サービス Catalina を起動します
2009/11/18 0:56:31 org.apache.catalina.core.StandardEngine start
情報: Starting Servlet Engine: Apache Tomcat/6.0.20
00:56:42,337  INFO StartupListener:34 - web container starting ...
00:56:42,347 DEBUG StartupListener:39 - sqlmapConfig: sqlmap-config.xml
2009/11/18 0:56:44 org.apache.catalina.core.StandardContext listenerStart
致命的: クラス org.sushiacademy.common.StartupListener のリスナインスタンスにコンテキスト初期化イベントを送信中の例外です
org.apache.ibatis.exceptions.IbatisException:
### Error building SqlSession.
### The error may exist in SQL Mapper Configuration
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause:

java.lang.NullPointerException
 at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
 at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:31)
 at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:14)
 at org.sushiacademy.common.SqlSessionUtil.initialize(SqlSessionUtil.java:46)
 at org.sushiacademy.common.StartupListener.contextInitialized(StartupListener.java:40)
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
 at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
 at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
 at org.apache.catalina.core.StandardService.start(StandardService.java:516)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
 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.catalina.startup.Bootstrap.start(Bootstrap.java:288)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)Caused by:

org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.NullPointerException
 at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:68)
 at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:53)
 at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:28)
 ... 27 more
Caused by: java.lang.NullPointerException
 at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:59)
 ... 29 more
2009/11/18 0:56:44 org.apache.catalina.core.StandardContext start
致命的: Error listenerStart
2009/11/18 0:56:44 org.apache.catalina.core.StandardContext start
致命的: 以前のエラーのためにコンテキストの起動が失敗しました [/sushiacademy]
00:56:44,250  INFO StartupListener:52 - web container stopping ...
2009/11/18 0:56:44 org.apache.catalina.core.StandardContext listenerStop
致命的: クラス org.sushiacademy.common.StartupListener のリスナインスタンスにコンテキスト破棄イベントを送信中の例外です
java.lang.NullPointerException
 at org.sushiacademy.common.StartupListener.contextDestroyed(StartupListener.java:55)
 at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:3973)
 at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4577)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4474)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
 at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
 at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
 at org.apache.catalina.core.StandardService.start(StandardService.java:516)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
 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.catalina.startup.Bootstrap.start(Bootstrap.java:288)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2009/11/18 0:56:47 org.apache.catalina.core.ApplicationContext log
情報: ContextListener: contextInitialized()
2009/11/18 0:56:47 org.apache.catalina.core.ApplicationContext log
情報: SessionListener: contextInitialized()
2009/11/18 0:56:47 org.apache.coyote.http11.Http11Protocol start
情報: Coyote HTTP/1.1を http-8080 で起動します
2009/11/18 0:56:48 org.apache.jk.common.ChannelSocket init
情報: JK: ajp13 listening on /0.0.0.0:8009
2009/11/18 0:56:48 org.apache.jk.server.JkMain start
情報: Jk running ID=0 time=0/130  config=null
2009/11/18 0:56:48 org.apache.catalina.startup.Catalina start
情報: Server startup in 17472 ms
Connected to server


--------------------------------------------------------------------------------------------
<<SqlSessionUtil.java>>

package org.sushiacademy.common;

import org.apache.log4j.Logger;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.io.Resources;
import java.io.Reader;
import java.io.IOException;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.sqlmap.client.SqlMapClient;


public class SqlSessionUtil {

    private static final Logger logger = Logger.getLogger(SqlSessionUtil.class);

    private static SqlSessionFactory sqlSessionFactory;

    private static final ThreadLocal<SqlSession> sqlSessionThreadLocal = new ThreadLocal<SqlSession>();

    private SqlSessionUtil() {
    }

    public static void initialize(String sqlmapConfig) {

        if (sqlSessionFactory == null) {
            Reader reader = null;

            try {
                reader = Resources.getResourceAsReader(sqlmapConfig);

            } catch (IOException e) {
                logger.error("Exception in creating SqlSessionFactory!", e);
            }

            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }
    }

    public static SqlSession currentSqlSession() {
        SqlSession sqlSession = sqlSessionThreadLocal.get();

        if (sqlSession == null) {
            sqlSession = sqlSessionFactory.openSession();
            logger.debug("opening sqlsession ...");
            sqlSessionThreadLocal.set(sqlSession);
        }
           
        return sqlSession;
    }

    public static void closeSqlSession() {
        if (sqlSessionFactory == null || sqlSessionThreadLocal == null)
            return;

        logger.debug("closing sqlsession ...");
        SqlSession sqlSession = sqlSessionThreadLocal.get();

        if (sqlSession != null)
            sqlSession.close();

        sqlSessionThreadLocal.set(null);
    }

    public static void commit() {
        if (sqlSessionFactory == null || sqlSessionThreadLocal == null)
            return;

        logger.debug("committing sqlsession ...");
        SqlSession sqlSession = sqlSessionThreadLocal.get();

        if (sqlSession != null)
            sqlSession.commit();
    }
}
---------------------------------------------------------------------------------
<<ICourseDAO.java>>

package org.sushiacademy.dao;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.common.resources.Resources;
import java.util.List;
import java.sql.SQLException;
import java.io.Reader;
import java.io.IOException;
import org.sushiacademy.domain.Course;


public class ICourseDAO{

    public static SqlMapClient sqlMapClient = null;
    static {
        try {
          Reader reader = Resources.getResourceAsReader("sqlmap-config.xml");
          sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
          reader.close();
        } catch (IOException e) {
          // Fail fast.
          throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
        }
    }
    public List<Course> queryCourse(){
        List<Course> courseList = null;
        try{
            courseList =sqlMapClient.queryForList("selectCourse");
        }catch(SQLException e){
            e.printStackTrace();
        }
        return courseList;
    }
//    public static void main(String[] args){
//        ICourseDAO courseDao = new ICourseDAO();
//        for(Course course:courseDao.queryCourse()){
//            System.out.println(course);
//        }
//    }
}

-------------------------------------------------------------------------
<<sqlmap-config.xml>>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
  <properties resource="SqlMap.properties"/>
  <transactionManager type="JDBC">
    <dataSource type="SIMPLE">
      <property value="${driver}" name="JDBC.Driver"/>
      <property value="${url}" name="JDBC.ConnectionURL"/>
      <property value="${username}" name="JDBC.Username"/>
      <property value="${password}" name="JDBC.Password"/>
    </dataSource>
  </transactionManager>   
 <sqlMap resource="Course.xml"/>
</sqlMapConfig> 

----------------------------------------------------------------------------------
<<Course.xml>>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
        "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
   
    <typeAlias alias="Course" type="org.sushiacademy.domain.Course"/>

    <select id="selectCourse" parameterClass="org.sushiacademy.domain.Course"
        resultClass="org.sushiacademy.domain.Course">
        select *       
        from t_course       
    </select>
   
</sqlMap>

----------------------------------------------------------------------------
<<SqlMap.properties>>

driver=org.gjt.mm.mysql.Driver
url=jdbc\:mysql\://localhost\:3306/sushiacdemy?useUnicode\=true&characterEncoding\=UTF-8
username=root
password=******

----------------------------------------------------------------------------------
<<StartupListener.java>>

package org.sushiacademy.common;
import org.apache.log4j.Logger;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;


public class StartupListener implements ServletContextListener {

    private static final Logger logger = Logger.getLogger(StartupListener.class);

    private static final String SQLMAP_CONFIG = "sqlmapConfig";

    private static final String QUARTZ_CONFIG = "quartzConfig";

    private Scheduler mailReminderScheduler;

    /**
     * initialize ibatis sqlmap and quartz scheduler
     * put ibatis SqlSessionFactory into application scope
     * @param servletContextEvent event
     */
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        logger.info("web container starting ...");

        ServletContext ctx = servletContextEvent.getServletContext();

        String sqlmapConfig = ctx.getInitParameter(SQLMAP_CONFIG);
        logger.debug("sqlmapConfig: " + sqlmapConfig);
        SqlSessionUtil.initialize(sqlmapConfig);

        String quartzConfig = ctx.getInitParameter(QUARTZ_CONFIG);
        logger.debug("quartzConfig: " + quartzConfig);
        initMailReminderScheduler(quartzConfig);
    }

    /**
     * stop quartz scheduler
     * @param servletContextEvent event
     */
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        logger.info("web container stopping ...");

        try {
            mailReminderScheduler.shutdown(true);
        } catch (SchedulerException e) {
            logger.error("Exception in stopping mail reminder scheduler!", e);
        }
    }
}

-------------------------------------------------------------------------------------
<<Course.java>>

package org.sushiacademy.domain;
import java.io.Serializable;
import java.util.Date;

public class Course implements Serializable {

    private String title;
    private Date start;
    private Date end;   

    public String getTitle() {
        return title;
    }
   
    public void setTitle(String title) {
        this.title = title;
    }

    public Date getStart() {
        return start;
    }

    public void setStart(Date start) {
        this.start = start;
    }

    public Date getEnd() {
        return end;
    }

    public void setEnd(Date end) {
        this.end = end;
    }
}