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