0

我在 Java 中使用 Xerces2 并且有一个 XMLGrammarCachingConfiguration。我正在使用它通过调用 parseGrammar 将 XML Schema (xsd) 解析为语法池。它可以很好地解析 xsd 文件,但它会向 stderr 报告所有错误和警告(我使用的是 Eclipse,所以这会在控制台中捕获)。我设法更改了我的 xsd,使其出现致命错误,这引发了我的应用程序可以捕获的 XNIException,正如预期的那样。

我尝试使用 XMLGrammarCachingConfiguration.setErrorHandler() 方法,并将我用自己的 PrintWriter 构造的 DefaultErrorHandler 传递给它。我还尝试传入我自己的实现 XMLErrorHandler 接口的自定义错误处理程序。它仍然出现在控制台中,而不是我的 PrintWriter 正在使用的文件中。

这似乎应该如此简单。有人可以告诉我我做错了什么吗?

--edit:我应该补充一点,我正在使用自定义 XMLEntityResolver,我想要捕获的错误消息是当我的解析器无法解析实体时,因此从它的 resolveEntity() 方法返回 null,这意味着默认实体解析器正在尝试解析它。即错误消息来自底层默认实体解析器。

4

1 回答 1

0

好的,我设法解决了这个问题。我需要做的是创建自己的 XMLErrorHandler,然后解决如何注册它的窍门。

它需要在 XMLGrammarCachingConfiguration 的 XMLErrorReporter 中注册,但是要访问它,您需要调用

XMLGrammarCachingConfiguration.getProperty("http://apache.org/xml/properties/internal/error-reporter") 

然后将返回的对象转换为 XMLErrorReporter 并调用

XMLErrorReporter.setProperty("http://apache.org/xml/properties/internal/error-handler", customHandler);

就这么简单。

于 2012-06-18T23:42:54.820 回答