This is a violation of the second requirement listed above and is easy to spot. A class may claim to implement Serializable , and yet not follow through on the contract. In some cases we can detect automatically when this has occurred. The class itself is not declared public . The class fails to load for some reason.
Classes sometimes throw exceptions as they're being loaded.
Often, this is because other classes upon which they depend aren't available from the ClassLoader object used to load the class. The class is abstract. Abstract classes cannot be instantiated, by definition, and so we won't consider abstract classes as candidates to be beans. The class implements Serializable , yet it or one of its base classes contains nonserializable fields. The default Java serialization mechanism design allows a class to be defined as implements Serializable , but permits it to fail when serialization is actually attempted.