KickJava   Java API By Example, From Geeks To Geeks.

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


1 package org.objectweb.celtix.bus.jaxws.io;
2
3 import java.io.ByteArrayInputStream JavaDoc;
4 import java.io.ByteArrayOutputStream JavaDoc;
5 import java.io.InputStream JavaDoc;
6
7 import javax.xml.bind.JAXBContext;
8 import javax.xml.bind.Unmarshaller;
9 import javax.xml.namespace.QName JavaDoc;
10 import javax.xml.soap.SOAPBody JavaDoc;
11 import javax.xml.transform.Source JavaDoc;
12 import javax.xml.transform.dom.DOMSource JavaDoc;
13 import javax.xml.transform.sax.SAXSource JavaDoc;
14 import javax.xml.transform.stream.StreamSource JavaDoc;
15
16 import org.w3c.dom.Document JavaDoc;
17 import org.w3c.dom.bootstrap.DOMImplementationRegistry JavaDoc;
18 import org.w3c.dom.ls.DOMImplementationLS JavaDoc;
19 import org.w3c.dom.ls.LSOutput JavaDoc;
20 import org.w3c.dom.ls.LSSerializer JavaDoc;
21
22 import org.xml.sax.InputSource JavaDoc;
23
24 import org.objectweb.celtix.bindings.DataReader;
25 import org.objectweb.celtix.bus.jaxws.DynamicDataBindingCallback;
26 import org.objectweb.celtix.context.ObjectMessageContext;
27
28 public class SOAPBodyDataReader<T> implements DataReader<T> {
29     
30     final DynamicDataBindingCallback callback;
31
32     public SOAPBodyDataReader(DynamicDataBindingCallback cb) {
33         callback = cb;
34     }
35
36     public Object JavaDoc read(int idx, T input) {
37         Source JavaDoc obj = null;
38         SOAPBody JavaDoc src = (SOAPBody JavaDoc)input;
39         try {
40             Document JavaDoc doc = src.extractContentAsDocument();
41             assert doc != null;
42     
43             if (DOMSource JavaDoc.class.isAssignableFrom(callback.getSupportedFormats()[0])) {
44                 obj = new DOMSource JavaDoc();
45                 ((DOMSource JavaDoc)obj).setNode(doc);
46             } else if (SAXSource JavaDoc.class.isAssignableFrom(callback.getSupportedFormats()[0])) {
47                 InputSource JavaDoc inputSource = new InputSource JavaDoc(getSOAPBodyStream(doc));
48                 obj = new SAXSource JavaDoc(inputSource);
49             } else if (StreamSource JavaDoc.class.isAssignableFrom(callback.getSupportedFormats()[0])) {
50                 obj = new StreamSource JavaDoc(getSOAPBodyStream(doc));
51             } else if (Object JavaDoc.class.isAssignableFrom(callback.getSupportedFormats()[0])) {
52                 JAXBContext context = callback.getJAXBContext();
53                 Unmarshaller u = context.createUnmarshaller();
54                 return u.unmarshal(doc);
55             }
56         } catch (Exception JavaDoc se) {
57             se.printStackTrace();
58         }
59         return obj;
60     }
61
62     public Object JavaDoc read(QName JavaDoc name, int idx, T input) {
63         //Complete
64
return null;
65     }
66     
67     public void readWrapper(ObjectMessageContext objCtx, boolean isOutBound, T input) {
68         //Complete
69
}
70     
71     private InputStream JavaDoc getSOAPBodyStream(Document JavaDoc doc) throws Exception JavaDoc {
72         System.setProperty(DOMImplementationRegistry.PROPERTY,
73             "com.sun.org.apache.xerces.internal.dom.DOMImplementationSourceImpl");
74         DOMImplementationRegistry JavaDoc registry = DOMImplementationRegistry.newInstance();
75         DOMImplementationLS JavaDoc impl = (DOMImplementationLS JavaDoc)registry.getDOMImplementation("LS");
76         LSOutput JavaDoc output = impl.createLSOutput();
77         ByteArrayOutputStream JavaDoc byteArrayOutputStream = new ByteArrayOutputStream JavaDoc();
78         output.setByteStream(byteArrayOutputStream);
79         LSSerializer JavaDoc writer = impl.createLSSerializer();
80         writer.write(doc, output);
81         byte[] buf = byteArrayOutputStream.toByteArray();
82         return new ByteArrayInputStream JavaDoc(buf);
83     }
84
85 }
86
Popular Tags