| 1 package org.objectweb.celtix.systest.provider; 2 import java.io.InputStream ; 3 4 import javax.xml.namespace.QName ; 5 import javax.xml.soap.MessageFactory ; 6 import javax.xml.soap.SOAPBody ; 7 import javax.xml.soap.SOAPMessage ; 8 import javax.xml.transform.dom.DOMSource ; 9 import javax.xml.ws.Provider; 10 import javax.xml.ws.WebServiceProvider; 11 12 import org.w3c.dom.Document ; 13 import org.w3c.dom.Node ; 14 15 @WebServiceProvider(portName = "SoapPortRPCLit2", serviceName = "SOAPServiceRPCLit2", 18 targetNamespace = "http://objectweb.org/hello_world_rpclit", 19 wsdlLocation = "/wsdl/hello_world_rpc_lit.wsdl") 20 public class HWDOMSourcePayloadProvider implements Provider<DOMSource > { 21 22 private static QName sayHi = new QName ("http://objectweb.org/hello_world_rpclit", "sayHi"); 23 private static QName greetMe = new QName ("http://objectweb.org/hello_world_rpclit", "greetMe"); 24 private SOAPMessage sayHiResponse; 25 private SOAPMessage greetMeResponse; 26 private MessageFactory factory; 27 28 public HWDOMSourcePayloadProvider() { 29 30 try { 31 factory = MessageFactory.newInstance(); 32 InputStream is = getClass().getResourceAsStream("resources/sayHiRpcLiteralResp.xml"); 33 sayHiResponse = factory.createMessage(null, is); 34 is.close(); 35 is = getClass().getResourceAsStream("resources/GreetMeRpcLiteralResp.xml"); 36 greetMeResponse = factory.createMessage(null, is); 37 is.close(); 38 } catch (Exception ex) { 39 ex.printStackTrace(); 40 } 41 } 42 43 public DOMSource invoke(DOMSource request) { 44 DOMSource response = new DOMSource (); 45 try { 46 SOAPMessage msg = factory.createMessage(); 47 SOAPBody body = msg.getSOAPBody(); 48 body.addDocument((Document )request.getNode()); 49 50 Node n = getElementChildNode(body); 51 if (n.getLocalName().equals(sayHi.getLocalPart())) { 52 response.setNode(sayHiResponse.getSOAPBody().extractContentAsDocument()); 53 } else if (n.getLocalName().equals(greetMe.getLocalPart())) { 54 response.setNode(greetMeResponse.getSOAPBody().extractContentAsDocument()); 55 } 56 } catch (Exception ex) { 57 ex.printStackTrace(); 58 } 59 return response; 60 } 61 62 private Node getElementChildNode(SOAPBody body) { 63 Node n = body.getFirstChild(); 64 65 while (n.getNodeType() != Node.ELEMENT_NODE) { 66 n = n.getNextSibling(); 67 } 68 69 return n; 70 } 71 } 72 | Popular Tags |