Java 遇到意外文本时要抛出什么异常?

Java 遇到意外文本时要抛出什么异常?,java,exception,Java,Exception,我正在读取一个XML文件,在某个位置我希望(作为合同的一部分)读取nnnn(其中nnnn是一个数字)。我已经检查过它是否是有效的、格式良好的XML。但是如果它在那一点上没有说,那么它就是在违反合同,我想抛出一个例外。在这种情况下,哪个预先存在的Java异常类最适合抛出?我建议对代码进行结构化,以便将XML文件/XML内容(取决于最有意义的内容)作为参数传递给方法,如果XML文件没有必需的元素,则抛出IllegalArgumentException 如果XML在应用程序中更为内部,并且/或者它比I

我正在读取一个XML文件,在某个位置我希望(作为合同的一部分)读取
nnnn
(其中nnnn是一个数字)。我已经检查过它是否是有效的、格式良好的XML。但是如果它在那一点上没有说
,那么它就是在违反合同,我想抛出一个例外。在这种情况下,哪个预先存在的Java异常类最适合抛出?

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


如果XML在应用程序中更为内部,并且/或者它比
IllegalArgumentException
更适合,那么也可以使用
InvalidStateException

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

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

2) 如果在后台使用SAX,可以抛出
org.xml.SAX.SAXParseException

这就是XSD验证失败()时实际抛出的内容

其javadoc声明:

封装XML分析错误或警告

因此,客户可以得到如下信息:

org.xml.sax.SAXParseException:的值“xxx” 元素“偏移量”无效。预计会有一个数字


请注意,
IllegalArgumentException
是一种可能性,但我发现它有点过于宽泛

感谢迄今为止给出的答案。我刚刚想到了自己的答案:
输入不匹配异常
。优点:其名称准确描述了问题所在。缺点:它的Javadoc说它是由
扫描器抛出的,这不是我正在使用的。然而,这似乎是一个适当的选择。如果有人认为这不是一个合适的异常类,请发表评论。

IllegalArgumentException。
我想的是
IllegalArgumentException
,但我并不是真的将参数传递给方法,所以“非法参数”将是一个误称@ShanuGuptaI不会将其归类为合适的——它专门供
扫描仪使用。如果你真的想扩大搜索范围,你可以使用
NoSuchElementException
,但老实说,我还是建议你使用一个“简单”的内置异常,并在异常文本中添加你认为可能需要的任何额外澄清。