KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > tools > generators > java2 > MessagePortTypeGenerator


1 package org.objectweb.celtix.tools.generators.java2;
2
3 import java.util.Iterator JavaDoc;
4
5 import javax.jws.soap.SOAPBinding;
6 import javax.wsdl.Definition;
7 import javax.wsdl.Fault;
8 import javax.wsdl.Input;
9 import javax.wsdl.Message;
10 import javax.wsdl.Operation;
11 import javax.wsdl.Output;
12 import javax.wsdl.Part;
13 import javax.wsdl.PortType;
14 import javax.xml.namespace.QName JavaDoc;
15
16 import com.sun.xml.bind.api.JAXBRIContext;
17
18 import org.objectweb.celtix.tools.common.model.JavaMethod;
19 import org.objectweb.celtix.tools.common.model.JavaParameter;
20 import org.objectweb.celtix.tools.common.model.WSDLModel;
21 import org.objectweb.celtix.tools.common.model.WSDLParameter;
22
23 public class MessagePortTypeGenerator {
24     private WSDLModel wmodel;
25     private Definition definition;
26
27     public MessagePortTypeGenerator(WSDLModel model) {
28         this.definition = model.getDefinition();
29         this.wmodel = model;
30     }
31
32     public void generate() {
33         PortType portType = definition.createPortType();
34         portType.setQName(new QName JavaDoc(wmodel.getTargetNameSpace(), wmodel.getPortTypeName()));
35         portType.setUndefined(false);
36         for (JavaMethod method : wmodel.getJavaMethods()) {
37             Operation operation = definition.createOperation();
38             operation.setName(method.getName());
39             operation.setUndefined(false);
40
41             Message inputMessage = null;
42             inputMessage = definition.createMessage();
43             inputMessage.setQName(new QName JavaDoc(wmodel.getTargetNameSpace(), method.getName()));
44             processInputMessage(operation, method, inputMessage);
45
46             Message outputMessage = null;
47             if (!method.isOneWay()) {
48                 outputMessage = definition.createMessage();
49                 outputMessage.setQName(new QName JavaDoc(wmodel.getTargetNameSpace(), method.getName() + "Response"));
50                 processOutputMessage(operation, method, outputMessage);
51             }
52
53             generateFault(method, operation);
54
55             portType.addOperation(operation);
56             definition.addPortType(portType);
57         }
58
59     }
60
61     private void processInputMessage(Operation operation, JavaMethod method, Message inputMessage) {
62         WSDLParameter request = method.getRequest();
63         String JavaDoc reqNS = request.getTargetNamespace();
64
65         if (method.getSoapStyle() == SOAPBinding.Style.DOCUMENT && method.isWrapperStyle()) {
66             addPartByElementName(inputMessage, request.getName(), new QName JavaDoc(reqNS, request.getName()));
67
68         }
69
70         // Doc-Lit-Bare
71
if (method.getSoapStyle() == SOAPBinding.Style.DOCUMENT && !method.isWrapperStyle()) {
72             for (JavaParameter jp : request.getChildren()) {
73                 addPartByElementName(inputMessage, jp.getPartName(), new QName JavaDoc(jp.getTargetNamespace(), jp
74                     .getName()));
75             }
76         }
77
78         // RPC
79

80         if (method.getSoapStyle() == SOAPBinding.Style.RPC) {
81             JAXBRIContext jxbcontext = wmodel.getJaxbContext();
82             if (request != null && request.getChildren().size() > 0) {
83                 Iterator JavaDoc ite2 = request.getChildren().iterator();
84                 while (ite2.hasNext()) {
85                     JavaParameter jp = (JavaParameter)ite2.next();
86                     QName JavaDoc qname = jxbcontext.getTypeName(jp.getTypeReference());
87                     addPartByTypeName(inputMessage, jp.getName(), qname);
88                 }
89
90             }
91         }
92         
93         addInputToMessage(operation, inputMessage, request.getName());
94         inputMessage.setUndefined(false);
95         definition.addMessage(inputMessage);
96
97     }
98     
99     
100     
101     private void processOutputMessage(Operation operation, JavaMethod method, Message outputMessage) {
102         WSDLParameter response = method.getResponse();
103         String JavaDoc resNS = response.getTargetNamespace();
104
105         if (method.getSoapStyle() == SOAPBinding.Style.DOCUMENT && method.isWrapperStyle()) {
106             addPartByElementName(outputMessage, response.getName(), new QName JavaDoc(resNS, response.getName()));
107
108         }
109
110         // Doc-Lit-Bare
111
if (method.getSoapStyle() == SOAPBinding.Style.DOCUMENT && !method.isWrapperStyle()) {
112             for (JavaParameter jp : response.getChildren()) {
113                 addPartByElementName(outputMessage, jp.getPartName(), new QName JavaDoc(jp.getTargetNamespace(), jp
114                     .getName()));
115             }
116         }
117
118         // RPC
119

120         if (method.getSoapStyle() == SOAPBinding.Style.RPC) {
121             JAXBRIContext jxbcontext = wmodel.getJaxbContext();
122             if (response != null && response.getChildren().size() > 0) {
123                 Iterator JavaDoc ite2 = response.getChildren().iterator();
124                 while (ite2.hasNext()) {
125                     JavaParameter jp = (JavaParameter)ite2.next();
126                     QName JavaDoc qname = jxbcontext.getTypeName(jp.getTypeReference());
127                     addPartByTypeName(outputMessage, jp.getName(), qname);
128                 }
129
130             }
131
132         }
133         
134         addOutputToMessage(operation, outputMessage, response.getName());
135         outputMessage.setUndefined(false);
136         definition.addMessage(outputMessage);
137
138     }
139     
140     
141     
142
143     private void generateFault(JavaMethod method, Operation operation) {
144         for (org.objectweb.celtix.tools.common.model.WSDLException exception : method.getWSDLExceptions()) {
145             String JavaDoc exceptionName = exception.getExcpetionClass().getSimpleName();
146             Message msg = definition.createMessage();
147             msg.setQName(new QName JavaDoc(wmodel.getTargetNameSpace(), exceptionName));
148             Part part = definition.createPart();
149             part.setName(exception.getDetailType().getSimpleName());
150             part.setElementName(exception.getDetailTypeReference().tagName);
151             msg.addPart(part);
152             msg.setUndefined(false);
153             definition.addMessage(msg);
154             Fault fault = definition.createFault();
155             fault.setMessage(msg);
156             fault.setName(exceptionName);
157             operation.addFault(fault);
158         }
159     }
160
161     private void addPartByElementName(Message message, String JavaDoc partName, QName JavaDoc partElementName) {
162         if (partName == null) {
163             return;
164         }
165         Part part = definition.createPart();
166         part.setName(partName);
167         part.setElementName(partElementName);
168         message.addPart(part);
169     }
170
171     private void addPartByTypeName(Message message, String JavaDoc partName, QName JavaDoc typeName) {
172         Part part = definition.createPart();
173         part.setName(partName);
174         part.setTypeName(typeName);
175         message.addPart(part);
176     }
177
178     private void addInputToMessage(Operation operation, Message msg, String JavaDoc inputName) {
179         Input input = definition.createInput();
180         input.setMessage(msg);
181         input.setName(inputName);
182         operation.setInput(input);
183     }
184
185     private void addOutputToMessage(Operation operation, Message msg, String JavaDoc outputName) {
186         Output output = definition.createOutput();
187         output.setMessage(msg);
188         output.setName(outputName);
189         operation.setOutput(output);
190     }
191 }
192
Popular Tags