2013-5-24 15:06:06 org.apache.catalina.core.StandardContext listenerStart
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from input stream
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1403)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:545)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:272)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:196)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
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:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from input stream
at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:555)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:677)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1400)
... 27 more
Caused by: org.dom4j.DocumentException: http://www.jboss.org/dtd/hibernate/hibernate-mapping-3.0.dtd Nested exception: http://www.jboss.org/dtd/hibernate/hibernate-mapping-3.0.dtd
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:546)
... 31 more
2013-5-24 15:06:06 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2013-5-24 15:06:06 org.apache.catalina.core.StandardContext start
严重: Context [/enputProjectManage] startup failed due to previous errors
2013-5-24 15:06:06 org.apache.catalina.core.ApplicationContext log
信息: Closing Spring root WebApplicationContext
2013-5-24 15:06:06 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor host-manager.xml
2013-5-24 15:06:06 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor manager.xml
2013-5-24 15:06:06 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory docs
2013-5-24 15:06:06 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory examples
2013-5-24 15:06:07 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
2013-5-24 15:06:07 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
2013-5-24 15:06:07 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory ROOT
2013-5-24 15:06:07 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2013-5-24 15:06:07 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2013-5-24 15:06:07 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/47  config=null
2013-5-24 15:06:07 org.apache.catalina.startup.Catalina start
信息: Server startup in 5545 ms代码没改动过,tomcat一会能启动,一会儿不能启动。好几天了,基本下午能启动的时候多一些。
配置文件确定没有错误。因为有时能正确启动。TomcatSSH服务器异常

解决方案 »

  1.   

    配置文件内的头信息http://www.jboss.org/dtd/hibernate/hibernate-mapping-3.0.dtd改为http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd可能是解析不了
      

  2.   

    这是我的applicationContext.xml文件的前面部分信息。里面没有hibernate有关的部分。不知道楼上说的是哪个配置文件中的?<?xml version="1.0" encoding="UTF-8"?>
    <beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- DBCP连接池配置 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName">
    <value>net.sourceforge.jtds.jdbc.Driver</value>
    </property>  <property name="url">
    <value>jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=enputprojectmanage</value>
    </property> <property name="username">
    <value>sa</value>
    </property>
      

  3.   

    WEB-INF/applicationContext.xml这个文件里有写监听吗,明显的是报sessionFactory的错误,再检查下,如果没改这个,看下是不是改了tomcat的配置文件内容
      

  4.   

    applicationContext中没有写监听。他报的这个listener是在web.xml中配置的ContextLoaderListener。用来在服务器启动时加载applicationContext.xml的。再一个.hbm.xml文件中的dtd,不是直接应用的网络上的内容吧。而是引用的hibernate3.jar中的org.hibernate包中的hibernate-mapping-3.0.dtd的内容吧。
    ---------------------------------------------------------
    另外我在使用SchemaExport 创建数据库表的时候也会出现错误。这个错误和上面的错误同时出现。如果成功就同时成功。
    -----------------------------这是CreateTable类--------------------------------
    public class CreateTable {
    public static void main(String[] args) {
    SchemaExport export=new SchemaExport(new Configuration().configure());
    export.create(true, false);
    }
    }---------------------------------错误信息如下-----------------------------------
    Exception in thread "main" org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/enput/bean/Authority.hbm.xml
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:616)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1635)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1603)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1582)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1556)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1476)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1462)
    at com.enput.util.CreateTable.main(CreateTable.java:9)
    Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from input stream
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:555)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:613)
    ... 7 more
    Caused by: org.dom4j.DocumentException: http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd Nested exception: http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd
    at org.dom4j.io.SAXReader.read(SAXReader.java:484)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:546)
    ... 8 more
      

  5.   

    我试着单步debug了一下。到org.hibetnate.cfg.Configuration类的private void addProperties(Element parent)方法时出的错。-----------------------------下面是他的实现-
    private void addProperties(Element parent) {
                    Iterator iter = parent.elementIterator( "property" );
                    while ( iter.hasNext() ) {
                            Element node = (Element) iter.next();
                            String name = node.attributeValue( "name" );
                            String value = node.getText().trim();
                            log.debug( name + "=" + value );
                            properties.setProperty( name, value );
                            if ( !name.startsWith( "hibernate" ) ) {
                                  properties.setProperty( "hibernate." + name, value );
                            }
                    }
                    Environment.verifyProperties( properties );
            }
    就是到红色的部分就会转到一个IOException
    catch (IOException ioe) {
        log.warn( "Could not close input stream", ioe );
    }
      

  6.   

    选择工程,Clean一下。然后再试试。
    这样情况下仅限于代码一点未改而未能正常启动的情况。
      

  7.   

    都debug到了org.hibetnate.cfg.Configuration还观察什么,去sping里找和sessionFactory相关的Bean,去找里面的配置。
      

  8.   

    昨天又正常了一会儿。今天又不行了。确定代码一点都没改动,有时正常启动。问一下,怎么才能从myeclipse中以debug模式启动tomcat啊。我想debug一下spring的LocalSessionFactoryBean
      

  9.   

    我用spring-test, debug了一下LocalSessionFactoryBean的buildSessionFactory()方法。发现是它的private Resource[] configLocations;这个属性没有被赋值。导致得不到hibernate-configuration-3.0.dtd文件。不知道这是为什么?
      

  10.   

    debug的最终结果,每到一个红色字部分,就单步进入到下一个类中。
    最后得到的InputStream为空(貌似java.lang.ClassLoader类的getResourceAsStream方法的参数没有正确获得,是空)
    -----------------------------------------------------------------------
    com.springframework.orm.hibernate3.LocalSessionFactoryBeanprotected SessionFactory buildSessionFactory() throws Exception {
    .
    .
    .
    if (this.mappingResources != null) {
    // Register given Hibernate mapping definitions, contained in resource files.
    for (String mapping : this.mappingResources) {
    Resource resource = new ClassPathResource(mapping.trim(), this.beanClassLoader);
    config.addInputStream(resource.getInputStream());
    }
    }
    .
    .
    .
    }
    --------------------------------------------------------------------------
    org.springframework.core.io.ClassPathResourcepublic InputStream getInputStream() throws IOException {
    InputStream is;
    if (this.clazz != null) {
    is = this.clazz.getResourceAsStream(this.path);
    }
    else {
    is = this.classLoader.getResourceAsStream(this.path);//这里的path还是有值得,是配置文件中的hbm.xml文件的路径
    }
    if (is == null) {
    throw new FileNotFoundException(
    getDescription() + " cannot be opened because it does not exist");
    }
    return is;
    }----------------------------------------------------------------------------
    java.lang.ClassLoader

    public InputStream getResourceAsStream(String name) {
    URL url = getResource(name);//这里的name没有值
    try {
        return url != null ? url.openStream() : null;
    } catch (IOException e) {
        return null;
    }
    }