In have written a function which expects the caller to pass in a configuration file like XML. Then I parse this given file and extract something which i then return.

In this function (at least) two "bad" things can happen:

  1. The given file does not exist or is not accessible in any way
  2. While parsing/validating the file some unexpected content is found

The first thing is clearly an IllegalArgumentException. I am however not sure what kind of exception the second case would be. Is that also an IllegalArgumentException because i expect (by documentation-contract) that the input is in a valid form? Or is it rather an IllegalStateException as the given parameter is formal correct but only after parsing I can't do any further steps as it would result in unwanted behaviour?

Or is it even something else?

  • 1
    I think you're splitting hairs here...
    – Ampt
    Commented Jun 27, 2014 at 13:30
  • if you prefer JDK style design, consider that SAXParser.parse and DocumentBuilder.parse throw custom exceptions inherited directly from Exception not from ISE
    – gnat
    Commented Jun 27, 2014 at 13:32
  • Technically problems derived from information gathered from a parameter, even indirectly, is considered to be an IllegalArgumentException, so long as the nature of gathering this information is entirely unexpected. For example, file not found is certainly something which is not expected, however attempting a connection to a database could go wrong, and thus shouldn't fall under IllegalArgumentException imho.
    – Neil
    Commented Jun 27, 2014 at 13:46
  • Perhaps you would consider a custom exception for your application, some kind of InvalidContentException? Commented Jun 27, 2014 at 15:08
  • IllegalStateException could be more meaningful if you have had a boolean variable enableParsing to false, and then invoked the method to parse a file. This is an illegal state.
    – bbalchev
    Commented Jun 27, 2014 at 16:07

2 Answers 2


Neither. As others have pointed out, it is clearly not an IllegalStateException.

And better than IllegalArgument would be FileNotFoundException or ParseException, (or maybe XMLParseException) which exactly match your description of "bad things" 1 and 2.


The Javadocs of IllegalStateException say

Signals that a method has been invoked at an illegal or inappropriate time

I would argue, that it does not matter when your method is called or in what state the JVM or your context is - the parsing error will remain as long as the file is not correct. So it seems to me, that an IllegalArgumentException is more appropriate.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.