/// <summary>
        /// Send request message back to caller as response
        /// </summary>
        /// <param name="pipelineContext">Pipeline context</param>
        /// <param name="inputMessage">Input message</param>
        /// <returns>Original input message</returns>
        protected override IBaseMessage Execute(IPipelineContext pipelineContext, IBaseMessage inputMessage)
        {
            var callToken = TraceProvider.Logger.TraceIn(this.Name);

            try
            {
                // delegate work to the BizTalk Xml Dissassembler
                TraceProvider.Logger.TraceInfo("Checking if itinerary should be terminated");
                var IsTerminateItinerary = inputMessage.Context.Read("IsTerminateItinerary", "https://DE.DAXFSA.Framework.Properties.ESBGlobalProperties");

                if (IsTerminateItinerary != null && (bool)IsTerminateItinerary)
                {
                    IItinerary itinerary = ItineraryOMFactory.Create(inputMessage);
                    if (itinerary != null)
                    {
                        MethodInfo CompleteItinerary_MI = itinerary.GetType().GetMethod("CompleteItinerary", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
                        if (CompleteItinerary_MI != null)
                        {
                            CompleteItinerary_MI.Invoke(itinerary, new object[] { null });
                        }
                    }
                    return(null);
                }
                return(inputMessage);
            }
            catch (Exception ex)
            {
                // put component name as a source information in this exception,
                // so the event log in message could reflect this
                ex.Source = this.Name;
                TraceProvider.Logger.TraceError(ex);
                throw ex;
            }
            finally
            {
                TraceProvider.Logger.TraceOut(callToken);
            }
        }