无法读取架构文档'http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd

jac*_*ack 4 hibernate jpa

我正在为大学编写一个简单的Swing应用程序并使用Hibernate和Oracle XE.

我坚持这个错误:

 29.06.2011 14:54:10 org.hibernate.cfg.annotations.Version <clinit>
 INFO: Hibernate Annotations 3.3.1.GA
 29.06.2011 14:54:10 org.hibernate.cfg.Environment <clinit>
 INFO: Hibernate 3.2.5
 29.06.2011 14:54:10 org.hibernate.cfg.Environment <clinit>
 INFO: hibernate.properties not found
 29.06.2011 14:54:10 org.hibernate.cfg.Environment buildBytecodeProvider
 INFO: Bytecode provider name : cglib
 29.06.2011 14:54:10 org.hibernate.cfg.Environment <clinit>
 INFO: using JDK 1.4 java.sql.Timestamp handling
 29.06.2011 14:54:10 org.hibernate.ejb.Version <clinit>
 INFO: Hibernate EntityManager 3.3.2.GA
 29.06.2011 14:54:31 org.hibernate.ejb.packaging.PersistenceXmlLoader$ErrorLogger warning
 WARNING: Warning parsing XML: XML InputStream(2) schema_reference.4: Failed to read schema document 'http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the      document is not <xsd:schema>.
 29.06.2011 14:54:52 org.hibernate.ejb.packaging.PersistenceXmlLoader$ErrorLogger warning
Run Code Online (Sandbox Code Playgroud)

我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="airportPU">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>my.airport.model.Crew</class>
    <class>my.airport.model.Country</class>
    <class>my.airport.model.City</class>
    <class>my.airport.model.Plane</class>
    <class>my.airport.model.Model</class>
    <class>my.airport.model.Passenger</class>
    <class>my.airport.model.Role</class>
    <class>my.airport.model.Airport</class>
    <class>my.airport.model.Spec</class>
    <class>my.airport.model.AverageFlightTime</class>
    <class>my.airport.model.CrewInTheRoleOnTheFlight</class>
    <class>my.airport.model.Flight</class>
    <class>my.airport.model.PassengersOnTheFlight</class>
    <properties>     
      <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@172.16.0.3:1521:XE"/>
      <property name="javax.persistence.jdbc.password" value="AIRPORT"/>
      <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
      <property name="javax.persistence.jdbc.user" value="AIRPORT"/>
    </properties>
  </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

创建实体管理器工厂:

public static EntityManagerFactory emf;
public static EntityManager em;
static {
try {
    emf = Persistence.createEntityManagerFactory("airportPU");
    em = emf.createEntityManager();
} catch (Exception e) {     
    System.exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)

Szo*_*ske 8

底线:将此行添加到/ etc/hosts文件解决了这个问题:

127.0.0.1 java.sun.com
Run Code Online (Sandbox Code Playgroud)

似乎Hibernate将这个和其他"标准"XSD-s识别为它拥有的东西,并且在没有Internet访问的情况下使用其内部副本没有任何问题.

当XSD的HTTP GET不成功但是也没有失败时出现问题:返回其他内容或永远响应.Hibernate没有为这些情况做好准备.现在,URL需要永远响应,而Hibernate不会像今天那样使用快速超时.

没有Internet访问的系统不受影响.

因此,作为一种解决方案,我通过将java.sun.com主机名解析为环回接口IP地址来模拟缺少Internet访问,从而确保快速失败.