Не удается найти объявление о сохранении элемента - но XML правильно определен - PullRequest
0 голосов
/ 31 августа 2018

Эта проблема возникает при попытке развернуть войну на сервере Tomcat 7:

IllegalArgumentException: неверный XML в единицах персистентности из URL [jar: file: /opt/webapps/foo/WEB-INF/lib/bar.jar! /META-INF/persistence.xml]

SAXParseException; cvc-elt.1: не удается найти объявление элемента «постоянство».

Я прочитал бесчисленное подобных вопросов здесь, но все проблемы были вызваны неправильными пространствами имен, несовпадающими версиями, отсутствующими элементами ... Мой файл persistence.xml, насколько я могу судить, правильный :

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
  <persistence-unit name="my_pu" transaction-type="RESOURCE_LOCAL">
    <class>com.foo.Bar</class>
    <class>com.foo.Baz</class>
  </persistence-unit>
</persistence>

На самом деле, та же самая война прекрасно работает на моем ПК и в нашей среде разработки. Это просто терпит неудачу, когда мы продвигаем это в нашу среду тестирования. Я полагаю, что это может быть связано с тем, что xmlns.jcp.org недоступен с этого сервера, по крайней мере, я не получаю никакого ответа при попытке свернуть URL-адрес XSD, это просто тайм-аут. Кроме того, Tomcat требуется около 1 минуты, чтобы отобразить сообщение об ошибке, что также дает представление о том, что он пытается загрузить удаленный XSD и получает тайм-аут.

Последние 5 часов я пытался заставить его взять локальный XSD-файл, но пока мне это не удалось. Я пытался разместить файл ...

  • Прямо в WEB-INF /.
  • Внутри банки, в которой находится файл persistence.xml, в той же папке (META-INF /).
  • Внутри банки, в папке WEB-INF /.

А в файле persistence.xml:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             version="2.1">

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence persistence.xsd"
             version="2.1">

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence ./persistence.xsd"
             version="2.1">

<persistence>

<persistence version="2.1">

Единственное, чего я добился - это избежал 1-минутного ожидания, если я удалю schemaLocation. Но проблема сохраняется. (без каламбура ...)

Файл persistence.xml загружается из applicationContext.xml на случай, если что-то изменится:

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
      id="entityManagerFactory">
  <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml" />
  ...
</bean>

Что еще можно попробовать?

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