Code:
/ 4.0 / 4.0 / 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. //---------------------------------------------------------------------- //// 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
- WinInetCache.cs
- SmtpNegotiateAuthenticationModule.cs
- ListChangedEventArgs.cs
- PinnedBufferMemoryStream.cs
- Site.cs
- KnownTypeAttribute.cs
- BCryptHashAlgorithm.cs
- FixedSOMPage.cs
- TriggerCollection.cs
- QuinticEase.cs
- SHA512CryptoServiceProvider.cs
- DocumentReference.cs
- Cursor.cs
- BindingCompleteEventArgs.cs
- AnnotationResourceCollection.cs
- TextEditorLists.cs
- XPathNode.cs
- HtmlShimManager.cs
- DBDataPermission.cs
- Freezable.cs
- PrtTicket_Public_Simple.cs
- Tool.cs
- CssClassPropertyAttribute.cs
- XmlSchemaObjectCollection.cs
- OverflowException.cs
- AspNetHostingPermission.cs
- SafeArchiveContext.cs
- TraceFilter.cs
- BufferedStream.cs
- ThreadStaticAttribute.cs
- ScriptServiceAttribute.cs
- ResourceDefaultValueAttribute.cs
- XPathMultyIterator.cs
- WorkflowTransactionService.cs
- CollectionViewSource.cs
- APCustomTypeDescriptor.cs
- CodeDirectionExpression.cs
- NotifyInputEventArgs.cs
- AmbiguousMatchException.cs
- validation.cs
- DecimalAnimationBase.cs
- HostingEnvironment.cs
- ObjectAnimationBase.cs
- DeclaredTypeValidator.cs
- UIPermission.cs
- ShortcutKeysEditor.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- StyleHelper.cs
- RewritingPass.cs
- DataGridTextBoxColumn.cs
- CodeTypeParameter.cs
- MailDefinitionBodyFileNameEditor.cs
- RuntimeResourceSet.cs
- UInt32.cs
- OdbcParameterCollection.cs
- FieldToken.cs
- EntityDesignPluralizationHandler.cs
- KeysConverter.cs
- ToolStripSeparator.cs
- RadioButtonFlatAdapter.cs
- CollectionViewGroupInternal.cs
- SelfIssuedAuthRSAPKCS1SignatureDeformatter.cs
- MouseDevice.cs
- GlyphRun.cs
- FontInfo.cs
- DataGridCommandEventArgs.cs
- EmptyElement.cs
- CodeEventReferenceExpression.cs
- DataGridViewComponentPropertyGridSite.cs
- ConnectionManagementElement.cs
- DataGridTable.cs
- SQLUtility.cs
- DataSourceCacheDurationConverter.cs
- BatchStream.cs
- DocumentGridContextMenu.cs
- MetadataArtifactLoaderFile.cs
- ResourceProviderFactory.cs
- QilUnary.cs
- MergeFailedEvent.cs
- RepeaterItemCollection.cs
- ArglessEventHandlerProxy.cs
- TextSimpleMarkerProperties.cs
- QilXmlWriter.cs
- AddInBase.cs
- QilXmlReader.cs
- EpmContentDeSerializer.cs
- SqlDataRecord.cs
- PageContentCollection.cs
- UIElement.cs
- ImportCatalogPart.cs
- ToolStripContainerActionList.cs
- EntityViewGenerationConstants.cs
- RelationshipEntry.cs
- StreamInfo.cs
- SpellerHighlightLayer.cs
- XmlnsDefinitionAttribute.cs
- TextPatternIdentifiers.cs
- ProcessHost.cs
- Rotation3DKeyFrameCollection.cs
- BinaryNode.cs