【问题标题】:how can I capture the stderr output when I call XMLGrammarCachingConfiguration.parseGrammar()?当我调用 XMLGrammarCachingConfiguration.parseGrammar() 时,如何捕获标准错误输出?
【发布时间】:2012-06-14 23:57:35
【问题描述】:

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

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

这似乎应该如此简单。谁能告诉我我做错了什么?

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

【问题讨论】:

    标签: java xerces


    【解决方案1】:

    好的,我设法解决了这个问题。我需要做的是创建自己的 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);
    

    就这么简单。

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 2013-05-11
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多