docs: @Override
      void updateDataFields(int why) {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "updateDataFields", why);
          super.updateDataFields(why);
  
          // If we have an unserialized object
          if (hasRealObject && !hasSerializedRealObject) {
  
              // If we are encoding for transmission, flattening or creation of a datagraph
              // then serialize the data
              if (why == MfpConstants.UDF_ENCODE || why == MfpConstants.UDF_FLATTEN || why == MfpConstants.UDF_MAKE_INBOUND_SDO) {
  
                  try {
                      serializeRealObject();
                  }
  
                  catch (ObjectFailedToSerializeException ofse) {
                      // No FFDC code needed
                      // The underlying IOException has already been FFDC'd
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                          SibTr.debug(this, tc, "Payload object serialization failed so payload will be empty.");
  
                      // We are unable to serialize the object due to an application error.
                      // To avoid screwing up the system we clear the object reference and set null
                      // into the JMF message then carry on.
                      // We could hang on to the real object, in case a local consumer is available
                      // quickly enough, but we don't as the outcome would then be non-deterministic
                      // and the problem more difficult to diagnose.
                      realObject = null;
                      getPayload().setField(JmsObjectBodyAccess.BODY_DATA_VALUE, null);
  
                      // We set hasRealObject to false, so we don't waste time looking for a soft
                      // reference to it because it is null.  There is no need to set
                      // hasSerializedRealObject to true, as we no longer think we have a real object.
                      hasRealObject = false;
  
                      // We set the message's Exception fields so that there is a clue to why the payload is now empty.
                      setExceptionReason(ofse.getExceptionReason());
                      setExceptionInserts(ofse.getExceptionInserts());
                      setExceptionTimestamp(System.currentTimeMillis());
                      setExceptionProblemDestination(null);
                      setExceptionProblemSubscription(null);
                  }
              }
          }
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "updateDataFields");
      }