1 package org.objectweb.celtix.wsdl; 2 3 import java.io.InputStream ; 4 import java.net.URL ; 5 import java.util.ArrayList ; 6 import java.util.List ; 7 8 import javax.wsdl.Definition; 9 import javax.wsdl.Port; 10 import javax.wsdl.WSDLException; 11 import javax.wsdl.extensions.ExtensionRegistry; 12 import javax.wsdl.factory.WSDLFactory; 13 import javax.wsdl.xml.WSDLReader; 14 import javax.xml.bind.JAXBContext; 15 import javax.xml.bind.JAXBElement; 16 import javax.xml.bind.Unmarshaller; 17 import javax.xml.namespace.QName ; 18 import javax.xml.transform.Source ; 19 import javax.xml.transform.stream.StreamSource ; 20 import javax.xml.validation.Schema ; 21 import javax.xml.ws.Provider; 22 import javax.xml.ws.WebServiceProvider; 23 24 import org.w3c.dom.Element ; 25 26 import junit.framework.TestCase; 27 28 import org.objectweb.celtix.ws.addressing.EndpointReferenceType; 29 import org.objectweb.celtix.ws.addressing.MetadataType; 30 import org.objectweb.celtix.ws.addressing.ObjectFactory; 31 import org.objectweb.celtix.ws.addressing.wsdl.AttributedQNameType; 32 import org.objectweb.celtix.ws.addressing.wsdl.ServiceNameType; 33 34 public class EndpointReferenceUtilsTest extends TestCase { 35 36 37 public EndpointReferenceUtilsTest(String arg0) { 38 super(arg0); 39 } 40 41 public static void main(String [] args) { 42 junit.textui.TestRunner.run(EndpointReferenceUtilsTest.class); 43 } 44 45 class TestWSDLManager implements WSDLManager { 46 WSDLFactory factory; 47 TestWSDLManager() { 48 try { 49 factory = WSDLFactory.newInstance(); 50 } catch (WSDLException e) { 52 e.printStackTrace(); 53 } 54 } 55 56 public ExtensionRegistry getExtenstionRegistry() { 57 return null; 58 } 59 60 public WSDLFactory getWSDLFactory() { 61 return factory; 62 } 63 64 public Definition getDefinition(URL url) throws WSDLException { 65 return loadDefinition(url.toString()); 66 } 67 68 public Definition getDefinition(String url) throws WSDLException { 69 return loadDefinition(url); 70 } 71 72 public Definition getDefinition(Element element) throws WSDLException { 73 WSDLReader reader = factory.newWSDLReader(); 74 reader.setFeature("javax.wsdl.verbose", false); 75 reader.setExtensionRegistry(getExtenstionRegistry()); 76 return reader.readWSDL(null, element); 77 } 78 79 public Definition getDefinition(Class <?> sei) throws WSDLException { 80 return null; 82 } 83 private Definition loadDefinition(String url) throws WSDLException { 84 WSDLReader reader = factory.newWSDLReader(); 85 reader.setFeature("javax.wsdl.verbose", false); 86 reader.setExtensionRegistry(getExtenstionRegistry()); 87 return reader.readWSDL(url); 88 } 89 90 public void shutdown() { 91 } 93 94 public void addDefinition(Object key, Definition wsdl) { 95 97 } 98 99 }; 100 101 @WebServiceProvider(wsdlLocation = "resources/Test.wsdl", 102 portName = "TestPort", 103 serviceName = "TestService", 104 targetNamespace = "http://schemas.xmlsoap.org/wsdl/soap/http") 105 class TestProvider1 implements Provider<Source > { 106 TestProvider1() { 107 } 109 110 public Source invoke(Source source) { 111 return null; 112 } 113 } 114 115 @WebServiceProvider 116 class TestProvider2 implements Provider<Source > { 117 TestProvider2() { 118 } 120 121 public Source invoke(Source source) { 122 return null; 123 } 124 } 125 126 public void testGetWSDLDefinition() throws Exception { 127 128 WSDLManager manager = new TestWSDLManager(); 129 URL url = getClass().getResource("/wsdl/hello_world.wsdl"); 130 assertNotNull(url); 131 QName serviceName = new QName ("http://objectweb.org/hello_world_soap_http", "SOAPService_Test1"); 132 String portName = new String ("SoapPort_Test2"); 133 134 EndpointReferenceType ref = 135 EndpointReferenceUtils.getEndpointReference(url, serviceName, portName); 136 137 assertNotNull("Could not create endpoint reference", ref); 138 139 Definition def = EndpointReferenceUtils.getWSDLDefinition(manager, 140 ref); 141 assertNotNull("Could not load wsdl", def); 142 143 144 Port port = EndpointReferenceUtils.getPort(manager, ref); 145 assertNotNull("Could not find port", port); 146 } 147 148 public void testGetWSDLDefinitionEmbeddedWsdl() throws Exception { 149 WSDLManager manager = new TestWSDLManager(); 150 151 Class cls[] = new Class [] { 152 ObjectFactory.class, 153 org.objectweb.celtix.ws.addressing.wsdl.ObjectFactory.class 154 }; 155 JAXBContext context = JAXBContext.newInstance(cls); 156 Unmarshaller u = context.createUnmarshaller(); 157 158 EndpointReferenceType ref = (EndpointReferenceType) 159 ((JAXBElement<?>)u.unmarshal( 160 getClass().getResource("resources/reference2.xml"))).getValue(); 161 162 Definition def = EndpointReferenceUtils.getWSDLDefinition(manager, 163 ref); 164 assertNotNull("Could not load wsdl", def); 165 166 167 Port port = EndpointReferenceUtils.getPort(manager, ref); 168 assertNotNull("Could not find port", port); 169 } 170 171 public void testGetSchema() throws Exception { 172 WSDLManager manager = new TestWSDLManager(); 173 URL url = getClass().getResource("/wsdl/hello_world.wsdl"); 174 assertNotNull(url); 175 QName serviceName = new QName ("http://objectweb.org/hello_world_soap_http", "SOAPService_Test1"); 176 String portName = new String ("SoapPort_Test2"); 177 178 EndpointReferenceType ref = 179 EndpointReferenceUtils.getEndpointReference(url, serviceName, portName); 180 181 assertNotNull("Could not create endpoint reference", ref); 182 183 Schema schema = EndpointReferenceUtils.getSchema(manager, ref); 184 assertNotNull("Could not load schema from wsdl", schema); 185 } 186 187 public void testGetEndpointReference() throws Exception { 188 WSDLManager manager = new TestWSDLManager(); 189 URL url = getClass().getResource("/wsdl/hello_world.wsdl"); 190 assertNotNull(url); 191 QName serviceName = new QName ("http://objectweb.org/hello_world_soap_http", "SOAPService_Test1"); 192 String portName = new String ("SoapPort_Test2"); 193 194 EndpointReferenceType ref = 195 EndpointReferenceUtils.getEndpointReference(url, serviceName, portName); 196 197 assertNotNull("Could not create endpoint reference", ref); 198 199 Port port = EndpointReferenceUtils.getPort(manager, ref); 200 201 assertNotNull("Could not find port", port); 202 assertEquals(portName, port.getName()); 203 } 204 205 public void testGetAddress() throws Exception { 206 URL url = getClass().getResource("/wsdl/hello_world.wsdl"); 207 QName serviceName = new QName ("http://objectweb.org/hello_world_soap_http", "SOAPService_Test1"); 208 String portName = new String ("SoapPort_Test2"); 209 210 EndpointReferenceType ref = 211 EndpointReferenceUtils.getEndpointReference(url, serviceName, portName); 212 213 String address = EndpointReferenceUtils.getAddress(ref); 214 assertNull(address); 215 218 address = "http://localhost:8080/hello_world_soap_http"; 219 EndpointReferenceUtils.setAddress(ref, address); 220 assertEquals(address, EndpointReferenceUtils.getAddress(ref)); 221 222 EndpointReferenceUtils.setAddress(ref, null); 223 assertNull(EndpointReferenceUtils.getAddress(ref)); 224 } 225 226 public void testGetEndpointReferenceFromProvider() throws Exception { 227 WSDLManager manager = new TestWSDLManager(); 228 229 TestProvider1 provider1 = new TestProvider1(); 231 232 EndpointReferenceType ref = 233 EndpointReferenceUtils.getEndpointReference(manager, provider1); 234 assertNotNull(ref); 235 236 WebServiceProvider wsp = provider1.getClass().getAnnotation(WebServiceProvider.class); 237 assertNotNull(wsp); 238 assertEquals(wsp.portName(), EndpointReferenceUtils.getPortName(ref)); 239 assertNotNull(EndpointReferenceUtils.getServiceName(ref)); 240 241 QName portTypeName = new QName (wsp.targetNamespace(), 242 TestProvider1.class.getSimpleName()); 243 assertEquals(portTypeName, EndpointReferenceUtils.getInterfaceName(ref)); 244 245 TestProvider2 provider2 = new TestProvider2(); 247 248 ref = EndpointReferenceUtils.getEndpointReference(manager, provider2); 249 assertNotNull(ref); 250 251 assertNull(EndpointReferenceUtils.getPortName(ref)); 252 assertNull(EndpointReferenceUtils.getServiceName(ref)); 253 254 portTypeName = new QName ("", TestProvider2.class.getSimpleName()); 256 assertEquals(portTypeName, EndpointReferenceUtils.getInterfaceName(ref)); 257 258 ref = EndpointReferenceUtils.getEndpointReference(manager, ref); 260 assertNull(ref); 261 } 262 263 public void testSetServiceAndPortName() throws Exception { 264 QName serviceName1 = new QName ("http://objectweb.org/soap_http1", "SOAPService_Test1"); 265 QName portName1 = new QName ("http://objectweb.org/soap_http1", "SoapPort_Test1"); 266 267 EndpointReferenceType ref = new EndpointReferenceType(); 268 269 EndpointReferenceUtils.setServiceAndPortName(ref, serviceName1, portName1.getLocalPart()); 270 271 MetadataType metadata = ref.getMetadata(); 272 List <Object > anyList = metadata.getAny(); 273 Object obj = anyList.get(0); 274 assertTrue(obj instanceof JAXBElement); 275 obj = ((JAXBElement)obj).getValue(); 276 assertNotNull(obj); 277 assertTrue(obj instanceof ServiceNameType); 278 279 ServiceNameType snt = (ServiceNameType) obj; 280 assertEquals(serviceName1, snt.getValue()); 281 assertEquals(portName1.getLocalPart(), snt.getEndpointName()); 282 } 283 284 public void testSetInterfaceName() throws Exception { 285 QName portTypeName1 = new QName ("http://objectweb.org/soap_http1", "SOAPPortType"); 286 287 EndpointReferenceType ref = new EndpointReferenceType(); 288 289 EndpointReferenceUtils.setInterfaceName(ref, portTypeName1); 290 MetadataType metadata = ref.getMetadata(); 291 List <Object > anyList = metadata.getAny(); 292 Object obj = anyList.get(0); 293 assertTrue(obj instanceof JAXBElement); 294 obj = ((JAXBElement)obj).getValue(); 295 assertNotNull(obj); 296 assertTrue(obj instanceof AttributedQNameType); 297 298 AttributedQNameType aqt = (AttributedQNameType) obj; 299 assertEquals(portTypeName1, aqt.getValue()); 300 } 301 302 public void testSetMetaData() throws Exception { 303 EndpointReferenceType ref = new EndpointReferenceType(); 304 List <Source > metadata = new ArrayList <Source >(); 305 InputStream isXsd = getClass().getResourceAsStream("resources/addressing.xsd"); 307 StreamSource ssXsd = new StreamSource (isXsd); 308 metadata.add(ssXsd); 309 310 InputStream isWSDL = getClass().getResourceAsStream("resources/hello_world.wsdl"); 312 StreamSource ssWSDL = new StreamSource (isWSDL); 313 metadata.add(ssWSDL); 314 315 EndpointReferenceUtils.setMetadata(ref, metadata); 316 assertNotNull("MetaData should not be empty", ref.getMetadata()); 317 List <Object > anyList = ref.getMetadata().getAny(); 318 assertNotNull("AnyList in MetaData should not be empty", anyList); 319 assertEquals(2, anyList.size()); 320 321 WSDLManager manager = new TestWSDLManager(); 322 assertNotNull("Defintion element should be present", 323 EndpointReferenceUtils.getWSDLDefinition(manager, ref)); 324 isXsd.close(); 325 isWSDL.close(); 326 } 327 } 328 | Popular Tags |