使用消息处理程序
准备时间和执行时间处理错误及其他消息的缺省行为,是将消息打印至 System.err 并且对于不可恢复的错误,也会抛出 XProcessException。 如果准备时间出错,那么在生成 XProcessException 之前,处理器将尝试继续准备并发送信号来通知所有错误;但不生成任何可执行文件。在运行时,会在第一次出现错误情境时停止执行。
过程
通过将 XMessageHandler 的实现注册至 XStaticContext(适用于准备时间错误和其他消息)或 XDynamicContext(适用于执行时间错误和其他消息)来更改对错误的处理。
XMessageHandler 接口由具有以下参数的单个报告方法组成:
- XMessageHandler 接口中定义下列其中一个枚举符:
- 指示错误只是参考信息,不会影响结果
当终止属性评估为“no”时,还会将其用于 XSLT 消息指示信息。
- 指示警告
处理器从警告情况进行恢复,但结果可能不是预期结果。
- 指示可恢复错误
由于发信号通知其他结果,处理器可能会从此错误进行恢复,但不生成任何结果。
- 指示不可恢复错误
处理器不能从此错误进行恢复。当终止属性评估为“yes”时,还会将其用于 XSLT 消息指示信息。
- 指示该消息由对 XPath fn:trace 函数的调用生成
- 指示错误只是参考信息,不会影响结果
- 错误消息
- 作为 XSourceLocation 的源位置(如果可用)
通常,源位置不适用于执行时间错误。
- 导致该错误的原始异常(如果可用)
例如,如果输入文档无效,那么 XML 解析器会生成一个异常,该异常将通过此参数传递给报告方法。
- 对 XPath fn:error 函数的错误对象参数指定的项目
XMessageHandler 的实现可以根据需要显示错误和其他消息,例如写入日志文件,而不是将消息发送至 System.err。通过生成异常而发生任何错误之后(包括可恢复错误),可能会更加严格并停止编译或执行。因为报告方法没有抛出子句,所以必须取消选中异常。实现可能也会选择忽略参考消息和警告消息。简而言之,注册 XMessageHandler 可允许应用程序配置消息处理以适合其目的。
请注意,在发生不可恢复错误的情况下,如果已注册的消息处理程序不生成异常,那么处理器将抛出 XProcessException。