org.jivesoftware.util.cache.ExternalizableUtilStrategy is the basis of a pluggable mechanism that provides serialization.
My assumption is that it was made pluggable, as the original Openfire code does not rely on serialization, although the clustering solution does. The first clustering plugin was based on a proprietary solution (Coherence), which likely made it undesirable/impossible to include code in the Open Source part of Openfire.
As a result, Openfire's core has a "dummy" implementation - a serialization strategy (in org.jivesoftware.util.cache.DummyExternalizableUtil) that does nothing.
Over time, this has bitten me a couple of times. There is some use for serialization out of context of clustering. With the mechanism that's in place now, the code seems to be serializable, but really is not (that might even be qualified as a bug, as it breaks a contract).
Openfire's core should have a functional serialization strategy, which replaces the Dummy implementation. The implemenation used in the Hazelcast plugin has next to no Hazelcast specifics, and has been proven to work.
Eventually, we might even want to consider using the Openfire-provided mechanism, instead of relying on the pluggable framework for the Hazelcast plugin. That's one bridge to far from now though.