Update the code to provide a convenience method for generating more
user-friendly error messages from exceptions. For exceptions generated within
the project, we'll just use the user-provided message and also display the
unique message ID. For null pointer exceptions, we'll display the fact that it
was a null pointer exception and the source file and line number on which it
occurred. For invocation target exceptions, we'll handle the wrapped
exception. For all other types of exceptions, we'll display the name of the
exception class and the message, or if there is no message the source file and
line number.