code: @Override
      public Serializable getRealObject() throws IOException, ClassNotFoundException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "getRealObject");
  
          Serializable obj = null;
  
          // We 'have' a real object, though we may not still have a ref to to it.
          if (hasRealObject) {
              obj = realObject;
  
              // if it is null it may be because we previously serialized & threw away the strong ref
              if ((obj == null) && (hasSerializedRealObject)) {
  
                  // Unless the value really is a null, we will have set a SoftReference for it
                  if (softRefToRealObject != null) {
  
                      // Can we get it back from the SoftReference?
                      obj = softRefToRealObject.get();
                      // If not, deserialize from the message.
                      if (obj == null) {
                          obj = deserializeToRealObject();
                      }
                  }
  
              }
  
              // If we hadn't previously serialized the message, then whatever was in realObject is the real
              // value, even if it is null.
          }
  
          // If we didn't 'have' a real object at all, just deserialize the one in the message
          else {
              obj = deserializeToRealObject();
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "getRealObject", (obj == null ? "null" : obj.getClass()));
          return obj;
      }
docs: /*
  Get hold of the real object. If we do not have a reference to it then deserialize it
  and return that.
  Stash it in a SoftReference in case we want it again.
  
  Javadoc description supplied by JsJmsObjectMessage interface.