如何在 Java 中有效使用 SAXParseException

2024-04-16

我正在 Java 中针对 XML 架构进行验证,并且当我有无效的内容模型时抛出 SAXParseException。

我将使用这些异常来突出显示验证失败的位置 - 但 SAXParseExceptions 似乎有点太低级了。

例如,对于枚举失败,我得到了有效性错误,即所提供的值与一个异常中的内容模型不匹配,以及它在下一个异常中应用的元素。

我想我需要一个实用程序来抽象一些将相关错误合并在一起并将异常文本解析为可用的异常属性。

这是一个合理的方法,还是我只是错过了一些东西,或者可能是一个库或辅助类?


更新@timgilbert,感谢您的回复。

例如,我在互联网上找到的 SAXParseException

cvc-pattern-valid: Value 'en' is not facet-valid
with respect to pattern '([a-zA-Z]{1,8})(-[a-zA-Z0-9]{1,8})*'

对我来说最重要的是

  • 此例外适用的元素“en”。为什么我不能调用 exception.getElement() 或其他东西,为什么不能提供相关元素的 XPath?对于内存中的文档来说,比行号和列号更有用!
  • 这是模式验证失败。为什么我无法获得可能的故障类型的枚举以及对相应故障类型的引用之类的信息?
  • 验证失败的实际模式。
  • 接下来会抛出另一个异常,告诉我导致我需要合并的问题的“en”元素的值

我希望能够做的一个例子是让人们提交一份文档,并在验证失败时突出显示该文档,并显示用户友好的消息 - 上面的错误消息似乎不太友好......必须解析用单引号感觉就像等待发生的事故:)

我想我可能在“引用元素”方面做错了,也许我应该默认对文档进行身份转换作为验证的一部分,并使用我的验证错误属性来增强转换可以用CSS挑出来。如果我需要解析消息以使它们更加友好,那仍然无济于事......

回复:紧密绑定,javax.xml.validation.Validator.validate() 无论如何都会抛出 org.xml.sax.SAXException - 不知道如何摆脱假设绑定......

Cheers


我不完全清楚你在这里问的是什么,也许你可以提供更多关于异常太低级别的含义的细节?是不是错误信息本身就难以理解?

SaxParseException 类确实具有 getColumnNumber() 和 getLineNumber() 方法,您可以将它们提供给用户以让他们修复错误。

您可能会尝试的一件事是使用不同的 XML 解析实现 - 每个解析器在发现无效代码时都会抛出错误,但不同的实现可能有不同的错误消息和异常链。

实际上,出于这个原因,我对尝试构建一个检查异常链并尝试从中构建更连贯的错误消息的库持怀疑态度,因为您会将代码与异常的具体细节紧密耦合。 XML 解析实现(特别是如果您依赖于错误消息的特定措辞)。

(抱歉,这不是更具体,也许你可以举一个你所看到的问题的例子?)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java 中有效使用 SAXParseException 的相关文章

随机推荐