知道为什么会发生这种错误以及如何修复它?我在尝试解析/加载配置文件时遇到此错误:
错误
Warning: validation was turned on but an org.xml.sax.ErrorHandler was not
set, which is probably not what is desired. Parser will use a default
ErrorHandler to print the first 10 errors. Please call
the 'setErrorHandler' method to fix this.
Error: URI=null Line=3: Document root element "persistence", must match DOCTYPE root "null".
Error: URI=null Line=3: Document is invalid: no grammar found.
null
[]
null
主要代码
public static void main(String[] args) throws ConfigurationException {
config = new XMLPropertiesConfiguration(new File("META-INF/vamola.xml"));
System.out.println(config.getString("persitence-unit.provider"));
System.out.println(config.getList("persistence-unit.properties.name"));
}
XML文件
<?xml version="1.0"?>
<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-unit name="dbBank" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<class>br.ufg.inf.server.Account</class>
<class>br.ufg.inf.server.UserBank</class>
<properties>
<property name="toplink.jdbc.user" value="derby" />
<property name="toplink.jdbc.password" value="senha" />
<property name="toplink.jdbc.url" value="jdbc:derby://192.168.80.125:1527/db/master/dbBank;create=true"/>
<property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver" />
<property name="toplink.ddl-generation" value="create-tables" />
<property name="toplink.logging.level" value="OFF" />
<property name="toplink.target-database" value="Derby" />
</properties>
</persistence-unit>
</persistence>
答案 0 :(得分:4)
如果解析了启用了验证的XML文档,则需要在XML文档开头的DOCTYPE中指定DTD或XML架构。您的解析器基本上抱怨它不知道如何验证您的文档,因为没有指定语法来验证标记。
您已经拥有XML架构,因此您可能需要:
<!DOCTYPE schema PUBLIC "http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
如果要关闭验证,则需要以下内容:
spf.setValidating(false);
(其中spf是SaxParserFactory)
答案 1 :(得分:4)
例外情况表明未设置ErrorHandler
。这意味着解析器使用其内置的错误处理程序,它只是将消息写入控制台。如果您确实要验证,则需要创建ErrorHandler实施并将其附加到DocumentBuilder
。
有关更多信息,请阅读:http://www.kdgregory.com/index.php?page=xml.parsing(错误处理程序大约是传输方式的1/3)。
或者,正如其他回复建议的那样,您可以关闭验证。
答案 2 :(得分:0)
XML文档定义了默认命名空间http://java.sun.com/xml/ns/persistence
并包含一个url,其中可以找到模式(xsi:schemaLocation
属性,第一个值是命名空间,第二个是url或路径)。
请仔细检查解析时是否可以访问此网址。另一种方法是下载模式,将其放在文件系统上并修改xsi:schemaLocation
值。