code: public int convertInternalToExternal(Object recordOwner)
      {
          if (this.getConvertToNative() == null)
          {
              BaseMessageHeader trxMessageHeader = this.getMessage().getMessageHeader();
              String strMessageClass = (String)trxMessageHeader.get(TrxMessageHeader.MESSAGE_MARSHALLER_CLASS);
              String strPackage = (String)trxMessageHeader.get(TrxMessageHeader.BASE_PACKAGE);
              strMessageClass = ClassServiceUtility.getFullClassName(strPackage, strMessageClass);
              return ((RecordOwner)recordOwner).getTask().setLastError("Converter does not exist: " + strMessageClass);
          }
          Object root = this.getConvertToNative().convertInternalToMarshallableObject((RecordOwner)recordOwner);
          if (root != null)
          {
              this.setRawData(root);
              return DBConstants.NORMAL_RETURN;    // Success
          }
          return super.convertInternalToExternal(recordOwner);
      }
docs: Convert this source message to the ECXML format.
  Typically you do not override this method, you override the getTransformer method
  to supply a XSLT document to do the conversion.
  @param source The source XML document.