Beispiel #1
0
        public async Task <EpcisQuery> Read(Stream input, CancellationToken cancellationToken)
        {
            var document = await XmlDocumentParser.Instance.Load(input, cancellationToken);

            if (document.Root.Name.LocalName == "EPCISQueryDocument")
            {
                var element = document.Root.Element("EPCISBody").Elements().FirstOrDefault();

                if (element != null)
                {
                    if (element.Name == XName.Get("GetQueryNames", EpcisNamespaces.Query))
                    {
                        return(new GetQueryNames());
                    }
                    if (element.Name == XName.Get("GetSubscriptionIDs", EpcisNamespaces.Query))
                    {
                        return new GetSubscriptionIds {
                                   QueryName = element.Element("queryName").Value
                        }
                    }
                    ;
                    if (element.Name == XName.Get("GetStandardVersion", EpcisNamespaces.Query))
                    {
                        return(new GetStandardVersion());
                    }
                    if (element.Name == XName.Get("GetVendorVersion", EpcisNamespaces.Query))
                    {
                        return(new GetVendorVersion());
                    }
                    if (element.Name == XName.Get("Poll", EpcisNamespaces.Query))
                    {
                        return(XmlQueryParser.Parse(element));
                    }
                    if (element.Name == XName.Get("Subscribe", EpcisNamespaces.Query))
                    {
                        return(XmlSubscriptionParser.ParseSubscription(element));
                    }
                    if (element.Name == XName.Get("Unsubscribe", EpcisNamespaces.Query))
                    {
                        return(XmlSubscriptionParser.ParseUnsubscription(element));
                    }
                    throw new Exception($"Element not expected: '{element?.Name?.LocalName ?? null}'");
                }

                throw new Exception($"EPCISBody element must contain the query type.");
            }

            throw new Exception($"Element not expected: '{document.Root.Name.LocalName}'");
        }
        public static EpcisQuery ParseSubscription(XElement element)
        {
            var subscription = new Subscription
            {
                SubscriptionId    = element.Element("subscriptionID").Value,
                QueryName         = element.Element("queryName").Value,
                Destination       = element.Element("dest").Value,
                Trigger           = element.Element("controls")?.Element("trigger")?.Value,
                ReportIfEmpty     = bool.Parse(element.Element("controls").Element("reportIfEmpty").Value),
                InitialRecordTime = DateTime.TryParse(element.Element("controls")?.Element("initialRecordTime")?.Value ?? "", out DateTime date) ? date : default(DateTime?),
                Parameters        = XmlQueryParser.ParseParameters(element.Element("params")?.Elements()).ToArray()
            };

            subscription.Schedule = ParseQuerySchedule(element.Element("controls")?.Element("schedule"));

            return(subscription);
        }
Beispiel #3
0
        private EpcisQuery ReadRequest(XElement body)
        {
            var element = body.Elements().SingleOrDefault(x => x.Name.NamespaceName == EpcisNamespaces.Query);

            if (element != null)
            {
                if (element.Name == XName.Get("GetQueryNames", EpcisNamespaces.Query))
                {
                    return(new GetQueryNames());
                }
                if (element.Name == XName.Get("GetSubscriptionIDs", EpcisNamespaces.Query))
                {
                    return(new GetSubscriptionIds {
                        QueryName = element.Element("queryName").Value
                    });
                }
                if (element.Name == XName.Get("GetStandardVersion", EpcisNamespaces.Query))
                {
                    return(new GetStandardVersion());
                }
                if (element.Name == XName.Get("GetVendorVersion", EpcisNamespaces.Query))
                {
                    return(new GetVendorVersion());
                }
                if (element.Name == XName.Get("Poll", EpcisNamespaces.Query))
                {
                    return(XmlQueryParser.Parse(element));
                }
                if (element.Name == XName.Get("Subscribe", EpcisNamespaces.Query))
                {
                    return(XmlSubscriptionParser.ParseSubscription(element));
                }
                if (element.Name == XName.Get("Unsubscribe", EpcisNamespaces.Query))
                {
                    return(XmlSubscriptionParser.ParseUnsubscription(element));
                }
                throw new Exception($"Element not expected: '{element?.Name?.LocalName ?? null}'");
            }

            throw new Exception($"Invalid SOAP request: empty Body.");
        }
Beispiel #4
0
        public EpcisQuery Read(Stream input)
        {
            var document = XDocument.Load(input);

            if (document.Root.Name.LocalName == "EPCISQueryDocument")
            {
                var element = document.Root.Element("EPCISBody").Elements().FirstOrDefault();

                if (element != null)
                {
                    if (element.Name == XName.Get("GetQueryNames", EpcisNamespaces.Query))
                    {
                        return(new GetQueryNames());
                    }
                    if (element.Name == XName.Get("GetSubscriptionIDs", EpcisNamespaces.Query))
                    {
                        return(new GetSubscriptionIds());
                    }
                    if (element.Name == XName.Get("GetStandardVersion", EpcisNamespaces.Query))
                    {
                        return(new GetStandardVersion());
                    }
                    if (element.Name == XName.Get("GetVendorVersion", EpcisNamespaces.Query))
                    {
                        return(new GetVendorVersion());
                    }
                    if (element.Name == XName.Get("Poll", EpcisNamespaces.Query))
                    {
                        return(XmlQueryParser.Parse(element));
                    }
                    throw new Exception($"Element not expected: '{element?.Name?.LocalName ?? null}'");
                }

                throw new Exception($"EPCISBody element must contain the query type.");
            }

            throw new Exception($"Element not expected: '{document.Root.Name.LocalName}'");
        }
Beispiel #5
0
        public async Task <IQueryRequest> ParseQuery(Stream input, CancellationToken cancellationToken)
        {
            var queryParser = new XmlQueryParser();

            return(await queryParser.Read(input, cancellationToken));
        }