KickJava   Java API By Example, From Geeks To Geeks.

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


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.stream.StreamSource 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
26
27 //The following wsdl file is used.
28
//wsdlLocation = "C:/CeltixSVN/trunk/celtix-testutils/src/main/resources/wsdl/hello_world_rpc_lit.wsdl"
29
@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 JavaDoc> {
34     
35     private static QName JavaDoc sayHi = new QName JavaDoc("http://objectweb.org/hello_world_rpclit", "sayHi");
36     private static QName JavaDoc greetMe = new QName JavaDoc("http://objectweb.org/hello_world_rpclit", "greetMe");
37     private InputStream JavaDoc sayHiInputStream;
38     private InputStream JavaDoc greetMeInputStream;
39     private MessageFactory JavaDoc factory;
40
41     public HWStreamSourcePayloadProvider() {
42
43         try {
44             factory = MessageFactory.newInstance();
45             InputStream JavaDoc is = getClass().getResourceAsStream("resources/sayHiRpcLiteralResp.xml");
46             Document JavaDoc sayHiDocument = factory.createMessage(null, is).getSOAPBody().extractContentAsDocument();
47             sayHiInputStream = getSOAPBodyStream(sayHiDocument);
48             
49             InputStream JavaDoc is2 = getClass().getResourceAsStream("resources/GreetMeRpcLiteralResp.xml");
50             Document JavaDoc greetMeDocument =
51                 factory.createMessage(null, is2).getSOAPBody().extractContentAsDocument();
52             greetMeInputStream = getSOAPBodyStream(greetMeDocument);
53
54         } catch (Exception JavaDoc ex) {
55             ex.printStackTrace();
56         }
57     }
58
59     public StreamSource JavaDoc invoke(StreamSource JavaDoc request) {
60         StreamSource JavaDoc response = new StreamSource JavaDoc();
61         try {
62             DOMResult JavaDoc domResult = new DOMResult JavaDoc();
63             Transformer JavaDoc transformer = TransformerFactory.newInstance().newTransformer();
64             transformer.transform(request, domResult);
65             Node JavaDoc 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 JavaDoc ex) {
76             ex.printStackTrace();
77         }
78         return response;
79     }
80     
81     private InputStream JavaDoc getSOAPBodyStream(Document JavaDoc doc) throws Exception JavaDoc {
82         System.setProperty(DOMImplementationRegistry.PROPERTY,
83             "com.sun.org.apache.xerces.internal.dom.DOMImplementationSourceImpl");
84         DOMImplementationRegistry JavaDoc registry = DOMImplementationRegistry.newInstance();
85         DOMImplementationLS JavaDoc impl = (DOMImplementationLS JavaDoc)registry.getDOMImplementation("LS");
86         LSOutput JavaDoc output = impl.createLSOutput();
87         ByteArrayOutputStream JavaDoc byteArrayOutputStream = new ByteArrayOutputStream JavaDoc();
88         output.setByteStream(byteArrayOutputStream);
89         LSSerializer JavaDoc writer = impl.createLSSerializer();
90         writer.write(doc, output);
91         byte[] buf = byteArrayOutputStream.toByteArray();
92         return new ByteArrayInputStream JavaDoc(buf);
93     }
94
95     
96 }
97
Popular Tags