/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ using System; using System.Collections.Generic; using System.Net; using System.Text; namespace Amazon.Runtime { /// /// This exception is thrown when there is a parse error on the response back from AWS. /// #if !NETSTANDARD [Serializable] #endif public class AmazonUnmarshallingException : AmazonServiceException { #region Constructors public AmazonUnmarshallingException(string requestId, string lastKnownLocation, Exception innerException) : base("Error unmarshalling response back from AWS.", innerException) { this.RequestId = requestId; this.LastKnownLocation = lastKnownLocation; } public AmazonUnmarshallingException(string requestId, string lastKnownLocation, string responseBody, Exception innerException) : base("Error unmarshalling response back from AWS.", innerException) { this.RequestId = requestId; this.LastKnownLocation = lastKnownLocation; this.ResponseBody = responseBody; } public AmazonUnmarshallingException(string requestId, string lastKnownLocation, string responseBody, string message, Exception innerException) : base("Error unmarshalling response back from AWS. " + message, innerException) { this.RequestId = requestId; this.LastKnownLocation = lastKnownLocation; this.ResponseBody = responseBody; } public AmazonUnmarshallingException(string requestId, string lastKnownLocation, Exception innerException, HttpStatusCode statusCode) : base("Error unmarshalling response back from AWS.", innerException, statusCode) { this.RequestId = requestId; this.LastKnownLocation = lastKnownLocation; } public AmazonUnmarshallingException(string requestId, string lastKnownLocation, string responseBody, Exception innerException, HttpStatusCode statusCode) : base("Error unmarshalling response back from AWS.", innerException, statusCode) { this.RequestId = requestId; this.LastKnownLocation = lastKnownLocation; this.ResponseBody = responseBody; } #endregion #region Public properties /// /// Last known location in the response that was parsed, if available. /// public string LastKnownLocation { get; private set; } /// /// The entire response body that caused this exception, if available. /// public string ResponseBody { get; private set; } #endregion #region Overrides public override string Message { get { StringBuilder sb = new StringBuilder(); AppendFormat(sb, "Request ID: {0}", this.RequestId); AppendFormat(sb, "Response Body: {0}", this.ResponseBody); AppendFormat(sb, "Last Parsed Path: {0}", this.LastKnownLocation); AppendFormat(sb, "HTTP Status Code: {0}", (int)(this.StatusCode) + " " + this.StatusCode.ToString()); var partialMessage = sb.ToString(); return base.Message + " " + partialMessage; } } #endregion #region Private methods private static void AppendFormat(StringBuilder sb, string format, string value) { if (string.IsNullOrEmpty(value)) return; if (sb.Length > 0) sb.Append(", "); sb.AppendFormat(format, value); } #endregion #if !NETSTANDARD /// /// Constructs a new instance of the AmazonSimpleDBException class with serialized data. /// /// The that holds the serialized object data about the exception being thrown. /// The that contains contextual information about the source or destination. /// The parameter is null. /// The class name is null or is zero (0). protected AmazonUnmarshallingException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { if (info != null) { this.LastKnownLocation = info.GetString("LastKnownLocation"); this.ResponseBody = info.GetString("ResponseBody"); } } /// /// Sets the with information about the exception. /// /// The that holds the serialized object data about the exception being thrown. /// The that contains contextual information about the source or destination. /// The parameter is a null reference (Nothing in Visual Basic). #if BCL35 [System.Security.Permissions.SecurityPermission( System.Security.Permissions.SecurityAction.LinkDemand, Flags = System.Security.Permissions.SecurityPermissionFlag.SerializationFormatter)] #endif [System.Security.SecurityCritical] // These FxCop rules are giving false-positives for this method [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2134:MethodsMustOverrideWithConsistentTransparencyFxCopRule")] public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) { base.GetObjectData(info, context); if (info != null) { info.AddValue("LastKnownLocation", this.LastKnownLocation); info.AddValue("ResponseBody", this.ResponseBody); } } #endif } }