I have the following code:
try {
//jaw-ws service port operation
port.login();
} catch (Exception e) {
logger.error("Caught Exception in login(): " + e.getMessage());
}
When the above is run with an incorrect hostname, I get:
Caught Exception in login(): HTTP transport error: java.net.UnknownHostException: abc
That is correct and expected. I re-wrote the code to specifically catch UnknownHostException, as follows:
import java.net.UnknownHostException;
try {
//jaw-ws service port operation
port.login();
} catch (UnknownHostException uhe) {
//do something specific to unknown host exception
} catch (Exception e) {
logger.error(Caught Exception in login(): " + e.getMessage());
}
However, when I try to compile this I get:
[javac] foo.java: exception java.net.UnknownHostException is never thrown in body of corresponding try statement
[javac] } catch (UnknownHostException uhe) {
[javac] ^
This is clearly false, since the exception is thrown, as I have caught it before. What am I missing here?
tia,
rouble
It isn’t throwing an
UnknownHostException. It’s just appearing in the message of the exception you actually caught. It’s likely the underlying root cause of the exception you caught.To determine the actual exception, you should print a bit more detail. E.g.
or just using
Throwable#toString()which already includes both exception type and message:or just pass the Exception in as 2nd logger argument, if well configured its stacktrace will be printed:
Update as per your comments: your best bet is to update the catch as follows:
You should absolutely not differentiate based on the message. It’s receipe for portability trouble. The message is namely a sensitive subject for changes which may even be locale dependent!