Без подключения к Интернету, как файл конфигурации Hibernate проверяется на DTD - PullRequest
0 голосов
/ 07 мая 2018

Для проверки XML нам нужен либо dtd, либо xsd. Если мы хотим проверить xml на соответствие dtd, мы должны написать это в Hibernate.

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

Здесь PUBLIC указывает, что файл hibernate-configuration-3.0.dtd доступен в сети. Когда мы запускаем программу Hibernate, Hibernate должен перейти по этому адресу http://hibernate.org/dtd/hibernate-configuration-3.0.dtd и проверить файл hibernate-configuration.dtd.

Но мой вопрос без подключения к Интернету, как Hibernate может проверить файл конфигурации ??

Я знаю, что hibernate-configuration-3.0.dtd файл также доступен в hibernate jar. Но если он доступен в нашей файловой системе, тогда нам нужно добавить вместо SYSTEM значение SYSTEM и указать полный абсолютный путь к нашей файловой системе, в котором доступен файл hibernate-configuration-3.0.dtd .

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Вам не нужно подключение к интернету, если указанный вами URL-адрес соответствует ожидаемому Hibernate.

Hibernate использует EntityResolver для загрузки dtd из фляги Hibernate, если URL совпадает.

например. в Hibernate 3.5 класс org.hibernate.util.DTDEntityResolver :

... пытается разрешить различные системные URL-адреса в локальных поисках путей к классам

  1. Любой URL-адрес systemId, начинающийся с http://hibernate.sourceforge.net/, ищется как ресурс пути к классам в загрузчике классов, который загружал классы Hibernate.

  2. Любой URL-адрес systemId, использующий classpath в качестве схемы (то есть, начиная с classpath: //, ищется как ресурс classpath, используя сначала загрузчик классов текущего контекста потока, а затем загрузчик классов, который загрузил классы Hibernate.

Любые ссылки на сущности, которые не могут быть разрешены в связи с вышеуказанными правилами, приводят к возвращению нулевого значения, что должно заставить считыватель SAX обрабатывать ссылку на сущность в манере по умолчанию.

В Hibernate 3.6 префикс URL был изменен на http://www.hibernate.org/dtd/, как показано в обновленном DTDEntityResolver

В вашем случае, если вы используете банку Hibernate до 3.6, ваша спецификация будет использовать внешний DTD. Вы можете обновить Hibernate или использовать правильный URL для вашей версии Hibernate.

Если вы хотите быть уверенным, что используете DTD в банке Hibernate, вы можете использовать:

<!DOCTYPE hibernate-configuration SYSTEM  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
0 голосов
/ 31 мая 2018

Я тоже столкнулся с той же проблемой. Я попробовал что-то лучше, написав приведенное ниже заявление xml

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

для сопоставления файлов

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "hibernate-mapping-3.0.dtd">

и поместите эти два файла hibernate-configuration-3.0.dtd и hibernate-mapping-3.0.dtd в каталог bin сервера tomcat. (Я использую сервер Apache Tomcat). Сервер ищет эти файлы dtd в своем текущем каталоге (каталог bin). Таким образом, это решило мою проблему при запуске моего приложения в автономном режиме. Если есть какой-то лучший способ, это всегда приветствуется. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...