KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > systest > provider > HWSAXSourcePayloadProvider


1 package org.objectweb.celtix.systest.provider;
2
3 import java.io.ByteArrayInputStream JavaDoc;
4 import java.io.ByteArrayOutputStream JavaDoc;
5 import java.io.InputStream JavaDoc;
6
7 import javax.xml.namespace.QName JavaDoc;
8 import javax.xml.soap.MessageFactory JavaDoc;
9 import javax.xml.transform.Transformer JavaDoc;
10 import javax.xml.transform.TransformerFactory JavaDoc;
11 import javax.xml.transform.dom.DOMResult JavaDoc;
12 import javax.xml.transform.sax.SAXSource JavaDoc;
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 JavaDoc;
19 import org.w3c.dom.Node JavaDoc;
20 import org.w3c.dom.bootstrap.DOMImplementationRegistry JavaDoc;
21 import org.w3c.dom.ls.DOMImplementationLS JavaDoc;
22 import org.w3c.dom.ls.LSOutput JavaDoc;
23 import org.w3c.dom.ls.LSSerializer JavaDoc;
24
25 import org.xml.sax.InputSource JavaDoc;
26
27
28 //The following wsdl file is used.
29
//wsdlLocation = "C:/CeltixSVN/trunk/celtix-testutils/src/main/resources/wsdl/hello_world_rpc_lit.wsdl"
30
@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 JavaDoc> {
35     
36     private static QName JavaDoc sayHi = new QName JavaDoc("http://objectweb.org/hello_world_rpclit", "sayHi");
37     private static QName JavaDoc greetMe = new QName JavaDoc("http://objectweb.org/hello_world_rpclit", "greetMe");
38     private MessageFactory JavaDoc factory;
39     private InputSource JavaDoc sayHiInputSource;
40     private InputSource JavaDoc greetMeInputSource;
41
42     public HWSAXSourcePayloadProvider() {
43
44         try {
45             factory = MessageFactory.newInstance();
46             InputStream JavaDoc is = getClass().getResourceAsStream("resources/sayHiRpcLiteralResp.xml");
47             Document JavaDoc sayHiDocument = factory.createMessage(null, is).getSOAPBody().extractContentAsDocument();
48             sayHiInputSource = new InputSource JavaDoc(getSOAPBodyStream(sayHiDocument));
49             
50             InputStream JavaDoc is2 = getClass().getResourceAsStream("resources/GreetMeRpcLiteralResp.xml");
51             Document JavaDoc greetMeDocument =
52                 factory.createMessage(null, is2).getSOAPBody().extractContentAsDocument();
53             greetMeInputSource = new InputSource JavaDoc(getSOAPBodyStream(greetMeDocument));
54
55         } catch (Exception JavaDoc ex) {
56             ex.printStackTrace();
57         }
58     }
59
60     public SAXSource JavaDoc invoke(SAXSource JavaDoc request) {
61         SAXSource JavaDoc response = new SAXSource JavaDoc();
62         try {
63             
64             DOMResult JavaDoc domResult = new DOMResult JavaDoc();
65             Transformer JavaDoc transformer = TransformerFactory.newInstance().newTransformer();
66             transformer.transform(request, domResult);
67             Node JavaDoc 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 JavaDoc ex) {
79             ex.printStackTrace();
80         }
81         return response;
82     }
83     
84     private InputStream JavaDoc getSOAPBodyStream(Document JavaDoc doc) throws Exception JavaDoc {
85         System.setProperty(DOMImplementationRegistry.PROPERTY,
86             "com.sun.org.apache.xerces.internal.dom.DOMImplementationSourceImpl");
87         DOMImplementationRegistry JavaDoc registry = DOMImplementationRegistry.newInstance();
88         DOMImplementationLS JavaDoc impl = (DOMImplementationLS JavaDoc)registry.getDOMImplementation("LS");
89         LSOutput JavaDoc output = impl.createLSOutput();
90         ByteArrayOutputStream JavaDoc byteArrayOutputStream = new ByteArrayOutputStream JavaDoc();
91         output.setByteStream(byteArrayOutputStream);
92         LSSerializer JavaDoc writer = impl.createLSSerializer();
93         writer.write(doc, output);
94         byte[] buf = byteArrayOutputStream.toByteArray();
95         return new ByteArrayInputStream JavaDoc(buf);
96     }
97
98 }
99
Popular Tags