1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.wsdl.wsdl11.builder;
18
19 import java.util.Iterator;
20 import javax.wsdl.Binding;
21 import javax.wsdl.BindingFault;
22 import javax.wsdl.BindingInput;
23 import javax.wsdl.BindingOperation;
24 import javax.wsdl.BindingOutput;
25 import javax.wsdl.Definition;
26 import javax.wsdl.Fault;
27 import javax.wsdl.Input;
28 import javax.wsdl.Operation;
29 import javax.wsdl.OperationType;
30 import javax.wsdl.Output;
31 import javax.wsdl.Port;
32 import javax.wsdl.PortType;
33 import javax.wsdl.Service;
34 import javax.wsdl.WSDLException;
35 import javax.xml.namespace.QName;
36
37
38
39
40
41
42
43
44
45
46
47 public abstract class AbstractBindingWsdl4jDefinitionBuilder extends AbstractWsdl4jDefinitionBuilder {
48
49
50 private static final String BINDING_SUFFIX = "Binding";
51
52
53 private static final String PORT_SUFFIX = "Port";
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 public void buildBindings(Definition definition) throws WSDLException {
71 for (Iterator iterator = definition.getPortTypes().values().iterator(); iterator.hasNext();) {
72 PortType portType = (PortType) iterator.next();
73 Binding binding = definition.createBinding();
74 binding.setPortType(portType);
75 populateBinding(binding, portType);
76 createBindingOperations(definition, binding, portType);
77 binding.setUndefined(false);
78 definition.addBinding(binding);
79 }
80 }
81
82
83
84
85
86
87
88
89
90
91
92
93 protected void populateBinding(Binding binding, PortType portType) throws WSDLException {
94 QName portTypeName = portType.getQName();
95 if (portTypeName != null) {
96 binding.setQName(new QName(portTypeName.getNamespaceURI(), portTypeName.getLocalPart() + BINDING_SUFFIX));
97 }
98 }
99
100 private void createBindingOperations(Definition definition, Binding binding, PortType portType)
101 throws WSDLException {
102 for (Iterator operationIterator = portType.getOperations().iterator(); operationIterator.hasNext();) {
103 Operation operation = (Operation) operationIterator.next();
104 BindingOperation bindingOperation = definition.createBindingOperation();
105 bindingOperation.setOperation(operation);
106 populateBindingOperation(bindingOperation, operation);
107 if (operation.getStyle() == null || operation.getStyle().equals(OperationType.REQUEST_RESPONSE)) {
108 createBindingInput(definition, operation, bindingOperation);
109 createBindingOutput(definition, operation, bindingOperation);
110 }
111 else if (operation.getStyle().equals(OperationType.ONE_WAY)) {
112 createBindingInput(definition, operation, bindingOperation);
113 }
114 else if (operation.getStyle().equals(OperationType.NOTIFICATION)) {
115 createBindingOutput(definition, operation, bindingOperation);
116 }
117 else if (operation.getStyle().equals(OperationType.SOLICIT_RESPONSE)) {
118 createBindingOutput(definition, operation, bindingOperation);
119 createBindingInput(definition, operation, bindingOperation);
120 }
121 for (Iterator faultIterator = operation.getFaults().values().iterator(); faultIterator.hasNext();) {
122 Fault fault = (Fault) faultIterator.next();
123 BindingFault bindingFault = definition.createBindingFault();
124 populateBindingFault(bindingFault, fault);
125 bindingOperation.addBindingFault(bindingFault);
126 }
127 binding.addBindingOperation(bindingOperation);
128 }
129 }
130
131 private void createBindingOutput(Definition definition, Operation operation, BindingOperation bindingOperation)
132 throws WSDLException {
133 BindingOutput bindingOutput = definition.createBindingOutput();
134 populateBindingOutput(bindingOutput, operation.getOutput());
135 bindingOperation.setBindingOutput(bindingOutput);
136 }
137
138 private void createBindingInput(Definition definition, Operation operation, BindingOperation bindingOperation)
139 throws WSDLException {
140 BindingInput bindingInput = definition.createBindingInput();
141 populateBindingInput(bindingInput, operation.getInput());
142 bindingOperation.setBindingInput(bindingInput);
143 }
144
145
146
147
148
149
150
151
152
153
154
155 protected void populateBindingOperation(BindingOperation bindingOperation, Operation operation)
156 throws WSDLException {
157 bindingOperation.setName(operation.getName());
158 }
159
160
161
162
163
164
165
166
167
168
169
170 protected void populateBindingInput(BindingInput bindingInput, Input input) throws WSDLException {
171 bindingInput.setName(input.getName());
172 }
173
174
175
176
177
178
179
180
181
182
183
184 protected void populateBindingOutput(BindingOutput bindingOutput, Output output) throws WSDLException {
185 bindingOutput.setName(output.getName());
186 }
187
188
189
190
191
192
193
194
195
196
197
198 protected void populateBindingFault(BindingFault bindingFault, Fault fault) throws WSDLException {
199 bindingFault.setName(fault.getName());
200 }
201
202
203
204
205
206
207
208
209
210 public void buildServices(Definition definition) throws WSDLException {
211 Service service = definition.createService();
212 populateService(service);
213 createPorts(definition, service);
214 definition.addService(service);
215 }
216
217
218
219
220
221
222
223
224
225
226 protected void populateService(Service service) throws WSDLException {
227 }
228
229 private void createPorts(Definition definition, Service service) throws WSDLException {
230 for (Iterator iterator = definition.getBindings().values().iterator(); iterator.hasNext();) {
231 Binding binding = (Binding) iterator.next();
232 Port port = definition.createPort();
233 port.setBinding(binding);
234 populatePort(port, binding);
235 service.addPort(port);
236 }
237 }
238
239
240
241
242
243
244
245
246
247
248
249 protected void populatePort(Port port, Binding binding) throws WSDLException {
250 if (binding.getPortType() != null && binding.getPortType().getQName() != null) {
251 port.setName(binding.getPortType().getQName().getLocalPart() + PORT_SUFFIX);
252 }
253 }
254
255 }