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