1   /*
2    * Copyright 2005-2010 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.springframework.ws.wsdl.wsdl11.provider;
18  
19  import java.util.Properties;
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.extensions.soap.SOAPAddress;
35  import javax.wsdl.extensions.soap.SOAPBinding;
36  import javax.wsdl.extensions.soap.SOAPBody;
37  import javax.wsdl.extensions.soap.SOAPFault;
38  import javax.wsdl.extensions.soap.SOAPOperation;
39  import javax.wsdl.factory.WSDLFactory;
40  import javax.xml.namespace.QName;
41  
42  import org.junit.Assert;
43  import org.junit.Before;
44  import org.junit.Test;
45  
46  public class Soap11ProviderTest {
47  
48      private Soap11Provider provider;
49  
50      private Definition definition;
51  
52      @Before
53      public void setUp() throws Exception {
54          provider = new Soap11Provider();
55          WSDLFactory factory = WSDLFactory.newInstance();
56          definition = factory.newDefinition();
57      }
58  
59      @Test
60      public void testPopulateBinding() throws Exception {
61          String namespace = "http://springframework.org/spring-ws";
62          definition.addNamespace("tns", namespace);
63          definition.setTargetNamespace(namespace);
64  
65          PortType portType = definition.createPortType();
66          portType.setQName(new QName(namespace, "PortType"));
67          portType.setUndefined(false);
68          definition.addPortType(portType);
69          Operation operation = definition.createOperation();
70          operation.setName("Operation");
71          operation.setUndefined(false);
72          operation.setStyle(OperationType.REQUEST_RESPONSE);
73          portType.addOperation(operation);
74          Input input = definition.createInput();
75          input.setName("Input");
76          operation.setInput(input);
77          Output output = definition.createOutput();
78          output.setName("Output");
79          operation.setOutput(output);
80          Fault fault = definition.createFault();
81          fault.setName("Fault");
82          operation.addFault(fault);
83  
84          Properties soapActions = new Properties();
85          soapActions.setProperty("Operation", namespace + "/Action");
86          provider.setSoapActions(soapActions);
87  
88          provider.setServiceName("Service");
89  
90          String locationUri = "http://localhost:8080/services";
91          provider.setLocationUri(locationUri);
92  
93          provider.addBindings(definition);
94          provider.addServices(definition);
95  
96          Binding binding = definition.getBinding(new QName(namespace, "PortTypeSoap11"));
97          Assert.assertNotNull("No binding created", binding);
98          Assert.assertEquals("Invalid port type", portType, binding.getPortType());
99          Assert.assertEquals("Invalid amount of extensibility elements", 1, binding.getExtensibilityElements().size());
100 
101         SOAPBinding soapBinding = (SOAPBinding) binding.getExtensibilityElements().get(0);
102         Assert.assertEquals("Invalid style", "document", soapBinding.getStyle());
103         Assert.assertEquals("Invalid amount of binding operations", 1, binding.getBindingOperations().size());
104 
105         BindingOperation bindingOperation = binding.getBindingOperation("Operation", "Input", "Output");
106         Assert.assertNotNull("No binding operation created", bindingOperation);
107         Assert.assertEquals("Invalid amount of extensibility elements", 1,
108                 bindingOperation.getExtensibilityElements().size());
109 
110         SOAPOperation soapOperation = (SOAPOperation) bindingOperation.getExtensibilityElements().get(0);
111         Assert.assertEquals("Invalid SOAPAction", namespace + "/Action", soapOperation.getSoapActionURI());
112 
113         BindingInput bindingInput = bindingOperation.getBindingInput();
114         Assert.assertNotNull("No binding input", bindingInput);
115         Assert.assertEquals("Invalid name", "Input", bindingInput.getName());
116         Assert.assertEquals("Invalid amount of extensibility elements", 1,
117                 bindingInput.getExtensibilityElements().size());
118         SOAPBody soapBody = (SOAPBody) bindingInput.getExtensibilityElements().get(0);
119         Assert.assertEquals("Invalid soap body use", "literal", soapBody.getUse());
120 
121         BindingOutput bindingOutput = bindingOperation.getBindingOutput();
122         Assert.assertNotNull("No binding output", bindingOutput);
123         Assert.assertEquals("Invalid name", "Output", bindingOutput.getName());
124         Assert.assertEquals("Invalid amount of extensibility elements", 1,
125                 bindingOutput.getExtensibilityElements().size());
126         soapBody = (SOAPBody) bindingOutput.getExtensibilityElements().get(0);
127         Assert.assertEquals("Invalid soap body use", "literal", soapBody.getUse());
128 
129         BindingFault bindingFault = bindingOperation.getBindingFault("Fault");
130         Assert.assertNotNull("No binding fault", bindingFault);
131         Assert.assertEquals("Invalid amount of extensibility elements", 1,
132                 bindingFault.getExtensibilityElements().size());
133         SOAPFault soapFault = (SOAPFault) bindingFault.getExtensibilityElements().get(0);
134         Assert.assertEquals("Invalid soap fault use", "literal", soapFault.getUse());
135 
136         Service service = definition.getService(new QName(namespace, "Service"));
137         Assert.assertNotNull("No Service created", service);
138         Assert.assertEquals("Invalid amount of ports", 1, service.getPorts().size());
139 
140         Port port = service.getPort("PortTypeSoap11");
141         Assert.assertNotNull("No port created", port);
142         Assert.assertEquals("Invalid binding", binding, port.getBinding());
143         Assert.assertEquals("Invalid amount of extensibility elements", 1, port.getExtensibilityElements().size());
144 
145         SOAPAddress soapAddress = (SOAPAddress) port.getExtensibilityElements().get(0);
146         Assert.assertEquals("Invalid soap address", locationUri, soapAddress.getLocationURI());
147     }
148 
149 
150 }