blob: 5667cb451d3998e2bd248a2055965952e0af586e [file] [log] [blame]
/*
* Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany
*
* Copyright (c) 2011, Petter Uvesten, Everichon AB, Sweden
*
* 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 1.2 Faults
*
* see http://www.w3.org/TR/soap12-part1/#soapfault for explanation of fields
*
* @author Petter Uvesten
*/
public class SoapFault12 extends SoapFault {
private static final long serialVersionUID = 1012001L;
/** Top-level nodes */
public Node Code;
public Node Reason;
public Node Node;
public Node Role;
public Node Detail;
public SoapFault12() {
super();
this.version = SoapEnvelope.VER12;
}
public SoapFault12(int version) {
super();
this.version = version;
}
/** Fills the fault details from the given XML stream */
public void parse(XmlPullParser parser) throws IOException, XmlPullParserException
{
parseSelf(parser);
// done parsing, populate some of the legacy public members
this.faultcode = Code.getElement(SoapEnvelope.ENV2003, "Value").getText(0);
this.faultstring = Reason.getElement(SoapEnvelope.ENV2003, "Text").getText(0);
this.detail = this.Detail;
this.faultactor = null;
}
private void parseSelf(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, SoapEnvelope.ENV2003, "Fault");
while (parser.nextTag() == XmlPullParser.START_TAG) {
String name = parser.getName();
parser.nextTag();
if (name.equals("Code")) {
this.Code = new Node();
this.Code.parse(parser);
} else if (name.equals("Reason")) {
this.Reason = new Node();
this.Reason.parse(parser);
} else if (name.equals("Node")) {
this.Node = new Node();
this.Node.parse(parser);
} else if (name.equals("Role")) {
this.Role = new Node();
this.Role.parse(parser);
} else if (name.equals("Detail")) {
this.Detail = new Node();
this.Detail.parse(parser);
} else {
throw new RuntimeException("unexpected tag:" + name);
}
parser.require(XmlPullParser.END_TAG, SoapEnvelope.ENV2003, name);
}
parser.require(XmlPullParser.END_TAG, SoapEnvelope.ENV2003, "Fault");
parser.nextTag();
}
/** Writes the fault to the given XML stream */
public void write(XmlSerializer xw) throws IOException
{
xw.startTag(SoapEnvelope.ENV2003, "Fault");
//this.Code.write(xw);
xw.startTag(SoapEnvelope.ENV2003, "Code");
this.Code.write(xw);
xw.endTag(SoapEnvelope.ENV2003, "Code");
xw.startTag(SoapEnvelope.ENV2003, "Reason");
this.Reason.write(xw);
xw.endTag(SoapEnvelope.ENV2003, "Reason");
if (this.Node != null) {
xw.startTag(SoapEnvelope.ENV2003, "Node");
this.Node.write(xw);
xw.endTag(SoapEnvelope.ENV2003, "Node");
}
if (this.Role != null) {
xw.startTag(SoapEnvelope.ENV2003, "Role");
this.Role.write(xw);
xw.endTag(SoapEnvelope.ENV2003, "Role");
}
if (this.Detail != null) {
xw.startTag(SoapEnvelope.ENV2003, "Detail");
this.Detail.write(xw);
xw.endTag(SoapEnvelope.ENV2003, "Detail");
}
xw.endTag(SoapEnvelope.ENV2003, "Fault");
}
/**
* @see java.lang.Throwable#getMessage()
*/
public String getMessage() {
return Reason.getElement(SoapEnvelope.ENV2003, "Text").getText(0);
}
/** Returns a string representation of the fault */
public String toString() {
String reason = Reason.getElement(SoapEnvelope.ENV2003, "Text").getText(0);
String code = Code.getElement(SoapEnvelope.ENV2003, "Value").getText(0);
return "Code: " + code + ", Reason: " + reason;
}
}