code: public JMFMessage copy() {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) JmfTr.entry(this, tc, "copy");
      JMFMessage copy;
  
      synchronized (getMessageLockArtefact()) {
        if (map == null) {
          // If there is no map, then this is already become just a delegator, so
          // the copy does not need to include the compatibility wrapper.
          copy = ((JMFMessage)encoding).copy();
        }
        else {
          // In the usual case, we maintain a compatibility layer
          copy = new JSCompatibleMessageImpl(this);
        }
      }
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) JmfTr.exit(this, tc, "copy", copy);
      return copy;
    }
docs: Locking: Relies on map remaining not-null, so must not run coincidentally with becomeDelegator()