这实际上与Hibernate尝试在本地加载persistence.xml
时有关。
Here is the stacktrace and error
ERROR javax.persistence.PersistenceException: Invalid persistence.xml.
Error parsing XML (line-1 : column -1): cvc-elt.1.a: Cannot find the declaration of element 'HTML'.
at org.hibernate.ejb.packaging.PersistenceXmlLoader.loadURL(PersistenceXmlLoader.java:145)
at org.hibernate.ejb.packaging.PersistenceXmlLoader.deploy(PersistenceXmlLoader.java:169)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:317)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
实际上,持久性xml很简单(我从较大的XML中最小化了它,因为它没有区别)
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
</persistence>
问题是documentbuilder中的这一行
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
docBuilder.setEntityResolver(resolver);
doc = docBuilder.parse(source);
>The doc after parsed has HTML tags in it which it should not because its just a xml. I traveresed the nodes in the doc and got below elements
Found element HTML
Found element HEAD
Found element BODY
Found element PERSISTENCE
这就是XSD架构验证失败的原因,因为它不希望使用html元素。
任何人都知道为什么以及如何克服这个问题。
答案 0 :(得分:0)
发现了问题。我在类路径中有nekohtml-1.9.22.jar。它是一个解析器,也是一个标签平衡器。它被视为默认解析器,并且由于它在xml中找不到HTML标记,因此添加了它。奇怪的是,它不应该是XML的默认值。无论如何,将其从类路径中删除即可解决此问题。