我正在阅读XML文件,并且在某个位置,我期望(作为合同的一部分)阅读<offset>nnnn</offset>
(其中nnnn是一个数字)。我已经检查过它是有效的,格式良好的XML。但如果它在那时没有说<format>
那么它就违反合同而我想抛出异常。在这种情况下,什么预先存在的Java异常类是最合适的?
答案 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
抛出,这不是我正在使用的。然而,它似乎确实是一个合适的选择。如果有人认为这不适合使用,请发表评论。