blob: e410954a0c9510b5c63f95d0b1b7131881e06bc7 [file] [log] [blame]
/*
* Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany
*
* 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.
*/
package org.ksoap2;
import java.io.IOException;
import org.ksoap2.kdom.Node;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
/**
* Exception class encapsulating SOAP Faults
*/
public class SoapFault extends IOException {
private static final long serialVersionUID = 1011001L;
/** The SOAP fault code */
public String faultcode;
/** The SOAP fault code */
public String faultstring;
/** The SOAP fault code */
public String faultactor;
/** A KDom Node holding the details of the fault */
public Node detail;
/** an integer that holds current soap version */
public int version;
public SoapFault() {
super();
this.version = SoapEnvelope.VER11;
}
public SoapFault(int version) {
super();
this.version = version;
}
/** Fills the fault details from the given XML stream */
public void parse(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, SoapEnvelope.ENV, "Fault");
while (parser.nextTag() == XmlPullParser.START_TAG) {
String name = parser.getName();
if (name.equals("detail")) {
detail = new Node();
detail.parse(parser);
// Handle case '...<detail/></soap:Fault>'
if (parser.getNamespace().equals(SoapEnvelope.ENV)
&& parser.getName().equals("Fault")) {
break;
}
continue;
} else if (name.equals("faultcode")) {
faultcode = parser.nextText();
} else if (name.equals("faultstring")) {
faultstring = parser.nextText();
} else if (name.equals("faultactor")) {
faultactor = parser.nextText();
} else {
throw new RuntimeException("unexpected tag:" + name);
}
parser.require(XmlPullParser.END_TAG, null, name);
}
parser.require(XmlPullParser.END_TAG, SoapEnvelope.ENV, "Fault");
parser.nextTag();
}
/** Writes the fault to the given XML stream */
public void write(XmlSerializer xw) throws IOException {
xw.startTag(SoapEnvelope.ENV, "Fault");
xw.startTag(null, "faultcode");
xw.text("" + faultcode);
xw.endTag(null, "faultcode");
xw.startTag(null, "faultstring");
xw.text("" + faultstring);
xw.endTag(null, "faultstring");
xw.startTag(null, "detail");
if (detail != null) {
detail.write(xw);
}
xw.endTag(null, "detail");
xw.endTag(SoapEnvelope.ENV, "Fault");
}
/**
* @see java.lang.Throwable#getMessage()
*/
public String getMessage() {
return faultstring;
}
/** Returns a simple string representation of the fault */
public String toString() {
return "SoapFault - faultcode: '" + faultcode + "' faultstring: '"
+ faultstring + "' faultactor: '" + faultactor + "' detail: " +
detail;
}
}