0

我正在尝试创建一个 JSF2 应用程序,它使用 Spring3 进行 DI 和休眠来处理持久性。

我有以下错误,不知道如何继续:

26/10/2012 1:57:04 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: 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: Unable to read XML
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    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.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
    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: Unable to read XML
    at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:109)
    at org.hibernate.cfg.Configuration.add(Configuration.java:478)
    at org.hibernate.cfg.Configuration.add(Configuration.java:474)
    at org.hibernate.cfg.Configuration.add(Configuration.java:647)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:685)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:272)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 36 more
Caused by: org.dom4j.DocumentException: Connection refused: connect Nested exception: Connection refused: connect
    at org.dom4j.io.SAXReader.read(SAXReader.java:484)
    at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:78)
    ... 43 more

applicationContext.xml在下面列出:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                        http://www.springframework.org/schema/tx
                        http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:component-scan base-package="com.myapp.techrro" />
    <context:annotation-config />

    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
        <property name="scopes">
            <map>
                <entry key="view">
                    <bean class="com.myapp.util.ViewScope" />
                </entry>
            </map>
        </property>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver">
        </property>
        <property name="url" value="jdbc:jtds:sqlserver://localhost:1433/myapp">
        </property>
        <property name="username" value="mydb"></property>
        <property name="password" value="somepass"></property>
    </bean>

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.c3p0.min_size">5</prop>
                <prop key="hibernate.c3p0.max_size">20</prop>
                <prop key="hibernate.c3p0.idle_test_period">300</prop>
                <prop key="hibernate.c3p0.timeout">1800</prop>
                <prop key="hibernate.c3p0.max_statements">50</prop>
                <prop key="cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
                <prop key="c3p0.acquire_increment">1</prop>
            </props>
        </property>
        <property name="mappingResources">
            <list>
                <value>com/myapp/techrro/hibernate/UserOrderHist.hbm.xml
                </value>
                <value>com/myapp/techrro/hibernate/UserAccessHist.hbm.xml
                </value>
                <value>com/myapp/techrro/hibernate/User.hbm.xml</value>
            </list>
        </property>
    </bean>

    <bean id="userOrderHistDAO" class="com.myapp.techrro.hibernate.userOrderHistDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>

    <bean id="userAccessHistDAO" class="com.myapp.techrro.hibernate.userAccessHistDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>

    <bean id="userDAO" class="com.myapp.techrro.hibernate.userDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>

</beans>

更新:

下面是我的映射文件,它们是由 myEclipse 生成的:

User.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd ">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.myapp.techrro.hibernate.User" table="User" schema="dbo" catalog="mydb">
        <id name="user_PK" type="java.lang.Long">
            <column name="user_PK" />
            <generator class="identity" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="username" length="20" not-null="true" unique="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="40" not-null="true" />
        </property>
        <property name="userRole" type="java.lang.String">
            <column name="userRole" length="1" not-null="true" />
        </property>
        <property name="active" type="java.lang.String">
            <column name="active" length="1" />
        </property>
        <property name="type" type="java.lang.String">
            <column name="type" length="3" not-null="true" />
        </property>
        <property name="firstName" type="java.lang.String">
            <column name="firstName" length="30" />
        </property>
        <property name="lastName" type="java.lang.String">
            <column name="lastName" length="30" />
        </property>
        <set name="userOrderHistLog" inverse="true">
            <key>
                <column name="user_PK" />
            </key>
            <one-to-many class="com.myapp.techrro.hibernate.userOrderHist" />
        </set>
        <set name="userAccessHistLog" inverse="true">
            <key>
                <column name="user_PK" not-null="true" />
            </key>
            <one-to-many class="com.myapp.techrro.hibernate.userAccessHist" />
        </set>
    </class>
</hibernate-mapping>

UserOrderHist.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd ">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.myapp.techrro.hibernate.userOrderHist" table="userOrderHist" schema="dbo" catalog="mydb">
        <id name="userOrderHis_PK" type="java.lang.Long">
            <column name="userOrderHis_PK" />
            <generator class="identity" />
        </id>
        <many-to-one name="user" class="com.myapp.techrro.hibernate.User" fetch="select">
            <column name="user_PK" />
        </many-to-one>
        <property name="action" type="java.lang.String">
            <column name="action" length="1" not-null="true" />
        </property>
        <property name="prod" type="java.lang.String">
            <column name="username" length="20" not-null="true" />
        </property>
        <property name="type" type="java.lang.String">
            <column name="userRole" length="1" />
        </property>
        <property name="Updated" type="java.lang.String">
            <column name="deleteFG" length="1" />
        </property>
    </class>
</hibernate-mapping>

UserAccessHist.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd ">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.myapp.techrro.hibernate.userAccessHist" table="userAccessHist" schema="dbo" catalog="mydb">
        <id name="userAccessHistPK" type="java.lang.Long">
            <column name="userAccessHistPK" />
            <generator class="identity" />
        </id>
        <many-to-one name="user_PK" class="com.myapp.techrro.hibernate.User" fetch="select">
            <column name="adminUserPK" not-null="true" />
        </many-to-one>
        <property name="createdDate" type="java.sql.Timestamp">
            <column name="createdDate" length="23" not-null="true" />
        </property>
        <property name="accessDetail" type="java.lang.String">
            <column name="accessDetail" length="100" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

有人可以请这种错误的可能原因吗?谢谢

4

1 回答 1

1

根据您的堆栈跟踪 ( org.hibernate.InvalidMappingException: Unable to read XML),问题很可能出在您的休眠映射 XML 文件之一中。

更新:现在您已经发布了休眠文件,看起来您在 DTD 的末尾有一个额外的空间。删除尾随空格应该可以解决问题。

于 2012-10-26T03:05:13.227 回答