1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs2.provider.webdav4;
18
19 import java.lang.reflect.Constructor;
20
21 import org.apache.commons.vfs2.FileSystemException;
22 import org.apache.jackrabbit.webdav.DavConstants;
23 import org.apache.jackrabbit.webdav.DavException;
24 import org.apache.jackrabbit.webdav.xml.DomUtil;
25 import org.w3c.dom.Element;
26
27
28
29
30
31
32 public final class ExceptionConverter {
33
34
35 private ExceptionConverter() {
36 }
37
38 public static FileSystemException generate(final DavException davExc) throws FileSystemException {
39 String msg = davExc.getMessage();
40 if (davExc.hasErrorCondition()) {
41 try {
42 final Element error = davExc.toXml(DomUtil.createDocument());
43 if (DomUtil.matches(error, DavException.XML_ERROR, DavConstants.NAMESPACE) && DomUtil.hasChildElement(error, "exception", null)) {
44 final Element exc = DomUtil.getChildElement(error, "exception", null);
45 if (DomUtil.hasChildElement(exc, "message", null)) {
46 msg = DomUtil.getChildText(exc, "message", null);
47 }
48 if (DomUtil.hasChildElement(exc, "class", null)) {
49 final Class<?> cl = Class.forName(DomUtil.getChildText(exc, "class", null));
50 final Constructor<?> excConstr = cl.getConstructor(String.class);
51 final Object o = excConstr.newInstance(msg);
52 if (o instanceof FileSystemException) {
53 return (FileSystemException) o;
54 }
55 if (o instanceof Exception) {
56 return new FileSystemException(msg, (Exception) o);
57 }
58 }
59 }
60 } catch (final Exception e) {
61 throw new FileSystemException(e);
62 }
63 }
64
65 return new FileSystemException(msg);
66 }
67 }