1 package org.objectweb.celtix.systest.provider; 2 3 import java.io.ByteArrayInputStream ; 4 import java.io.ByteArrayOutputStream ; 5 import java.io.InputStream ; 6 7 import javax.xml.namespace.QName ; 8 import javax.xml.soap.MessageFactory ; 9 import javax.xml.transform.Transformer ; 10 import javax.xml.transform.TransformerFactory ; 11 import javax.xml.transform.dom.DOMResult ; 12 import javax.xml.transform.stream.StreamSource ; 13 import javax.xml.ws.Provider; 14 import javax.xml.ws.Service; 15 import javax.xml.ws.ServiceMode; 16 import javax.xml.ws.WebServiceProvider; 17 18 import org.w3c.dom.Document ; 19 import org.w3c.dom.Node ; 20 import org.w3c.dom.bootstrap.DOMImplementationRegistry ; 21 import org.w3c.dom.ls.DOMImplementationLS ; 22 import org.w3c.dom.ls.LSOutput ; 23 import org.w3c.dom.ls.LSSerializer ; 24 25 26 27 @WebServiceProvider(portName = "SoapPortRPCLit6", serviceName = "SOAPServiceRPCLit6", 30 targetNamespace = "http://objectweb.org/hello_world_rpclit", 31 wsdlLocation = "/wsdl/hello_world_rpc_lit.wsdl") 32 @ServiceMode(value = Service.Mode.PAYLOAD) 33 public class HWStreamSourcePayloadProvider implements Provider<StreamSource > { 34 35 private static QName sayHi = new QName ("http://objectweb.org/hello_world_rpclit", "sayHi"); 36 private static QName greetMe = new QName ("http://objectweb.org/hello_world_rpclit", "greetMe"); 37 private InputStream sayHiInputStream; 38 private InputStream greetMeInputStream; 39 private MessageFactory factory; 40 41 public HWStreamSourcePayloadProvider() { 42 43 try { 44 factory = MessageFactory.newInstance(); 45 InputStream is = getClass().getResourceAsStream("resources/sayHiRpcLiteralResp.xml"); 46 Document sayHiDocument = factory.createMessage(null, is).getSOAPBody().extractContentAsDocument(); 47 sayHiInputStream = getSOAPBodyStream(sayHiDocument); 48 49 InputStream is2 = getClass().getResourceAsStream("resources/GreetMeRpcLiteralResp.xml"); 50 Document greetMeDocument = 51 factory.createMessage(null, is2).getSOAPBody().extractContentAsDocument(); 52 greetMeInputStream = getSOAPBodyStream(greetMeDocument); 53 54 } catch (Exception ex) { 55 ex.printStackTrace(); 56 } 57 } 58 59 public StreamSource invoke(StreamSource request) { 60 StreamSource response = new StreamSource (); 61 try { 62 DOMResult domResult = new DOMResult (); 63 Transformer transformer = TransformerFactory.newInstance().newTransformer(); 64 transformer.transform(request, domResult); 65 Node n = domResult.getNode().getFirstChild(); 66 67 while (n.getNodeType() != Node.ELEMENT_NODE) { 68 n = n.getNextSibling(); 69 } 70 if (n.getLocalName().equals(sayHi.getLocalPart())) { 71 response.setInputStream(sayHiInputStream); 72 } else if (n.getLocalName().equals(greetMe.getLocalPart())) { 73 response.setInputStream(greetMeInputStream); 74 } 75 } catch (Exception ex) { 76 ex.printStackTrace(); 77 } 78 return response; 79 } 80 81 private InputStream getSOAPBodyStream(Document doc) throws Exception { 82 System.setProperty(DOMImplementationRegistry.PROPERTY, 83 "com.sun.org.apache.xerces.internal.dom.DOMImplementationSourceImpl"); 84 DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance(); 85 DOMImplementationLS impl = (DOMImplementationLS )registry.getDOMImplementation("LS"); 86 LSOutput output = impl.createLSOutput(); 87 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream (); 88 output.setByteStream(byteArrayOutputStream); 89 LSSerializer writer = impl.createLSSerializer(); 90 writer.write(doc, output); 91 byte[] buf = byteArrayOutputStream.toByteArray(); 92 return new ByteArrayInputStream (buf); 93 } 94 95 96 } 97 | Popular Tags |