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.sax.SAXSource ; 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 import org.xml.sax.InputSource ; 26 27 28 @WebServiceProvider(portName = "SoapPortRPCLit5", serviceName = "SOAPServiceRPCLit5", 31 targetNamespace = "http://objectweb.org/hello_world_rpclit", 32 wsdlLocation = "/wsdl/hello_world_rpc_lit.wsdl") 33 @ServiceMode(value = Service.Mode.PAYLOAD) 34 public class HWSAXSourcePayloadProvider implements Provider<SAXSource > { 35 36 private static QName sayHi = new QName ("http://objectweb.org/hello_world_rpclit", "sayHi"); 37 private static QName greetMe = new QName ("http://objectweb.org/hello_world_rpclit", "greetMe"); 38 private MessageFactory factory; 39 private InputSource sayHiInputSource; 40 private InputSource greetMeInputSource; 41 42 public HWSAXSourcePayloadProvider() { 43 44 try { 45 factory = MessageFactory.newInstance(); 46 InputStream is = getClass().getResourceAsStream("resources/sayHiRpcLiteralResp.xml"); 47 Document sayHiDocument = factory.createMessage(null, is).getSOAPBody().extractContentAsDocument(); 48 sayHiInputSource = new InputSource (getSOAPBodyStream(sayHiDocument)); 49 50 InputStream is2 = getClass().getResourceAsStream("resources/GreetMeRpcLiteralResp.xml"); 51 Document greetMeDocument = 52 factory.createMessage(null, is2).getSOAPBody().extractContentAsDocument(); 53 greetMeInputSource = new InputSource (getSOAPBodyStream(greetMeDocument)); 54 55 } catch (Exception ex) { 56 ex.printStackTrace(); 57 } 58 } 59 60 public SAXSource invoke(SAXSource request) { 61 SAXSource response = new SAXSource (); 62 try { 63 64 DOMResult domResult = new DOMResult (); 65 Transformer transformer = TransformerFactory.newInstance().newTransformer(); 66 transformer.transform(request, domResult); 67 Node n = domResult.getNode().getFirstChild(); 68 69 while (n.getNodeType() != Node.ELEMENT_NODE) { 70 n = n.getNextSibling(); 71 } 72 if (n.getLocalName().equals(sayHi.getLocalPart())) { 73 response.setInputSource(sayHiInputSource); 74 75 } else if (n.getLocalName().equals(greetMe.getLocalPart())) { 76 response.setInputSource(greetMeInputSource); 77 } 78 } catch (Exception ex) { 79 ex.printStackTrace(); 80 } 81 return response; 82 } 83 84 private InputStream getSOAPBodyStream(Document doc) throws Exception { 85 System.setProperty(DOMImplementationRegistry.PROPERTY, 86 "com.sun.org.apache.xerces.internal.dom.DOMImplementationSourceImpl"); 87 DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance(); 88 DOMImplementationLS impl = (DOMImplementationLS )registry.getDOMImplementation("LS"); 89 LSOutput output = impl.createLSOutput(); 90 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream (); 91 output.setByteStream(byteArrayOutputStream); 92 LSSerializer writer = impl.createLSSerializer(); 93 writer.write(doc, output); 94 byte[] buf = byteArrayOutputStream.toByteArray(); 95 return new ByteArrayInputStream (buf); 96 } 97 98 } 99 | Popular Tags |