1997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/* 2997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany 3997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 4997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 5997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * associated documentation files (the "Software"), to deal in the Software without restriction, including 6997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the 8997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * following conditions: 9997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 10997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The above copyright notice and this permission notice shall be included in all copies or substantial 11997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * portions of the Software. 12997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 13997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 14997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO 15997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 16997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 17997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * USE OR OTHER DEALINGS IN THE SOFTWARE. 18997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 19997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 20997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupackage org.ksoap2; 21997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 22997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.IOException; 23997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 24997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.ksoap2.kdom.Node; 25997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.xmlpull.v1.XmlPullParser; 26997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.xmlpull.v1.XmlPullParserException; 27997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.xmlpull.v1.XmlSerializer; 28997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 29997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/** 30997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Exception class encapsulating SOAP Faults 31997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 32997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 33997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupublic class SoapFault extends IOException { 34997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 35997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu private static final long serialVersionUID = 1011001L; 36997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** The SOAP fault code */ 37997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String faultcode; 38997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** The SOAP fault code */ 39997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String faultstring; 40997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** The SOAP fault code */ 41997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String faultactor; 42997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** A KDom Node holding the details of the fault */ 43997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Node detail; 44997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** an integer that holds current soap version */ 45997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public int version; 46997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 47997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public SoapFault() { 48997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu super(); 49997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.version = SoapEnvelope.VER11; 50997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 51997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 52997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public SoapFault(int version) { 53997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu super(); 54997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.version = version; 55997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 56997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 57997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** Fills the fault details from the given XML stream */ 58997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void parse(XmlPullParser parser) throws IOException, XmlPullParserException { 59997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parser.require(XmlPullParser.START_TAG, SoapEnvelope.ENV, "Fault"); 60997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu while (parser.nextTag() == XmlPullParser.START_TAG) { 61997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu String name = parser.getName(); 62997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (name.equals("detail")) { 63997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu detail = new Node(); 64997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu detail.parse(parser); 65997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // Handle case '...<detail/></soap:Fault>' 66997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (parser.getNamespace().equals(SoapEnvelope.ENV) 67997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu && parser.getName().equals("Fault")) { 68997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu break; 69997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 70997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu continue; 71997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else if (name.equals("faultcode")) { 72997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu faultcode = parser.nextText(); 73997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else if (name.equals("faultstring")) { 74997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu faultstring = parser.nextText(); 75997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else if (name.equals("faultactor")) { 76997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu faultactor = parser.nextText(); 77997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else { 78997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu throw new RuntimeException("unexpected tag:" + name); 79997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 80997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parser.require(XmlPullParser.END_TAG, null, name); 81997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 82997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parser.require(XmlPullParser.END_TAG, SoapEnvelope.ENV, "Fault"); 83997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parser.nextTag(); 84997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 85997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 86997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** Writes the fault to the given XML stream */ 87997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void write(XmlSerializer xw) throws IOException { 88997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.startTag(SoapEnvelope.ENV, "Fault"); 89997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.startTag(null, "faultcode"); 90997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.text("" + faultcode); 91997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.endTag(null, "faultcode"); 92997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.startTag(null, "faultstring"); 93997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.text("" + faultstring); 94997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.endTag(null, "faultstring"); 95997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.startTag(null, "detail"); 96997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (detail != null) { 97997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu detail.write(xw); 98997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 99997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.endTag(null, "detail"); 100997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.endTag(SoapEnvelope.ENV, "Fault"); 101997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 102997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 103997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 104997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @see java.lang.Throwable#getMessage() 105997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 106997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String getMessage() { 107997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return faultstring; 108997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 109997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 110997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** Returns a simple string representation of the fault */ 111997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String toString() { 112997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return "SoapFault - faultcode: '" + faultcode + "' faultstring: '" 113997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu + faultstring + "' faultactor: '" + faultactor + "' detail: " + 114997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu detail; 115997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 116997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu} 117