void ReadElementsFromXml(EwsServiceXmlReader reader) { this.searchableMailboxes.Clear(); base.ReadElementsFromXml(reader); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.SearchableMailboxes); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchableMailbox)) { this.searchableMailboxes.Add(SearchableMailbox.LoadFromXml(reader)); } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.SearchableMailboxes)); } reader.Read(); if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.FailedMailboxes)) { this.FailedMailboxes = FailedSearchMailbox.LoadFailedMailboxesXml(XmlNamespace.Messages, reader); } }
private List <Pair <MailboxInfo, Exception> > ConvertToPreviewErrors(FailedSearchMailbox[] failedMailboxes) { List <Pair <MailboxInfo, Exception> > list = new List <Pair <MailboxInfo, Exception> >(failedMailboxes.Length); List <MailboxInfo> list2 = new List <MailboxInfo>(failedMailboxes.Length); for (int i = 0; i < failedMailboxes.Length; i++) { FailedSearchMailbox failedSearchMailbox = failedMailboxes[i]; if (failedSearchMailbox == null) { Factory.Current.GeneralTracer.TraceError <Guid, string>((long)this.GetHashCode(), "Correlation Id:{0}. Null failed mailbox encountered in search result from {1}", base.ExecutingUser.QueryCorrelationId, this.Uri.AbsoluteUri); throw new WebServiceProxyInvalidResponseException(Strings.InvalidFailedMailboxesResultWebServiceResponse(this.Uri.AbsoluteUri)); } MailboxInfo info = this.FindMailboxInfoByAnyIdentifier(failedSearchMailbox, failedSearchMailbox.Mailbox, null, new bool?(failedSearchMailbox.IsArchive)); if (info == null || string.IsNullOrEmpty(failedSearchMailbox.ErrorMessage)) { Factory.Current.GeneralTracer.TraceError <Guid, string>((long)this.GetHashCode(), "Correlation Id:{0}. Invalid mailbox encountered in search result from {1}", base.ExecutingUser.QueryCorrelationId, this.Uri.AbsoluteUri); throw new WebServiceProxyInvalidResponseException(Strings.InvalidFailedMailboxesResultWebServiceResponse(this.Uri.AbsoluteUri)); } if ((from x in list2 where string.Equals(x.LegacyExchangeDN, info.LegacyExchangeDN, StringComparison.OrdinalIgnoreCase) && x.Type == info.Type select x).FirstOrDefault <MailboxInfo>() != null) { Factory.Current.GeneralTracer.TraceError <Guid, string>((long)this.GetHashCode(), "Correlation Id:{0}. Duplicate failed mailbox encountered in search result from {1}", base.ExecutingUser.QueryCorrelationId, this.Uri.AbsoluteUri); throw new WebServiceProxyInvalidResponseException(Strings.InvalidFailedMailboxesResultDuplicateEntries(this.Uri.AbsoluteUri)); } list2.Add(info); list.Add(new Pair <MailboxInfo, Exception>(info, new Exception(failedSearchMailbox.ErrorMessage))); } return(list); }
private MailboxInfo FindMailboxInfo(object state) { Recorder.Trace(4L, TraceType.InfoTrace, "SearchMailboxesResults.FindMailboxInfo State:", state); if (this.sources != null && this.sources.Count > 0) { Recorder.Trace(4L, TraceType.InfoTrace, "SearchMailboxesResults.FindMailboxInfo Count:", this.sources.Count); SearchSource searchSource = null; SearchPreviewItem previewItem = state as SearchPreviewItem; if (previewItem != null) { searchSource = this.Sources.FirstOrDefault((SearchSource t) => string.Equals(t.OriginalReferenceId, previewItem.Mailbox.MailboxId, StringComparison.InvariantCultureIgnoreCase) || string.Equals(t.ReferenceId, previewItem.Mailbox.MailboxId, StringComparison.InvariantCultureIgnoreCase)); } FailedSearchMailbox failedItem = state as FailedSearchMailbox; if (failedItem != null) { searchSource = this.Sources.FirstOrDefault((SearchSource t) => string.Equals(t.OriginalReferenceId, failedItem.Mailbox, StringComparison.InvariantCultureIgnoreCase) || string.Equals(t.ReferenceId, failedItem.Mailbox, StringComparison.InvariantCultureIgnoreCase)); } MailboxStatisticsItem statisticsItem = state as MailboxStatisticsItem; if (statisticsItem != null) { searchSource = this.Sources.FirstOrDefault((SearchSource t) => string.Equals(t.OriginalReferenceId, statisticsItem.MailboxId, StringComparison.InvariantCultureIgnoreCase) || string.Equals(t.ReferenceId, statisticsItem.MailboxId, StringComparison.InvariantCultureIgnoreCase)); } if (searchSource != null) { return(searchSource.MailboxInfo); } } Recorder.Trace(4L, TraceType.WarningTrace, "SearchMailboxesResults.FindMailboxInfo Source Not Found State:", state); return(null); }
/// <summary> /// Load from xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Non indexable item details result object</returns> static NonIndexableItemDetailsResult LoadFromXml(EwsServiceXmlReader reader) { NonIndexableItemDetailsResult nonIndexableItemDetailsResult = new NonIndexableItemDetailsResult(); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.NonIndexableItemDetailsResult); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Items)) { List <NonIndexableItem> nonIndexableItems = new List <NonIndexableItem>(); if (!reader.IsEmptyElement) { do { reader.Read(); NonIndexableItem nonIndexableItem = NonIndexableItem.LoadFromXml(reader); if (nonIndexableItem != null) { nonIndexableItems.Add(nonIndexableItem); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Items)); nonIndexableItemDetailsResult.Items = nonIndexableItems.ToArray(); } } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.FailedMailboxes)) { nonIndexableItemDetailsResult.FailedMailboxes = FailedSearchMailbox.LoadFailedMailboxesXml(XmlNamespace.Types, reader); } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.NonIndexableItemDetailsResult)); return(nonIndexableItemDetailsResult); }
/// <summary> /// Load from xml /// </summary> /// <param name="reader">The reader</param> /// <returns>Search result object</returns> static SearchMailboxesResult LoadFromXml(EwsServiceXmlReader reader) { SearchMailboxesResult searchResult = new SearchMailboxesResult(); reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.SearchMailboxesResult); List <MailboxQuery> searchQueries = new List <MailboxQuery>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchQueries)) { reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.MailboxQuery); String query = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Query); reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes); List <MailboxSearchScope> mailboxSearchScopes = new List <MailboxSearchScope>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScope)) { String mailbox = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Mailbox); reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.SearchScope); String searchScope = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SearchScope); reader.ReadEndElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScope); mailboxSearchScopes.Add(new MailboxSearchScope(mailbox, (MailboxSearchLocation)Enum.Parse(typeof(MailboxSearchLocation), searchScope))); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes)); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes); searchQueries.Add(new MailboxQuery(query, mailboxSearchScopes.ToArray())); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.SearchQueries)); reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.SearchQueries); searchResult.SearchQueries = searchQueries.ToArray(); searchResult.ResultType = (SearchResultType)Enum.Parse(typeof(SearchResultType), reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ResultType)); searchResult.ItemCount = int.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ItemCount)); searchResult.Size = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Size)); searchResult.PageItemCount = int.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.PageItemCount)); searchResult.PageItemSize = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.PageItemSize)); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.KeywordStats)) { searchResult.KeywordStats = LoadKeywordStatsXml(reader); } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Items)) { searchResult.PreviewItems = LoadPreviewItemsXml(reader); } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.FailedMailboxes)) { searchResult.FailedMailboxes = FailedSearchMailbox.LoadFailedMailboxesXml(XmlNamespace.Types, reader); } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Refiners)) { List <SearchRefinerItem> refiners = new List <SearchRefinerItem>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Refiner)) { refiners.Add(SearchRefinerItem.LoadFromXml(reader)); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Refiners)); if (refiners.Count > 0) { searchResult.Refiners = refiners.ToArray(); } } if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxStats)) { List <MailboxStatisticsItem> mailboxStats = new List <MailboxStatisticsItem>(); do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxStat)) { mailboxStats.Add(MailboxStatisticsItem.LoadFromXml(reader)); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.MailboxStats)); if (mailboxStats.Count > 0) { searchResult.MailboxStats = mailboxStats.ToArray(); } } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.SearchMailboxesResult)); return(searchResult); }