예제 #1
0
        public static UriDescriptor Parse(string uri, Exchange exchange = null)
        {
            var parts = new UriDescriptor();

            if (exchange != null)
            {
                uri = SimpleExpression.ResolveSpecifiedUriPart(uri, exchange);
            }

            if (string.IsNullOrEmpty(uri))
            {
                throw new SynapseException("uri data error: cannot be empty");
            }

            var mainParts = uri.Split(new[] { '?' }, 2);

            var uriPrimaryParts = mainParts[0].Split(new[] { ':' }, 2);

            parts.ComponentName      = uriPrimaryParts.Length >= 1 ? uriPrimaryParts[0] : "";
            parts.ComponentPath      = uriPrimaryParts.Length >= 2 ? uriPrimaryParts[1] : "";
            parts.ComponentQueryPath = mainParts.Length > 1 ? mainParts[1] : "";
            parts.FullUri            = uri;

            return(parts);
        }
예제 #2
0
        public static void Execute(XElement loopTag, Exchange exchange, Route route)
        {
            var expressionTag = loopTag.Elements().FirstOrDefault();

            if (expressionTag == null || (expressionTag.Name != "count"))
            {
                return;
            }

            var xpression = expressionTag.Value;
            var count     = SimpleExpression.ResolveSpecifiedUriPart(xpression, exchange);

            var mCount = Convert.ToInt32(count);

            for (var i = 0; i < mCount; i++)
            {
                var data = loopTag.Elements().Skip(1);
                foreach (var dataItem in data)
                {
                    try
                    {
                        RouteStep.ExecuteRouteStep(dataItem, route, exchange);
                    }
                    catch (Exception exception)
                    {
                    }
                }
            }
        }
예제 #3
0
        public static void Execute(string uri, Exchange exchange, Route route)
        {
            uri = SimpleExpression.ResolveSpecifiedUriPart(uri, exchange);
            var leafNodeParts = UriDescriptor.Parse(uri, exchange);

            EndpointBuilder.HandleFrom(leafNodeParts, route);
        }
예제 #4
0
        private static void HandleSetHeader(XElement step, Route routeObj, Exchange exchange)
        {
            var headerName = step.Attribute(TagConstant.Name).Value;
            var value      = step.Attribute(TagConstant.Value).Value;

            value = SimpleExpression.ResolveSpecifiedUriPart(value, exchange);
            exchange.InMessage.SetHeader(headerName, value);
        }
예제 #5
0
        private static void HandleProperty(XElement step, Route routeObj, Exchange exchange)
        {
            var propertyName = step.Attribute(TagConstant.Name).Value;
            var value        = step.Attribute(TagConstant.Value).Value;

            value = SimpleExpression.ResolveSpecifiedUriPart(value, exchange);
            exchange.SetProperty(propertyName, value);
        }
예제 #6
0
        private static List <string> SplitSimple(string value, Exchange exchange)
        {
            var listOfParts = new List <String>();

            var simpleData = SimpleExpression.ResolveSpecifiedUriPart(value, exchange);

            return(listOfParts);
        }
예제 #7
0
        public T GetUriProperty <T>(string key, T defaultResult = default(T), Exchange exchange = null)
        {
            var data = GetUriProperty(key);

            if (string.IsNullOrEmpty(data))
            {
                return(defaultResult);
            }

            try
            {
                if (exchange != null)
                {
                    data = SimpleExpression.ResolveSpecifiedUriPart(data, exchange);
                }

                var foo = TypeDescriptor.GetConverter(typeof(T));
                return((T)(foo.ConvertFromInvariantString(data)));
            }
            catch
            {
                return(defaultResult);
            }
        }
예제 #8
0
        private static void ProcessSimple(XElement transformXml, Route routeObj, Exchange exchange)
        {
            var newBody = SimpleExpression.ResolveSpecifiedUriPart(transformXml.Value, exchange);

            exchange.InMessage.Body = newBody;
        }