Hibernate: Could not parse configuration: hibernat

2019-09-11 07:03发布

问题:

I am getting the following error when trying to use Hibernate withing my application:

org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml

What is causing this? Please see hibernate.cfg.xml , output and Runner class below?

Note: I have looked at this answer and tried to fix it using suggestions, but with no luck.

hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

    <hibernate-configuration>
        <session-factory>

            <!-- Database connection settings -->
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost:3306/test-db</property>
            <property name="connection.username">user</property>
            <property name="connection.password">password</property>

            <!-- SQL dialect -->
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

            <!-- Echo all executed SQL to stdout -->
            <property name="show_sql">true</property>

            <!-- Use XML-based mapping metadata --> 
            <!-- <mapping resource="domain/Message.hbm.xml"/> -->

            <!-- Use Annotation-based mapping metadata -->
            <mapping class="entity.Message"/>            

        </session-factory>
    </hibernate-configuration>

Output:

Successfully started process 'command 'C:\Program Files\Java\jdk1.8.0_65\bin\java.exe''
Dec 16, 2015 12:01:20 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
Dec 16, 2015 12:01:20 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.5.Final}
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: hibernate.cfg.xml
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: hibernate.cfg.xml
Initial SessionFactory creation failed.org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
Exception in thread "main" java.lang.ExceptionInInitializerError
    at util.HibernateUtil.buildSessionFactory(HibernateUtil.java:25)
    at util.HibernateUtil.<clinit>(HibernateUtil.java:12)
    at client.HelloWorldClient.main(HelloWorldClient.java:13)
Caused by: org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2163)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2075)
    at util.HibernateUtil.buildSessionFactory(HibernateUtil.java:18)
    ... 2 more
Caused by: org.dom4j.DocumentException: Error on line 2 of document  : The processing instruction target matching "[xX][mM][lL]" is not allowed. Nested exception: The processing instruction target matching "[xX][mM][lL]" is not allowed.
    at org.dom4j.io.SAXReader.read(SAXReader.java:482)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2155)
    ... 4 more
:run FAILED
:run (Thread[Daemon worker Thread 15,5,main]) completed. Took 0.617 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':run'.
> Process 'command 'C:\Program Files\Java\jdk1.8.0_65\bin\java.exe'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.

BUILD FAILED

Runner Class:

package client;

import org.hibernate.Session;

import util.HibernateUtil;
import entity.Message;


public class HelloWorldClient {
    public static void main(String[] args) {

                Session session = HibernateUtil.getSessionFactory().openSession();
                session.beginTransaction();

                Message message = new Message( "Hello World with Hibernate & JPA Annotations" ); 

                session.save(message);

                session.getTransaction().commit();
                session.close();

    }
}

Edit: Error seen when hovering over session-factory tag :

回答1:

Could you please try with the below configuration details and make sure you have placed the hibernate.cfg.xml file under the SRC directory. If you have to placed cfg file other than SRC, you have to specify the path in Configuration() at the time of creating SessionFactory.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property>
        <property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/hibernatex </property>
        <property name="hibernate.connection.username"> root </property>
        <property name="hibernate.connection.password"> root </property>
        <property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </property>
        <mapping resource="com/ora/hibernate/examples/Employee.hbm.xml"
          package="com.ora.hibernate.examples" />
     </session-factory>
</hibernate-configuration>


回答2:

This is because your internet is blocking to get data from that DTD. Just dowbload all DTD which is mention in xml file and in all xml file give location like this.. This works for me

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "C:\Downloads\hibernate-mapping-3.0.dtd"> <hibernate-configuration>


回答3:

In order to be parsed as xml, your hibernate.cfg.xml should start with:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

Check following things in hibernate.cfg.xml:

  1. check if there are some blank space or other content before the <?xml ?>
  2. check if there is another <?xml ?> definition in hibernate.cfg.xml
  3. check if there is a Byte Order Mark (BOM) before the <?xml ?> (http://www.w3.org/International/questions/qa-byte-order-mark#remove)


回答4:

I was facing the same problem, so i just downloaded that file mentioned in the configuration file and placed it to the path at '/home/ist/Downloads/hibernate-configuration-3.0.dtd' and gave that path to the configuration file and it worked. Hope its helpful for you too.

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "/home/ist/Downloads/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- JDBC Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/HibernateDB</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        <!-- JDBC connection pool settings ... using built-in test pool -->
        <property name="connection.pool_size">10</property>

        <!-- Select our SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Echo the SQL to stdout -->
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>


        <property name="hbm2ddl.auto">create
        </property>

        <mapping resource="resource/actor.hbm.xml"/>



    </session-factory>

</hibernate-configuration>


回答5:

Something wrong in the second line of the config file. Try changing the location of the DTD file as follows.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

More Info

Hope this helps.



回答6:

I was able to solve what the issue was. The issue was that my hibernate.cfg.xml file was not under the "resources" directory within my project.

This solved all the issues I was having, and I did not need to alter the code within the file.



回答7:

Many Times it Happens because of Internet not Connected on your System.To Work on Hibernate Internet Is Compulsary.