Не удалось прочитать документ схемы 'http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd - PullRequest
4 голосов
/ 29 июня 2011

Я пишу простое приложение 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

my 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>

Создание фабрики менеджера сущностей:

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

Ответы [ 4 ]

8 голосов
/ 29 июня 2011

Итог: добавление этой строки в файл / etc / hosts решает это:

127.0.0.1 java.sun.com

Кажется, что Hibernate распознает этот и другие "стандартные" XSD-ы как нечто, что у него есть, и не имеет проблемработа с его внутренней копией без доступа к Интернету.

Проблемы возникают, когда HTTP GET для XSD не выполняется, но также не завершается с ошибкой: Возвращает что-то еще или реагирует вечно.Hibernate не готов к этим ситуациям.В настоящее время URL-адрес реагирует вечно, и Hibernate не использует быстрый тайм-аут, как это должно быть в ситуациях, подобных сегодняшним.

Системы без доступа к Интернету не затрагиваются.

Так что я как решениеэмулируя отсутствие доступа к Интернету, преобразовав имя хоста java.sun.com в IP-адрес интерфейса обратной связи, гарантируя быстрый сбой.

2 голосов
/ 29 июня 2011

ссылка недоступна, откуда вы взяли ссылку на нее, дважды проверьте ее ... http ref должен работать, но, очевидно, не так, как он не существует.

Быстрый гугл подсказывает, что в матрице есть сбой (серверы оракула) .

1 голос
/ 24 августа 2011

В дополнение к ответу @ Szocske, Hibernate, похоже, хочет получить JPA 2.0 xsd из Интернета, если не распознает эту версию.

Мои старые фляги Hibernate 3.2 пытались подключиться к Интернету, когда я случайно использовал файл persistence.xml, в котором была указана версия 2.0 xsd. Таким образом, если Hibernate ведет себя таким образом, это может указывать на несоответствие версий между вашими XML-файлами и банками Hibernate.

0 голосов
/ 12 ноября 2013

В качестве альтернативы, если вы не хотите связываться с файлами хостов, вы можете изменить schemaLocation на ресурс classpath, например

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee classpath:/com/sun/faces/web-facesconfig_2_0.xsd"

Или даже что-то случайное, как

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com.file.was.not.there.so.changed.so.hibernate.takes.its.own.xsd.from.classpath.or.ignores.the.validation/xml/ns/persistence/orm_2_0.xsd"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...