docs: public BaseMessage sendMessageRequest(BaseMessage messageOut)
      {
          TrxMessageHeader trxMessageHeader = (TrxMessageHeader)messageOut.getMessageHeader();
          String strTrxID = (String)trxMessageHeader.get(TrxMessageHeader.LOG_TRX_ID);
          try {
              // Create a fake Incoming message with this message's external data
              String strMessageCode = (String)trxMessageHeader.get(LocalMessageTransport.LOCAL_PROCESSOR);
              TrxMessageHeader trxMessageHeaderIn = new TrxMessageHeader(null, null);
              trxMessageHeaderIn.put(TrxMessageHeader.MESSAGE_CODE, strMessageCode);
  
              BaseMessage messageIn = new TreeMessage(trxMessageHeaderIn, null);
              new ExternalMapTrxMessageIn(messageIn, messageOut.getExternalMessage().getRawData());
              // And fake send it by calling this:
              BaseMessage messageReply = this.processIncomingMessage(messageIn, null);
              this.logMessage(strTrxID, messageOut, MessageInfoTypeModel.REQUEST, MessageTypeModel.MESSAGE_OUT, MessageStatusModel.SENT, null, null);
  
              this.setupReplyMessage(messageReply, null, MessageInfoTypeModel.REPLY, MessageTypeModel.MESSAGE_OUT);
              int iErrorCode = this.convertToExternal(messageReply, null);
              if (iErrorCode != DBConstants.NORMAL_RETURN)
              {
                  String strMessageDescription = this.getTask().getLastError(iErrorCode);
                  if ((strMessageDescription == null) || (strMessageDescription.length() == 0))
                      strMessageDescription = "Error converting to external format";
                  messageReply = BaseMessageProcessor.processErrorMessage(this, messageOut, strMessageDescription);
              }
  
              return messageReply;
          } catch (Throwable ex)  {
              ex.printStackTrace();
              String strError = "Error in processing or replying to a message";
              Utility.getLogger().warning(strError);
              this.logMessage(strTrxID, null, MessageInfoTypeModel.REQUEST, MessageTypeModel.MESSAGE_OUT, MessageStatusModel.ERROR, strError, null);
              return BaseMessageProcessor.processErrorMessage(this, messageOut, strError);
          }
      }