a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
232 lines
5.8 KiB
C#
232 lines
5.8 KiB
C#
//
|
|
// System.Web.Services.Protocols.Fault.cs
|
|
//
|
|
// Author:
|
|
// Lluis Sanchez Gual (lluis@ximian.com)
|
|
//
|
|
// Copyright (C) 2004 Novell, Inc.
|
|
//
|
|
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining
|
|
// a copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
|
// permit persons to whom the Software is furnished to do so, subject to
|
|
// the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be
|
|
// included in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
using System;
|
|
using System.Xml;
|
|
using System.Xml.Schema;
|
|
using System.Xml.Serialization;
|
|
using System.Text;
|
|
using System.Collections;
|
|
using System.Globalization;
|
|
|
|
namespace System.Web.Services.Protocols
|
|
{
|
|
internal class Fault
|
|
{
|
|
static XmlSerializer serializer;
|
|
|
|
static Fault ()
|
|
{
|
|
serializer = new FaultSerializer ();
|
|
}
|
|
|
|
public Fault () {}
|
|
|
|
public Fault (SoapException ex)
|
|
{
|
|
faultcode = ex.Code;
|
|
faultstring = ex.Message;
|
|
faultactor = ex.Actor;
|
|
detail = ex.Detail;
|
|
}
|
|
|
|
[XmlElement (Namespace="")]
|
|
public XmlQualifiedName faultcode;
|
|
|
|
[XmlElement (Namespace="")]
|
|
public string faultstring;
|
|
|
|
[XmlElement (Namespace="")]
|
|
public string faultactor;
|
|
|
|
[SoapIgnore]
|
|
public XmlNode detail;
|
|
|
|
public static XmlSerializer Serializer
|
|
{
|
|
get { return serializer; }
|
|
}
|
|
}
|
|
|
|
internal class FaultSerializer : XmlSerializer
|
|
{
|
|
protected override void Serialize (object o, XmlSerializationWriter writer)
|
|
{
|
|
FaultWriter xsWriter = writer as FaultWriter;
|
|
xsWriter.WriteRoot_Fault (o);
|
|
}
|
|
|
|
protected override object Deserialize (XmlSerializationReader reader)
|
|
{
|
|
FaultReader xsReader = reader as FaultReader;
|
|
return xsReader.ReadRoot_Fault ();
|
|
}
|
|
|
|
protected override XmlSerializationWriter CreateWriter ()
|
|
{
|
|
return new FaultWriter ();
|
|
}
|
|
|
|
protected override XmlSerializationReader CreateReader ()
|
|
{
|
|
return new FaultReader ();
|
|
}
|
|
}
|
|
|
|
internal class FaultReader : XmlSerializationReader
|
|
{
|
|
public object ReadRoot_Fault ()
|
|
{
|
|
Reader.MoveToContent();
|
|
if (Reader.LocalName != "Fault" || Reader.NamespaceURI != WebServiceHelper.SoapEnvelopeNamespace)
|
|
throw CreateUnknownNodeException();
|
|
return ReadObject_Fault (true, true);
|
|
}
|
|
|
|
public System.Web.Services.Protocols.Fault ReadObject_Fault (bool isNullable, bool checkType)
|
|
{
|
|
System.Web.Services.Protocols.Fault ob = null;
|
|
if (isNullable && ReadNull()) return null;
|
|
|
|
if (checkType)
|
|
{
|
|
System.Xml.XmlQualifiedName t = GetXsiType();
|
|
if (t != null)
|
|
{
|
|
if (t.Name != "Fault" || t.Namespace != WebServiceHelper.SoapEnvelopeNamespace)
|
|
throw CreateUnknownTypeException(t);
|
|
}
|
|
}
|
|
|
|
ob = new System.Web.Services.Protocols.Fault ();
|
|
|
|
Reader.MoveToElement();
|
|
|
|
while (Reader.MoveToNextAttribute())
|
|
{
|
|
if (IsXmlnsAttribute (Reader.Name)) {
|
|
}
|
|
else {
|
|
UnknownNode (ob);
|
|
}
|
|
}
|
|
|
|
Reader.MoveToElement();
|
|
if (Reader.IsEmptyElement) {
|
|
Reader.Skip ();
|
|
return ob;
|
|
}
|
|
|
|
Reader.ReadStartElement();
|
|
Reader.MoveToContent();
|
|
|
|
bool b0=false, b1=false, b2=false, b3=false;
|
|
|
|
while (Reader.NodeType != System.Xml.XmlNodeType.EndElement)
|
|
{
|
|
if (Reader.NodeType == System.Xml.XmlNodeType.Element) {
|
|
if (Reader.NamespaceURI == string.Empty || Reader.NamespaceURI == WebServiceHelper.SoapEnvelopeNamespace) {
|
|
if (Reader.LocalName == "faultcode" && !b0) {
|
|
b0 = true;
|
|
ob.@faultcode = ReadElementQualifiedName ();
|
|
} else if (Reader.LocalName == "faultstring" && !b1) {
|
|
b1 = true;
|
|
ob.@faultstring = Reader.ReadElementString ();
|
|
} else if (Reader.LocalName == "detail" && !b3) {
|
|
b3 = true;
|
|
ob.@detail = ReadXmlNode (false);
|
|
} else if (Reader.LocalName == "faultactor" && !b2) {
|
|
b2 = true;
|
|
ob.@faultactor = Reader.ReadElementString ();
|
|
} else {
|
|
UnknownNode (ob);
|
|
}
|
|
} else {
|
|
UnknownNode (ob);
|
|
}
|
|
} else
|
|
UnknownNode(ob);
|
|
|
|
Reader.MoveToContent();
|
|
}
|
|
|
|
ReadEndElement();
|
|
|
|
return ob;
|
|
}
|
|
|
|
protected override void InitCallbacks ()
|
|
{
|
|
}
|
|
|
|
protected override void InitIDs ()
|
|
{
|
|
}
|
|
}
|
|
|
|
internal class FaultWriter : XmlSerializationWriter
|
|
{
|
|
public void WriteRoot_Fault (object o)
|
|
{
|
|
WriteStartDocument ();
|
|
System.Web.Services.Protocols.Fault ob = (System.Web.Services.Protocols.Fault) o;
|
|
TopLevelElement ();
|
|
WriteObject_Fault (ob, "Fault", WebServiceHelper.SoapEnvelopeNamespace, true, false, true);
|
|
}
|
|
|
|
void WriteObject_Fault (System.Web.Services.Protocols.Fault ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
|
|
{
|
|
if (ob == null)
|
|
{
|
|
if (isNullable)
|
|
WriteNullTagLiteral(element, namesp);
|
|
return;
|
|
}
|
|
|
|
if (writeWrappingElem) {
|
|
WriteStartElement (element, namesp, ob);
|
|
}
|
|
|
|
if (needType) WriteXsiType ("Fault", WebServiceHelper.SoapEnvelopeNamespace);
|
|
|
|
WriteElementQualifiedName ("faultcode", "", ob.@faultcode);
|
|
WriteElementString ("faultstring", "", ob.@faultstring);
|
|
WriteElementString ("faultactor", "", ob.@faultactor);
|
|
WriteElementLiteral (ob.@detail, "detail", "", false, false);
|
|
if (writeWrappingElem) WriteEndElement (ob);
|
|
}
|
|
|
|
protected override void InitCallbacks ()
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|