找不到元素持久性的声明-但是XML已正确定义

时间:2018-08-31 06:44:19

标签: java xsd persistence.xml

当我尝试将战争部署到Tomcat 7服务器时遇到此问题:

  

IllegalArgumentException:来自URL [jar:file:/opt/webapps/foo/WEB-INF/lib/bar.jar!/META-INF/persistence.xml]的持久性单元中的XML无效

     

SAXParseException; cvc-elt.1:找不到元素“ persistence”的声明。

我在这里阅读了无数类似的问题,但是所有问题都是由错误的名称空间,版本不匹配,元素丢失...引起的,我的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>

实际上,同样的战争在我的PC和我们的开发环境上也能正常工作。当我们将其推广到我们的测试环境时,它只是失败了。我相信这可能是由于xmlns.jcp.org无法从该服务器访问,至少当我尝试卷曲XSD URL时,我没有得到任何回复,只是超时。另外,Tomcat大约需要1分钟才能显示错误消息,这也表明它正在尝试加载远程XSD并超时。

我花了最后5个小时来尝试改用本地XSD文件,但到目前为止,我还没有成功。我试过放置文件...

  • 直接在WEB-INF /中。
  • 在包含persistence.xml的jar的同一文件夹(META-INF /)中。
  • 在jar内,在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">

如果删除schemaLocation,我唯一要做的就是避免等待1分钟。但是问题仍然存在。 (无双关语...)

如果有任何不同,则从applicationContext.xml加载persistence.xml文件:

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

我还能尝试什么?

0 个答案:

没有答案