我在 Java 中使用 Xerces2 并且有一个 XMLGrammarCachingConfiguration。我正在使用它通过调用 parseGrammar 将 XML Schema (xsd) 解析为语法池。它可以很好地解析 xsd 文件,但它会向 stderr 报告所有错误和警告(我使用的是 Eclipse,所以这会在控制台中捕获)。我设法更改了我的 xsd,使其出现致命错误,这引发了我的应用程序可以捕获的 XNIException,正如预期的那样。
我尝试使用 XMLGrammarCachingConfiguration.setErrorHandler() 方法,并将我用自己的 PrintWriter 构造的 DefaultErrorHandler 传递给它。我还尝试传入我自己的实现 XMLErrorHandler 接口的自定义错误处理程序。它仍然出现在控制台中,而不是我的 PrintWriter 正在使用的文件中。
这似乎应该如此简单。有人可以告诉我我做错了什么吗?
--edit:我应该补充一点,我正在使用自定义 XMLEntityResolver,我想要捕获的错误消息是当我的解析器无法解析实体时,因此从它的 resolveEntity() 方法返回 null,这意味着默认实体解析器正在尝试解析它。即错误消息来自底层默认实体解析器。