docs: public BaseMessage sendMessageRequest(BaseMessage messageOut)
      {
          if (m_con == null)
          {
              try {
                  m_con = SOAPConnectionFactory.newInstance().createConnection();
              } catch(Exception e) {
                  Utility.getLogger().warning("Unable to open a SOAPConnection");
                  e.printStackTrace();
              }
          }
          String strTrxID = null;
          try {
  
              // Create a message from the message factory.
              SOAPMessage msg = null; //mf.createMessage();
              
              msg = this.setSOAPBody(msg, messageOut);
              
              // Create an endpoint for the recipient of the message.
              TrxMessageHeader trxMessageHeader = (TrxMessageHeader)messageOut.getMessageHeader();
              String strDest = (String)trxMessageHeader.get(TrxMessageHeader.DESTINATION_PARAM);
              String strMsgDest = (String)trxMessageHeader.get(TrxMessageHeader.DESTINATION_MESSAGE_PARAM);
              if (strMsgDest != null)
                  strDest = strDest + strMsgDest;
              strTrxID = (String)trxMessageHeader.get(TrxMessageHeader.LOG_TRX_ID);
  
              URL urlEndpoint = new URL(strDest);
              // Send the message to the provider using the connection.
              // Create a message from the message factory.
              if (trxMessageHeader.get(SOAPMessage.WRITE_XML_DECLARATION) != null)
                  msg.setProperty(SOAPMessage.WRITE_XML_DECLARATION, (String)trxMessageHeader.get(SOAPMessage.WRITE_XML_DECLARATION));    // true or [false]
              if (trxMessageHeader.get(SOAPMessage.CHARACTER_SET_ENCODING) != null)
                  msg.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, (String)trxMessageHeader.get(SOAPMessage.WRITE_XML_DECLARATION));    // [utf-8] or utf-16
              if (trxMessageHeader.get(CONTENT_TYPE) != null)
                  msg.getMimeHeaders().setHeader(CONTENT_TYPE, (String)trxMessageHeader.get(CONTENT_TYPE)); // "text/xml"
              if (trxMessageHeader.get(SOAP_ACTION) != null)
                  msg.getMimeHeaders().setHeader(SOAP_ACTION, (String)trxMessageHeader.get(SOAP_ACTION)); // Not recommended
              
          	//OutputStream out = new ByteArrayOutputStream();
          	//msg.writeTo(out);
          	//out.flush();
          	//Utility.getLogger().info(out.toString());
  
              strTrxID = this.logMessage(strTrxID, messageOut, MessageInfoTypeModel.REQUEST, MessageTypeModel.MESSAGE_OUT, MessageStatusModel.SENT, null, null);
  
              SOAPMessage reply = m_con.call(msg, urlEndpoint);
  // To test this locally, use the next two lines.
  //            MessageReceivingServlet servlet = new MessageReceivingServlet();
  //            SOAPMessage reply = servlet.onMessage(msg);
  
              if (reply != null)
              {
                  BaseMessage messageReply = new TreeMessage(null, null);
                  new SoapTrxMessageIn(messageReply, reply);
                  return messageReply;
              } else {
                  System.err.println("No reply");
              }
          } catch(Throwable ex) {
              ex.printStackTrace();
              String strErrorMessage = ex.getMessage();
              this.logMessage(strTrxID, messageOut, MessageInfoTypeModel.REQUEST, MessageTypeModel.MESSAGE_OUT, MessageStatusModel.ERROR, strErrorMessage, null);
              return BaseMessageProcessor.processErrorMessage(this, messageOut, strErrorMessage);
          }            
  
          return null;
      }