Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Client / System / Data / Services / Client / Xml / XmlAtomErrorReader.cs / 1407647 / XmlAtomErrorReader.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Provides a wrapping XmlReader that can detect in-line errors. // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services.Client.Xml { #region Namespaces. using System.Diagnostics; using System.Xml; #endregion Namespaces. ///Use this class to wrap an existing [DebuggerDisplay("XmlAtomErrorReader {NodeType} {Name} {Value}")] internal class XmlAtomErrorReader : XmlWrappingReader { ///. Initializes a new /// Reader to wrap. internal XmlAtomErrorReader(XmlReader baseReader) : base(baseReader) { Debug.Assert(baseReader != null, "baseReader != null"); this.Reader = baseReader; } #region Methods. ///instance. Reads the next node from the stream. ///true if the next node was read successfully; false if there are no more nodes to read. public override bool Read() { bool result = base.Read(); if (this.NodeType == XmlNodeType.Element && Util.AreSame(this.Reader, XmlConstants.XmlErrorElementName, XmlConstants.DataWebMetadataNamespace)) { string message = ReadErrorMessage(this.Reader); // In case of instream errors, the status code should be 500 (which is the default) throw new DataServiceClientException(Strings.Deserialize_ServerException(message)); } return result; } ///Reads an element string from the specified /// Reader to get value from. /// Whether a null attribute marker should be checked on the element. ///. The text value within the element, possibly null. ////// Simple values only are expected - mixed content will throw an error. /// Interspersed comments are ignored. /// internal static string ReadElementString(XmlReader reader, bool checkNullAttribute) { Debug.Assert(reader != null, "reader != null"); Debug.Assert(XmlNodeType.Element == reader.NodeType, "not positioned on Element"); string result = null; bool empty = checkNullAttribute && !Util.DoesNullAttributeSayTrue(reader); if (reader.IsEmptyElement) { return (empty ? String.Empty : null); } while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.EndElement: return result ?? (empty ? String.Empty : null); case XmlNodeType.CDATA: case XmlNodeType.Text: case XmlNodeType.SignificantWhitespace: if (null != result) { throw Error.InvalidOperation(Strings.Deserialize_MixedTextWithComment); } result = reader.Value; break; case XmlNodeType.Comment: case XmlNodeType.Whitespace: break; case XmlNodeType.Element: default: throw Error.InvalidOperation(Strings.Deserialize_ExpectingSimpleValue); } } // xml ended before EndElement? throw Error.InvalidOperation(Strings.Deserialize_ExpectingSimpleValue); } ///With the reader positioned on an 'error' element, reads the text of the 'message' child. ///from which to read a WCF Data Service inline error message. /// The text of the 'message' child element, empty if not found. private static string ReadErrorMessage(XmlReader reader) { Debug.Assert(reader != null, "reader != null"); Debug.Assert(reader.NodeType == XmlNodeType.Element, "reader.NodeType == XmlNodeType.Element"); Debug.Assert(reader.LocalName == XmlConstants.XmlErrorElementName, "reader.LocalName == XmlConstants.XmlErrorElementName"); int depth = 1; while (depth > 0 && reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (!reader.IsEmptyElement) { depth++; } if (depth == 2 && Util.AreSame(reader, XmlConstants.XmlErrorMessageElementName, XmlConstants.DataWebMetadataNamespace)) { return ReadElementString(reader, false); } } else if (reader.NodeType == XmlNodeType.EndElement) { depth--; } } return String.Empty; } #endregion Methods. } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LinkArea.cs
- Lasso.cs
- followingsibling.cs
- ModelVisual3D.cs
- ComponentCodeDomSerializer.cs
- XmlILOptimizerVisitor.cs
- StrongName.cs
- CacheEntry.cs
- ExpandCollapsePattern.cs
- TextEndOfParagraph.cs
- RectAnimationUsingKeyFrames.cs
- SiteMapHierarchicalDataSourceView.cs
- SymbolMethod.cs
- WebEventTraceProvider.cs
- SmiConnection.cs
- CookieProtection.cs
- UrlMapping.cs
- MemoryStream.cs
- DesignTimeHTMLTextWriter.cs
- MatrixConverter.cs
- base64Transforms.cs
- Transform.cs
- SqlFactory.cs
- ArgumentDirectionHelper.cs
- SchemaObjectWriter.cs
- BaseCollection.cs
- WindowProviderWrapper.cs
- PlatformNotSupportedException.cs
- IconHelper.cs
- DataGridHeaderBorder.cs
- IntSumAggregationOperator.cs
- FileDialogCustomPlace.cs
- DoubleAnimationClockResource.cs
- CrossContextChannel.cs
- AttachedAnnotation.cs
- CounterNameConverter.cs
- DataGridViewAdvancedBorderStyle.cs
- WebPartDisplayModeCollection.cs
- NameValuePermission.cs
- CAGDesigner.cs
- WCFServiceClientProxyGenerator.cs
- FileReservationCollection.cs
- ProfileGroupSettingsCollection.cs
- ReadOnlyState.cs
- ManagementScope.cs
- MdImport.cs
- EnumUnknown.cs
- HandlerFactoryWrapper.cs
- SQLResource.cs
- Style.cs
- StructureChangedEventArgs.cs
- BaseParaClient.cs
- PeerApplication.cs
- DocumentViewerHelper.cs
- ADMembershipUser.cs
- FocusChangedEventArgs.cs
- MouseCaptureWithinProperty.cs
- Bidi.cs
- Attribute.cs
- SqlServer2KCompatibilityCheck.cs
- FlowDocumentReaderAutomationPeer.cs
- XhtmlBasicLinkAdapter.cs
- FormatPage.cs
- CallSiteBinder.cs
- NodeCounter.cs
- ColumnResizeAdorner.cs
- ToolStripItemCollection.cs
- DetailsViewUpdatedEventArgs.cs
- ProfileModule.cs
- TreeViewDesigner.cs
- ValueType.cs
- FlowDocumentReaderAutomationPeer.cs
- DynamicValidatorEventArgs.cs
- ReaderOutput.cs
- ControllableStoryboardAction.cs
- DoubleLinkList.cs
- DataGrid.cs
- EntityDataSourceDesignerHelper.cs
- PackagePart.cs
- ConnectionManagementSection.cs
- HtmlWindowCollection.cs
- DirectionalLight.cs
- LiteralDesigner.cs
- CustomWebEventKey.cs
- SqlReorderer.cs
- PropertyTab.cs
- XComponentModel.cs
- CompilerTypeWithParams.cs
- ConvertEvent.cs
- EncoderBestFitFallback.cs
- ListViewGroupItemCollection.cs
- HttpConfigurationContext.cs
- BezierSegment.cs
- SchemaImporterExtensionElement.cs
- TextTreeTextBlock.cs
- ExceptionHandlersDesigner.cs
- CollectionDataContractAttribute.cs
- Interlocked.cs
- IdentityHolder.cs
- StringWriter.cs