Why my exception class needs to be serialized?

JavaExceptionSerializationDeserializationSerialversionuid

Java Problem Overview


When you extend a class with class Exception ( for creating new exception) you get a warning to have a serialVersionUID. I know that serialVersionUID plays an important role while serialization and deserialization, but when my Exception needs to be serialized? Can anyone give me a practical case in which I want my custom-exception class to have serialization and deserialization?

Java Solutions


Solution 1 - Java

This is because the root class for all exceptions, Throwable implements the Serializable interface. All exceptions by default are serializable and that's a language design decision because the authors wanted exceptions to be capable of being sent across the wire without any special configuration.

If the base class is not serializable, you would have a difficult time conveying what exactly went wrong in case a remote method failed since you would have no control over the built in exception types.

Solution 2 - Java

If your custom exception is ever used in a distributed application (using RMI, Spring http-invoker, whatever) and can be thrown from a server method that is invoked from a remote client, then the exception will have to be serialized to cross the wire and go to the client.

Solution 3 - Java

Your only options are to either define serialVersionUID for every Exception type you define (the IDE can generate it for you) or suppress the warning.

You may find my earlier question explicit serialVersionUID considered harmful? relevant.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionamodView Question on Stackoverflow
Solution 1 - JavaSanjay T. SharmaView Answer on Stackoverflow
Solution 2 - JavaJB NizetView Answer on Stackoverflow
Solution 3 - JavaMiserable VariableView Answer on Stackoverflow