1 package org.objectweb.celtix.bus.jaxws.io; 2 3 4 5 import javax.xml.bind.JAXBContext; 6 import javax.xml.bind.Marshaller; 7 import javax.xml.namespace.QName ; 8 import javax.xml.parsers.DocumentBuilder ; 9 import javax.xml.parsers.DocumentBuilderFactory ; 10 import javax.xml.parsers.ParserConfigurationException ; 11 import javax.xml.soap.SOAPBody ; 12 import javax.xml.transform.dom.DOMResult ; 13 import javax.xml.transform.dom.DOMSource ; 14 import javax.xml.transform.sax.SAXSource ; 15 import javax.xml.transform.stream.StreamSource ; 16 17 import org.w3c.dom.Document ; 18 19 import org.objectweb.celtix.bindings.DataWriter; 20 import org.objectweb.celtix.bus.jaxws.DynamicDataBindingCallback; 21 import org.objectweb.celtix.context.ObjectMessageContext; 22 23 public class SOAPBodyDataWriter<T> implements DataWriter<T> { 24 25 protected SOAPBody dest; 26 final DynamicDataBindingCallback callback; 27 28 public SOAPBodyDataWriter(DynamicDataBindingCallback cb) { 29 callback = cb; 30 } 31 32 public void write(Object obj, T output) { 33 34 dest = (SOAPBody )output; 35 try { 36 if (DOMSource .class.isAssignableFrom(obj.getClass())) { 37 DOMSource domSource = (DOMSource )obj; 38 dest.addDocument((Document )domSource.getNode()); 39 } else if (SAXSource .class.isAssignableFrom(obj.getClass())) { 40 SAXSource saxSource = (SAXSource )obj; 41 Document doc = getDocBuilder().parse(saxSource.getInputSource()); 42 dest.addDocument(doc); 43 } else if (StreamSource .class.isAssignableFrom(obj.getClass())) { 44 StreamSource streamSource = (StreamSource )obj; 45 Document doc = getDocBuilder().parse(streamSource.getInputStream()); 46 dest.addDocument(doc); 47 } else if (Object .class.isAssignableFrom(obj.getClass())) { 48 49 JAXBContext context = callback.getJAXBContext(); 50 51 Marshaller u = context.createMarshaller(); 52 u.setProperty(Marshaller.JAXB_ENCODING , "UTF-8"); 53 u.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 54 u.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); 55 56 DOMResult domResult = new DOMResult (); 57 u.marshal(obj, domResult); 58 dest.addDocument((Document )domResult.getNode()); 59 60 } 61 } catch (Exception e) { 62 e.printStackTrace(); 64 } 65 66 } 67 68 public void write(Object obj, QName elName, T output) { 69 } 71 72 public void writeWrapper(ObjectMessageContext objCtx, boolean isOutbound, T output) { 73 } 75 76 private DocumentBuilder getDocBuilder() throws ParserConfigurationException { 77 78 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 79 dbf.setNamespaceAware(true); 80 return dbf.newDocumentBuilder(); 81 82 } 83 84 } 85 | Popular Tags |