KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > bus > jaxws > io > SOAPFaultDataReader


1 package org.objectweb.celtix.bus.jaxws.io;
2
3
4 import java.lang.reflect.Constructor JavaDoc;
5
6 import javax.xml.namespace.QName JavaDoc;
7 import javax.xml.soap.SOAPFault JavaDoc;
8 import javax.xml.ws.WebServiceException;
9 import javax.xml.ws.soap.SOAPFaultException;
10
11 import org.w3c.dom.Node JavaDoc;
12 import org.w3c.dom.NodeList JavaDoc;
13
14
15 import org.objectweb.celtix.bindings.DataReader;
16 import org.objectweb.celtix.bus.jaxws.JAXBDataBindingCallback;
17 import org.objectweb.celtix.bus.jaxws.JAXBEncoderDecoder;
18 import org.objectweb.celtix.context.ObjectMessageContext;
19
20 public class SOAPFaultDataReader<T> implements DataReader<T> {
21     final JAXBDataBindingCallback callback;
22     
23     public SOAPFaultDataReader(JAXBDataBindingCallback cb) {
24         callback = cb;
25     }
26     public Object JavaDoc read(QName JavaDoc name, int idx, T input) {
27         SOAPFault JavaDoc fault = (SOAPFault JavaDoc)input;
28         if (fault.getDetail() != null) {
29             NodeList JavaDoc list = fault.getDetail().getChildNodes();
30
31             QName JavaDoc faultName;
32             for (int i = 0; i < list.getLength(); i++) {
33                 Node JavaDoc entry = list.item(i);
34                 if (entry.getNodeType() != Node.ELEMENT_NODE) {
35                     continue;
36                 }
37                 
38                 faultName = new QName JavaDoc(entry.getNamespaceURI(),
39                                       entry.getLocalName());
40         
41                 Class JavaDoc<?> clazz = callback.getWebFault(faultName);
42                 try {
43                     if (clazz != null) {
44                         Class JavaDoc<?> faultInfo = clazz.getMethod("getFaultInfo").getReturnType();
45                         Object JavaDoc obj = JAXBEncoderDecoder.unmarshall(callback.getJAXBContext(),
46                                                                    callback.getSchema(),
47                                                                    entry,
48                                                                    faultName,
49                                                                    faultInfo);
50                         Constructor JavaDoc<?> ctor = clazz.getConstructor(String JavaDoc.class,
51                                                                    obj.getClass());
52                         return ctor.newInstance(fault.getFaultString(), obj);
53                     }
54                 } catch (Exception JavaDoc ex) {
55                     throw new WebServiceException("error in unmarshal of SOAPFault", ex);
56                 }
57             }
58         }
59         return new SOAPFaultException(fault);
60     }
61
62     public Object JavaDoc read(int idx, T input) {
63         return read(null, idx, input);
64     }
65
66     public void readWrapper(ObjectMessageContext objCtx, boolean isOutBound, T input) {
67         throw new UnsupportedOperationException JavaDoc();
68     }
69 }
70
Popular Tags