1
package org.netbeans.modules.xml.wsdl.model.readwrite;
4
import java.util.ArrayList;
5
import java.util.Arrays;
6
import java.util.Collection;
7
import java.util.Iterator;
9
import junit.framework.*;
10
import org.netbeans.junit.NbTestCase;
11
import org.netbeans.modules.xml.schema.model.GlobalType;
12
import org.netbeans.modules.xml.wsdl.model.Binding;
13
import org.netbeans.modules.xml.wsdl.model.BindingFault;
14
import org.netbeans.modules.xml.wsdl.model.BindingInput;
15
import org.netbeans.modules.xml.wsdl.model.BindingOperation;
16
import org.netbeans.modules.xml.wsdl.model.BindingOutput;
17
import org.netbeans.modules.xml.wsdl.model.Definitions;
18
import org.netbeans.modules.xml.wsdl.model.Input;
19
import org.netbeans.modules.xml.wsdl.model.Message;
20
import org.netbeans.modules.xml.wsdl.model.Operation;
21
import org.netbeans.modules.xml.wsdl.model.Output;
22
import org.netbeans.modules.xml.wsdl.model.Part;
23
import org.netbeans.modules.xml.wsdl.model.Port;
24
import org.netbeans.modules.xml.wsdl.model.PortType;
25
import org.netbeans.modules.xml.wsdl.model.RequestResponseOperation;
26
import org.netbeans.modules.xml.wsdl.model.Service;
27
import org.netbeans.modules.xml.wsdl.model.TestCatalogModel;
28
import org.netbeans.modules.xml.wsdl.model.Types;
29
import org.netbeans.modules.xml.wsdl.model.Util;
30
import org.netbeans.modules.xml.wsdl.model.WSDLComponent;
31
import org.netbeans.modules.xml.wsdl.model.WSDLComponentFactory;
32
import org.netbeans.modules.xml.wsdl.model.WSDLModel;
33
import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPAddress;
34
import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPBinding;
35
import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPBody;
36
import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPFault;
37
import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPMessageBase;
38
import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPOperation;
39
import org.netbeans.modules.xml.wsdl.model.extensions.xsd.WSDLSchema;
40
import org.netbeans.modules.xml.wsdl.model.visitor.FindWSDLComponent;
41
import org.netbeans.modules.xml.xam.dom.AbstractDocumentComponent;
42
import org.netbeans.modules.xml.xam.dom.NamedComponentReference;
48
public class SimpleTest extends NbTestCase {
50
public SimpleTest(String testName) {
54
protected void setUp() throws Exception {
57
protected void tearDown() throws Exception {
58
TestCatalogModel.getDefault().clearDocumentPool();
61
public void testWrite() throws Exception {
62
WSDLModel model = Util.loadWSDLModel("resources/empty.wsdl");
63
WSDLComponentFactory fact = model.getFactory();
65
model.startTransaction();
66
Definitions d = model.getDefinitions();
67
d.setName("HelloService");
68
d.setTargetNamespace("urn:HelloService/wsdl");
69
Types types = fact.createTypes();
71
WSDLSchema wsdlSchema = fact.createWSDLSchema();
72
types.addExtensibilityElement(wsdlSchema);
73
wsdlSchema.getSchemaModel().getSchema().setTargetNamespace("urn:HelloService/wsdl");
75
Message m1 = fact.createMessage();
76
Message m2 = fact.createMessage();
77
d.addMessage(m1); d.addMessage(m2);
78
m1.setName("HelloServiceSEI_sayHello");
79
m2.setName("HelloServiceSEI_sayHelloResponse");
80
Part p = fact.createPart();
81
p.setName("String_1"); //TODO test setType
82
p.setType(p.createSchemaReference(Util.getPrimitiveType("string"), GlobalType.class));
84
p = fact.createPart();
85
p.setName("String_2");
86
p.setType(p.createSchemaReference(Util.getPrimitiveType("string"), GlobalType.class));
88
p = fact.createPart();
90
p.setType(p.createSchemaReference(Util.getPrimitiveType("string"), GlobalType.class));
93
PortType pt = fact.createPortType();
95
pt.setName("HelloServiceSEI");
96
RequestResponseOperation op = fact.createRequestResponseOperation();
98
op.setName("sayHello");
99
op.setParameterOrder(Arrays.asList(new String[] {"String_1", "String_2"}));
100
Input in = fact.createInput();
102
in.setMessage(in.createReferenceTo(m1, Message.class));
103
NamedComponentReference<Message> msgRef = in.getMessage();
105
assertEquals("setTargetNamespace should declare prefix", "tns:HelloServiceSEI_sayHello", msgRef.getRefString());
107
Output out = fact.createOutput();
109
out.setMessage(out.createReferenceTo(m2, Message.class));
111
Binding b = fact.createBinding();
113
b.setName("HelloServiceSEIBinding");
114
b.setType(b.createReferenceTo(pt, PortType.class));
115
BindingOperation bo = fact.createBindingOperation();
116
b.addBindingOperation(bo);
117
bo.setName("sayHello");
118
SOAPBinding sb = fact.createSOAPBinding();
119
sb.setTransportURI("http://schemas.xmlsoap.org/soap/http");
120
sb.setStyle(SOAPBinding.Style.RPC);
121
b.addExtensibilityElement(sb);
122
SOAPOperation soo = fact.createSOAPOperation();
123
bo.addExtensibilityElement(soo);
124
soo.setSoapAction("");
126
assertTrue(b.getChildren().get(0) == sb);
127
assertTrue(b.getChildren().get(1) == bo);
129
BindingInput bin = fact.createBindingInput();
130
bo.setBindingInput(bin);
131
SOAPBody body = fact.createSOAPBody();
132
bin.addExtensibilityElement(body);
133
body.setUse(SOAPMessageBase.Use.LITERAL);
134
body.setNamespace("urn:HelloService/wsdl");
136
BindingOutput bout = fact.createBindingOutput();
137
bo.setBindingOutput(bout);
138
body = fact.createSOAPBody();
139
bout.addExtensibilityElement(body);
140
body.setUse(SOAPMessageBase.Use.LITERAL);
141
body.setNamespace("urn:HelloService/wsdl");
144
BindingFault bfault = fact.createBindingFault();
145
bo.addBindingFault(bfault);
146
SOAPFault sFault = fact.createSOAPFault();
147
bfault.addExtensibilityElement(sFault);
148
sFault.setUse(SOAPMessageBase.Use.LITERAL);
149
sFault.setNamespace("urn:HelloService/wsdl");
151
//test the order in which children were added in binding operation
152
List children = bo.getChildren();
153
Iterator it = children.iterator();
154
assertEquals("binding.operation.soapOperation", soo, it.next());
155
assertEquals("binding.operation.input", bin, it.next());
156
assertEquals("binding.operation.output", bout, it.next());
157
assertEquals("binding.operation.fault", bfault, it.next());
159
Service service = fact.createService();
160
d.addService(service);
161
service.setName("HelloService");
162
Port port = fact.createPort();
163
service.addPort(port);
164
port.setName("HelloServiceSEIPort");
165
port.setBinding(port.createReferenceTo(b, Binding.class));
166
SOAPAddress sad = fact.createSOAPAddress();
167
port.addExtensibilityElement(sad);
168
sad.setLocation("REPLACE_WITH_ACTUAL_URL");
170
model.endTransaction();
172
//Util.dumpToFile(model.getBaseDocument(), new File("C:\\temp\\HelloService.wsdl"));
176
public void testRead() throws Exception {
177
WSDLModel model = Util.loadWSDLModel(getTestResourcePath());
181
private void readAndCheck(WSDLModel model) {
182
Definitions d = model.getDefinitions();
183
Collection<Message> messages = d.getMessages();
184
assertEquals("read.message.count", 2, messages.size());
185
Iterator<Message> it = messages.iterator(); it.next();
186
Message m = it.next();
187
AbstractDocumentComponent acm = (AbstractDocumentComponent) m;
188
String prefix = acm.getPeer().getPrefix();
189
assertTrue("wsdl prefix is not null or empty: "+prefix, prefix == null || prefix.equals(""));
190
assertEquals("read.message.name", "HelloServiceSEI_sayHelloResponse", m.getName());
191
List<Part> parts = new ArrayList(m.getParts());
192
assertEquals("read.message.part.name", "result", parts.iterator().next().getName());
193
assertEquals("string", parts.get(0).getType().get().getName());
195
Collection<PortType> porttypes = d.getPortTypes();
196
assertEquals("read.portType", 1, porttypes.size());
197
PortType pt = porttypes.iterator().next();
198
assertEquals("read.portType.name", "HelloServiceSEI", pt.getName());
199
Operation op = pt.getOperations().iterator().next();
200
assertTrue("read.portType.operation", op instanceof RequestResponseOperation);
201
assertEquals("read.portType.operation.parameterOrder", "[String_1, String_2]", op.getParameterOrder().toString());
203
Message m1 = d.getMessages().iterator().next();
204
assertEquals("message[1].name", "HelloServiceSEI_sayHello", m1.getName());
205
assertEquals("message[1].parts.count=2", 2, m1.getParts().size());
207
String xpath0 = "/definitions/message[1]";
208
WSDLComponent found = (WSDLComponent) new FindWSDLComponent().findComponent(model.getRootComponent(), xpath0);
209
assertTrue(xpath0, found instanceof Message);
210
Message m1x = (Message) found;
211
assertEquals("write.xpath", m1, m1x);
213
RequestResponseOperation rro = (RequestResponseOperation) op;
214
assertEquals("operation.name", "sayHello", rro.getName());
215
Input in = rro.getInput();
216
assertEquals("portType.operation.input.message", messages.iterator().next(), in.getMessage().get());
218
Output out = rro.getOutput();
219
assertEquals("portType.operation.output.message", m.getName(), out.getMessage().get().getName());
221
Binding b = d.getBindings().iterator().next();
222
Collection<SOAPBinding> soapB = b.getExtensibilityElements(SOAPBinding.class);
223
SOAPBinding sb = soapB.iterator().next();
224
assertEquals("binding.soap.style", SOAPBinding.Style.RPC, sb.getStyle());
225
assertEquals("binding.soap.uri", "http://schemas.xmlsoap.org/soap/http", sb.getTransportURI());
227
BindingOperation bo = b.getBindingOperations().iterator().next();
228
Collection<SOAPOperation> soapOps = bo.getExtensibilityElements(SOAPOperation.class);
229
assertEquals("binding.soap.style", SOAPBinding.Style.RPC, soapOps.iterator().next().getStyle());
230
assertEquals("binding.soap.uri", "", soapOps.iterator().next().getSoapAction());
232
assertEquals("binding.type", pt, b.getType().get());
233
assertEquals("binding.name", "HelloServiceSEIBinding", b.getName());
234
assertEquals("sayHelloRequest", bo.getBindingInput().getInput().get().getName());
235
SOAPBody body = (SOAPBody) bo.getBindingInput().getExtensibilityElements().iterator().next();
236
assertEquals("binding.operation.input", SOAPBody.Use.LITERAL, body.getUse());
237
SOAPBody body2 = (SOAPBody) bo.getBindingOutput().getExtensibilityElements().iterator().next();
238
assertEquals("binding.operation.output", "urn:HelloService/wsdl", body2.getNamespace());
240
Collection<BindingFault> bFaults = bo.getBindingFaults();
241
assertEquals("binding.operation.faults", 1, bFaults.size());
242
BindingFault fault = bFaults.iterator().next();
243
SOAPFault sfault = (SOAPFault)fault.getExtensibilityElements().iterator().next();
244
assertEquals("binding.operation.fault", "urn:HelloService/wsdl", sfault.getNamespace());
246
Service s = d.getServices().iterator().next();
247
assertEquals("serice.name", "HelloService", s.getName());
248
Port p = s.getPorts().iterator().next();
249
assertEquals("service.port.name", "HelloServiceSEIPort", p.getName());
250
Binding binding = p.getBinding().get();
251
assertEquals("service.port.binding", b, binding);
252
SOAPAddress soapAddress = p.getExtensibilityElements(SOAPAddress.class).iterator().next();
253
assertEquals("service.port.soapAddress", "REPLACE_WITH_ACTUAL_URL", soapAddress.getLocation());
257
public String getTestResourcePath() {
258
return "resources/HelloService.wsdl";
261
public void testPrefixPreference() throws Exception {
262
WSDLModel model = Util.loadWSDLModel("resources/empty.wsdl");
263
model.startTransaction();
264
model.getDefinitions().setTypes(model.getFactory().createTypes());
265
model.endTransaction();
266
assertNull(model.getDefinitions().getTypes().getPeer().getPrefix());
267
assertNull(model.getDefinitions().getTypes().getPeer().getAttribute("xmlns:wsdl"));
268
assertNull(model.getDefinitions().getTypes().getPeer().getAttribute("xmlns"));
269
//Util.dumpToFile(model.getBaseDocument(), new File(getWorkDir(), "test.wsdl"));