01: /*
02: * hgcommons 7
03: * Hammurapi Group Common Library
04: * Copyright (C) 2003 Hammurapi Group
05: *
06: * This program is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation; either
09: * version 2 of the License, or (at your option) any later version.
10: *
11: * This program is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * Lesser General Public License for more details.
15: *
16: * You should have received a copy of the GNU Lesser General Public
17: * License along with this library; if not, write to the Free Software
18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19: *
20: * URL: http://www.hammurapi.biz/hammurapi-biz/ef/xmenu/hammurapi-group/products/products/hgcommons/index.html
21: * e-Mail: support@hammurapi.biz
22: */
23: package biz.hammurapi.xml.dom;
24:
25: import org.w3c.dom.Element;
26:
27: /**
28: * @author Pavel Vlasov
29: *
30: * @version $Revision: 1.2 $
31: */
32: public class ThrowableDomSerializer {
33:
34: public DomSerializable toDomSerializable(final Throwable th) {
35: return new DomSerializable() {
36:
37: public void toDom(Element holder) {
38: holder.appendChild(holder.getOwnerDocument()
39: .createTextNode(th.toString()));
40: if (th.getMessage() != null
41: && th.getMessage().trim().length() > 0) {
42: holder.setAttribute("message", th.getMessage());
43: }
44: holder.setAttribute("type", th.getClass().getName());
45: holder.setAttribute("is-throwable", "yes");
46: StackTraceElement[] st = th.getStackTrace();
47: for (int i = 0; i < st.length; i++) {
48: Element sfe = holder.getOwnerDocument()
49: .createElement("stack-frame");
50: holder.appendChild(sfe);
51: sfe.setAttribute("class", st[i].getClassName());
52: sfe.setAttribute("file", st[i].getFileName());
53: sfe.setAttribute("method", st[i].getMethodName());
54: sfe.setAttribute("line", String.valueOf(st[i]
55: .getLineNumber()));
56: sfe.setAttribute("native",
57: st[i].isNativeMethod() ? "yes" : "no");
58: }
59:
60: if (th.getCause() != null) {
61: Element ce = holder.getOwnerDocument()
62: .createElement("cause");
63: holder.appendChild(ce);
64: toDomSerializable(th.getCause()).toDom(ce);
65: }
66: }
67:
68: };
69: }
70: }
|