This is due to the new non-public class javax.management.ToQueryString, which defines a toQueryString() method that is overridden by various other javax.management classes. Serialization requires the first non-serializable superclass of the serialized class to have a no-arg constructor that is accessible to the serialized class. A custom subclass will be outside the javax.management package so will not have access to the constructor of javax.management.ToQueryString. It happens that adding a public constructor to ToQueryString will fix this problem, but that is arguably a bug in the serialization system so we should not rely on it. We will need to rewrite the code to dispense with ToQueryString, which will probably require an ugly chain of "if instanceof".