遇到意外文本会抛出什么例外?

时间:2018-05-01 10:20:47

标签: java exception

我正在阅读XML文件,并且在某个位置,我期望(作为合同的一部分)阅读<offset>nnnn</offset>(其中nnnn是一个数字)。我已经检查过它是有效的,格式良好的XML。但如果它在那时没有说<format>那么它就违反合同而我想抛出异常。在这种情况下,什么预先存在的Java异常类是最合适的?

3 个答案:

答案 0 :(得分:1)

我建议构造代码,以便将XML文件/ XML内容(取决于最有意义的内容)作为参数传递给方法,如果XML文件没有,则抛出IllegalArgumentException。有必要的元素。

如果XML更适合应用程序内部和/或它更适合InvalidStateException,则可能还会使用IllegalArgumentException

答案 1 :(得分:1)

  

我已经检查过它是有效的,格式良好的XML。

1)XML对于定义<offset>元素必须包含数字的XSD无效。

2)如果你在引擎盖下使用SAX,你可以抛出org.xml.sax.SAXParseException 这是因为XSD验证失败(javax.xml.validation.Validator.validate())而实际抛出的内容。

其javadoc声明:

  

封装XML解析错误或警告。

所以客户可以得到类似的东西:

  

org.xml.sax.SAXParseException:值'xxx'   元素'offset'无效。预计会有一个数字

请注意,IllegalArgumentException是可能的,但我发现它有点过于宽泛。

答案 2 :(得分:0)

感谢到目前为止给出的答案。我刚刚想到了自己的答案:InputMismatchException。优点:它的名称准确描述了问题所在。缺点:它的Javadoc说它被Scanner抛出,这不是我正在使用的。然而,它似乎确实是一个合适的选择。如果有人认为这不适合使用,请发表评论。