1997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/* 2997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany 3997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 4997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Copyright (c) 2011, Petter Uvesten, Everichon AB, Sweden 5997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 6997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 7997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * associated documentation files (the "Software"), to deal in the Software without restriction, including 8997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the 10997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * following conditions: 11997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 12997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The above copyright notice and this permission notice shall be included in all copies or substantial 13997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * portions of the Software. 14997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 15997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 16997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO 17997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 18997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 19997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * USE OR OTHER DEALINGS IN THE SOFTWARE. 20997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 21997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 22997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupackage org.ksoap2; 23997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 24997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.IOException; 25997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 26997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.ksoap2.kdom.Node; 27997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.xmlpull.v1.XmlPullParser; 28997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.xmlpull.v1.XmlPullParserException; 29997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.xmlpull.v1.XmlSerializer; 30997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 31997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/** 32997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Exception class encapsulating SOAP 1.2 Faults 33997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 34997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * see http://www.w3.org/TR/soap12-part1/#soapfault for explanation of fields 35997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 36997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @author Petter Uvesten 37997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 38997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 39997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupublic class SoapFault12 extends SoapFault { 40997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu private static final long serialVersionUID = 1012001L; 41997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 42997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** Top-level nodes */ 43997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Node Code; 44997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Node Reason; 45997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Node Node; 46997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Node Role; 47997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Node Detail; 48997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 49997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public SoapFault12() { 50997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu super(); 51997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.version = SoapEnvelope.VER12; 52997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 53997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 54997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public SoapFault12(int version) { 55997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu super(); 56997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.version = version; 57997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 58997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 59997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** Fills the fault details from the given XML stream */ 60997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void parse(XmlPullParser parser) throws IOException, XmlPullParserException 61997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 62997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parseSelf(parser); 63997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // done parsing, populate some of the legacy public members 64997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.faultcode = Code.getElement(SoapEnvelope.ENV2003, "Value").getText(0); 65997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.faultstring = Reason.getElement(SoapEnvelope.ENV2003, "Text").getText(0); 66997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.detail = this.Detail; 67997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.faultactor = null; 68997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 69997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 70997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu private void parseSelf(XmlPullParser parser) throws IOException, XmlPullParserException { 71997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parser.require(XmlPullParser.START_TAG, SoapEnvelope.ENV2003, "Fault"); 72997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 73997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu while (parser.nextTag() == XmlPullParser.START_TAG) { 74997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu String name = parser.getName(); 75997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parser.nextTag(); 76997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (name.equals("Code")) { 77997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Code = new Node(); 78997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Code.parse(parser); 79997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else if (name.equals("Reason")) { 80997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Reason = new Node(); 81997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Reason.parse(parser); 82997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else if (name.equals("Node")) { 83997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Node = new Node(); 84997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Node.parse(parser); 85997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else if (name.equals("Role")) { 86997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Role = new Node(); 87997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Role.parse(parser); 88997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else if (name.equals("Detail")) { 89997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Detail = new Node(); 90997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Detail.parse(parser); 91997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else { 92997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu throw new RuntimeException("unexpected tag:" + name); 93997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 94997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 95997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parser.require(XmlPullParser.END_TAG, SoapEnvelope.ENV2003, name); 96997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 97997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parser.require(XmlPullParser.END_TAG, SoapEnvelope.ENV2003, "Fault"); 98997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parser.nextTag(); 99997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 100997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 101997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 102997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** Writes the fault to the given XML stream */ 103997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void write(XmlSerializer xw) throws IOException 104997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 105997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.startTag(SoapEnvelope.ENV2003, "Fault"); 106997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu //this.Code.write(xw); 107997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 108997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.startTag(SoapEnvelope.ENV2003, "Code"); 109997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Code.write(xw); 110997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.endTag(SoapEnvelope.ENV2003, "Code"); 111997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.startTag(SoapEnvelope.ENV2003, "Reason"); 112997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Reason.write(xw); 113997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.endTag(SoapEnvelope.ENV2003, "Reason"); 114997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 115997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (this.Node != null) { 116997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.startTag(SoapEnvelope.ENV2003, "Node"); 117997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Node.write(xw); 118997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.endTag(SoapEnvelope.ENV2003, "Node"); 119997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 120997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (this.Role != null) { 121997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.startTag(SoapEnvelope.ENV2003, "Role"); 122997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Role.write(xw); 123997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.endTag(SoapEnvelope.ENV2003, "Role"); 124997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 125997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 126997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (this.Detail != null) { 127997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.startTag(SoapEnvelope.ENV2003, "Detail"); 128997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.Detail.write(xw); 129997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.endTag(SoapEnvelope.ENV2003, "Detail"); 130997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 131997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.endTag(SoapEnvelope.ENV2003, "Fault"); 132997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 133997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 134997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 135997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @see java.lang.Throwable#getMessage() 136997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 137997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String getMessage() { 138997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return Reason.getElement(SoapEnvelope.ENV2003, "Text").getText(0); 139997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 140997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 141997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** Returns a string representation of the fault */ 142997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String toString() { 143997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu String reason = Reason.getElement(SoapEnvelope.ENV2003, "Text").getText(0); 144997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu String code = Code.getElement(SoapEnvelope.ENV2003, "Value").getText(0); 145997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return "Code: " + code + ", Reason: " + reason; 146997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 147997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu} 148