code: public static PUBLISH copy(final PUBLISH original) {
          final PUBLISH publish = new PUBLISH();
          publish.setQoS(original.getQoS());
          publish.setRetain(original.isRetain());
          publish.setPayload(original.getPayload());
          publish.setTopic(original.getTopic());
          publish.setDuplicateDelivery(original.isDuplicateDelivery());
          publish.setMessageId(original.getMessageId());
          publish.setTTL(original.getTTL());
          return publish;
      }
docs: Crates a deep copy of a {@link PUBLISH} object.
  <p/>
  Use this method if you want to reuse a publish received by a callback to prevent side effects.
  
  @param original the original PUBLISH message
  @return a deep copy of the original PUBLISH message