protected boolean injectMessage(InputStream in, String contentType) {
   try {
     org.apache.synapse.MessageContext msgCtx = createMessageContext();
     if (log.isDebugEnabled()) {
       log.debug("Processed Custom inbound EP Message of Content-type : " + contentType);
     }
     MessageContext axis2MsgCtx =
         ((org.apache.synapse.core.axis2.Axis2MessageContext) msgCtx).getAxis2MessageContext();
     // Determine the message builder to use
     Builder builder;
     if (contentType == null) {
       log.debug("No content type specified. Using SOAP builder.");
       builder = new SOAPBuilder();
     } else {
       int index = contentType.indexOf(';');
       String type = index > 0 ? contentType.substring(0, index) : contentType;
       builder = BuilderUtil.getBuilderFromSelector(type, axis2MsgCtx);
       if (builder == null) {
         if (log.isDebugEnabled()) {
           log.debug("No message builder found for type '" + type + "'. Falling back to SOAP.");
         }
         builder = new SOAPBuilder();
       }
     }
     OMElement documentElement = builder.processDocument(in, contentType, axis2MsgCtx);
     // Inject the message to the sequence.
     msgCtx.setEnvelope(TransportUtils.createSOAPEnvelope(documentElement));
     if (injectingSeq == null || injectingSeq.equals("")) {
       log.error("Sequence name not specified. Sequence : " + injectingSeq);
       return false;
     }
     SequenceMediator seq =
         (SequenceMediator) synapseEnvironment.getSynapseConfiguration().getSequence(injectingSeq);
     if (seq != null) {
       if (log.isDebugEnabled()) {
         log.debug("injecting message to sequence : " + injectingSeq);
       }
       seq.setErrorHandler(onErrorSeq);
       if (!seq.isInitialized()) {
         seq.init(synapseEnvironment);
       }
       if (!synapseEnvironment.injectInbound(msgCtx, seq, sequential)) {
         return false;
       }
     } else {
       log.error("Sequence: " + injectingSeq + " not found");
     }
   } catch (Exception e) {
     log.error("Error while processing the Custom Inbound EP Message.");
   }
   return true;
 }
  /** Invoke the mediation logic for the passed message */
  public boolean invoke(Object object, String name) throws SynapseException {

    Message msg = (Message) object;
    try {
      org.apache.synapse.MessageContext msgCtx = createMessageContext();
      msgCtx.setProperty("inbound.endpoint.name", name);
      InboundEndpoint inboundEndpoint = msgCtx.getConfiguration().getInboundEndpoint(name);
      CustomLogSetter.getInstance().setLogAppender(inboundEndpoint.getArtifactContainerName());
      String contentType = msg.getJMSType();

      if (contentType == null || contentType.trim().equals("")) {
        String contentTypeProperty = jmsProperties.getProperty(JMSConstants.CONTENT_TYPE_PROPERTY);
        if (contentTypeProperty != null) {
          contentType = msg.getStringProperty(contentTypeProperty);
        }
      } else {
        msgCtx.setProperty(JMSConstants.JMS_MESSAGE_TYPE, contentType);
      }

      if (contentType == null || contentType.trim().equals("")) {
        contentType = jmsProperties.getProperty(JMSConstants.CONTENT_TYPE);
      }
      if (log.isDebugEnabled()) {
        log.debug("Processed JMS Message of Content-type : " + contentType);
      }
      MessageContext axis2MsgCtx =
          ((org.apache.synapse.core.axis2.Axis2MessageContext) msgCtx).getAxis2MessageContext();
      // set the JMS Message ID as the Message ID of the MessageContext
      try {
        msgCtx.setMessageID(msg.getJMSMessageID());
        String jmsCorrelationID = msg.getJMSCorrelationID();
        if (jmsCorrelationID != null && !jmsCorrelationID.isEmpty()) {
          msgCtx.setProperty(JMSConstants.JMS_COORELATION_ID, jmsCorrelationID);
        } else {
          msgCtx.setProperty(JMSConstants.JMS_COORELATION_ID, msg.getJMSMessageID());
        }
      } catch (JMSException ignore) {
        log.warn("Error getting the COORELATION ID from the message.");
      }

      // Handle dual channel
      Destination replyTo = msg.getJMSReplyTo();
      if (replyTo != null) {
        msgCtx.setProperty(SynapseConstants.IS_INBOUND, true);
        // Create the cachedJMSConnectionFactory with the existing
        // connection
        CachedJMSConnectionFactory cachedJMSConnectionFactory =
            new CachedJMSConnectionFactory(jmsProperties, connection);
        String strUserName = jmsProperties.getProperty(JMSConstants.PARAM_JMS_USERNAME);
        String strPassword = jmsProperties.getProperty(JMSConstants.PARAM_JMS_PASSWORD);
        JMSReplySender jmsReplySender =
            new JMSReplySender(replyTo, cachedJMSConnectionFactory, strUserName, strPassword);
        msgCtx.setProperty(
            InboundEndpointConstants.INBOUND_ENDPOINT_RESPONSE_WORKER, jmsReplySender);
      } else if (replyDestination != null) {
        msgCtx.setProperty(SynapseConstants.IS_INBOUND, true);
        // Create the cachedJMSConnectionFactory with the existing
        // connection
        CachedJMSConnectionFactory cachedJMSConnectionFactory =
            new CachedJMSConnectionFactory(jmsProperties, connection);
        String strUserName = jmsProperties.getProperty(JMSConstants.PARAM_JMS_USERNAME);
        String strPassword = jmsProperties.getProperty(JMSConstants.PARAM_JMS_PASSWORD);
        JMSReplySender jmsReplySender =
            new JMSReplySender(
                replyDestination, cachedJMSConnectionFactory, strUserName, strPassword);
        msgCtx.setProperty(
            InboundEndpointConstants.INBOUND_ENDPOINT_RESPONSE_WORKER, jmsReplySender);
      }

      // Determine the message builder to use
      Builder builder;
      if (contentType == null) {
        log.debug("No content type specified. Using SOAP builder.");
        builder = new SOAPBuilder();
      } else {
        int index = contentType.indexOf(';');
        String type = index > 0 ? contentType.substring(0, index) : contentType;
        builder = BuilderUtil.getBuilderFromSelector(type, axis2MsgCtx);
        if (builder == null) {
          if (log.isDebugEnabled()) {
            log.debug("No message builder found for type '" + type + "'. Falling back to SOAP.");
          }
          builder = new SOAPBuilder();
        }
      }
      OMElement documentElement = null;
      // set the message payload to the message context
      if (msg instanceof TextMessage) {
        String message = ((TextMessage) msg).getText();
        InputStream in = new AutoCloseInputStream(new ByteArrayInputStream(message.getBytes()));
        documentElement = builder.processDocument(in, contentType, axis2MsgCtx);
      } else if (msg instanceof BytesMessage) {
        if (builder instanceof DataSourceMessageBuilder) {
          documentElement =
              ((DataSourceMessageBuilder) builder)
                  .processDocument(
                      new BytesMessageDataSource((BytesMessage) msg), contentType, axis2MsgCtx);
        } else {
          documentElement =
              builder.processDocument(
                  new BytesMessageInputStream((BytesMessage) msg), contentType, axis2MsgCtx);
        }
      } else if (msg instanceof MapMessage) {
        documentElement = convertJMSMapToXML((MapMessage) msg);
      }

      // Inject the message to the sequence.
      msgCtx.setEnvelope(TransportUtils.createSOAPEnvelope(documentElement));
      if (injectingSeq == null || injectingSeq.equals("")) {
        log.error("Sequence name not specified. Sequence : " + injectingSeq);
        return false;
      }
      SequenceMediator seq =
          (SequenceMediator) synapseEnvironment.getSynapseConfiguration().getSequence(injectingSeq);
      if (seq != null) {
        if (log.isDebugEnabled()) {
          log.debug("injecting message to sequence : " + injectingSeq);
        }
        seq.setErrorHandler(onErrorSeq);
        if (!synapseEnvironment.injectInbound(msgCtx, seq, sequential)) {
          return false;
        }
      } else {
        log.error("Sequence: " + injectingSeq + " not found");
      }

      Object o = msgCtx.getProperty(JMSConstants.SET_ROLLBACK_ONLY);
      if (o != null) {
        if ((o instanceof Boolean && ((Boolean) o))
            || (o instanceof String && Boolean.valueOf((String) o))) {
          return false;
        }
      }
    } catch (SynapseException se) {
      throw se;
    } catch (Exception e) {
      log.error("Error while processing the JMS Message", e);
      throw new SynapseException("Error while processing the JMS Message", e);
    }
    return true;
  }