KickJava   Java API By Example, From Geeks To Geeks.

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


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