| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452 |
- //
- // ServiceDescriptionReflectorTest.cs
- //
- // Author:
- // Gert Driesen <[email protected]>
- // Atsushi Enomoto <[email protected]>
- //
- // Copyright (C) 2007 Gert Driesen
- // Copyright (C) 2006 Novell, Inc.
- //
- #if !MOBILE
- using NUnit.Framework;
- using System;
- using System.Globalization;
- using System.IO;
- using System.Web.Services;
- using System.Web.Services.Description;
- using System.Web.Services.Protocols;
- using System.Xml.Schema;
- using System.Xml.Serialization;
- namespace MonoTests.System.Web.Services.Description
- {
- [TestFixture]
- public class ServiceDescriptionReflectorTest
- {
- [Test]
- public void ReflectNullableInt ()
- {
- ServiceDescriptionReflector r =
- new ServiceDescriptionReflector ();
- r.Reflect (typeof (NullableContainer), null);
- ServiceDescription sd = r.ServiceDescriptions [0];
- XmlSchema xs = sd.Types.Schemas [0];
- XmlSchemaElement el = null;
- foreach (XmlSchemaElement e in xs.Items) {
- if (e.Name != "GetNullResponse")
- continue;
- el = e;
- break;
- }
- XmlSchemaComplexType ct =
- el.SchemaType as XmlSchemaComplexType;
- XmlSchemaSequence s = ct.Particle as XmlSchemaSequence;
- XmlSchemaElement e2 = s.Items [0] as XmlSchemaElement;
- Assert.IsTrue (e2.IsNillable);
- }
- [Test]
- [Category ("NotWorking")]
- public void IncludeTest ()
- {
- ServiceDescriptionReflector reflector = new ServiceDescriptionReflector ();
- reflector.Reflect (typeof (IncludeTestServices), "http://localhost/IncludeTestServices.asmx");
- Assert.AreEqual (0, reflector.Schemas.Count, "#1");
- Assert.AreEqual (1, reflector.ServiceDescriptions.Count, "#2");
- ServiceDescription sd = reflector.ServiceDescriptions[0];
- Assert.IsNull (sd.Name, "#3");
- Assert.AreEqual (1, sd.Types.Schemas.Count, "#4");
- StringWriter sw = new StringWriter ();
- sd.Write (sw);
- Assert.AreEqual (string.Format(CultureInfo.InvariantCulture,
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>{0}" +
- "<wsdl:definitions xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:tm=\"http://microsoft.com/wsdl/mime/textMatching/\"" +
- " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:mime=\"http://schemas.xmlsoap.org/wsdl/mime/\"" +
- " xmlns:tns=\"http://tempuri.org/\" xmlns:s=\"http://www.w3.org/2001/XMLSchema\"" +
- " xmlns:soap12=\"http://schemas.xmlsoap.org/wsdl/soap12/\"" +
- " xmlns:http=\"http://schemas.xmlsoap.org/wsdl/http/\" targetNamespace=\"http://tempuri.org/\"" +
- " xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\">{0}" +
- " <wsdl:types>{0}" +
- " <s:schema elementFormDefault=\"qualified\" targetNamespace=\"http://tempuri.org/\">{0}" +
- " <s:element name=\"EchoString\">{0}" +
- " <s:complexType>{0}" +
- " <s:sequence>{0}" +
- " <s:element minOccurs=\"0\" maxOccurs=\"1\" name=\"strval\" type=\"s:string\" />{0}" +
- " </s:sequence>{0}" +
- " </s:complexType>{0}" +
- " </s:element>{0}" +
- " <s:element name=\"EchoStringResponse\">{0}" +
- " <s:complexType>{0}" +
- " <s:sequence>{0}" +
- " <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"MyTime\" type=\"s:time\" />{0}" +
- " </s:sequence>{0}" +
- " </s:complexType>{0}" +
- " </s:element>{0}" +
- " <s:element name=\"Vehicle\">{0}" +
- " <s:complexType>{0}" +
- " <s:sequence>{0}" +
- " <s:element minOccurs=\"0\" maxOccurs=\"1\" name=\"licenseNumber\" type=\"s:string\" />{0}" +
- " </s:sequence>{0}" +
- " </s:complexType>{0}" +
- " </s:element>{0}" +
- " <s:element name=\"VehicleResponse\">{0}" +
- " <s:complexType>{0}" +
- " <s:sequence>{0}" +
- " <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"NewVehicle\" nillable=\"true\" type=\"tns:Vehicle\" />{0}" +
- " </s:sequence>{0}" +
- " </s:complexType>{0}" +
- " </s:element>{0}" +
- " <s:complexType name=\"Vehicle\" abstract=\"true\">{0}" +
- " <s:sequence>{0}" +
- " <s:element minOccurs=\"0\" maxOccurs=\"1\" name=\"licenseNumber\" type=\"s:string\" />{0}" +
- " <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"make\" type=\"s:dateTime\" />{0}" +
- " <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"age\" type=\"tns:TimeSpan\" />{0}" +
- " </s:sequence>{0}" +
- " </s:complexType>{0}" +
- " <s:complexType name=\"TimeSpan\" />{0}" +
- " <s:complexType name=\"Car\">{0}" +
- " <s:complexContent mixed=\"false\">{0}" +
- " <s:extension base=\"tns:Vehicle\" />{0}" +
- " </s:complexContent>{0}" +
- " </s:complexType>{0}" +
- " </s:schema>{0}" +
- " </wsdl:types>{0}" +
- " <wsdl:message name=\"EchoStringSoapIn\">{0}" +
- " <wsdl:part name=\"parameters\" element=\"tns:EchoString\" />{0}" +
- " </wsdl:message>{0}" +
- " <wsdl:message name=\"EchoStringSoapOut\">{0}" +
- " <wsdl:part name=\"parameters\" element=\"tns:EchoStringResponse\" />{0}" +
- " </wsdl:message>{0}" +
- " <wsdl:message name=\"VehicleSoapIn\">{0}" +
- " <wsdl:part name=\"parameters\" element=\"tns:Vehicle\" />{0}" +
- " </wsdl:message>{0}" +
- " <wsdl:message name=\"VehicleSoapOut\">{0}" +
- " <wsdl:part name=\"parameters\" element=\"tns:VehicleResponse\" />{0}" +
- " </wsdl:message>{0}" +
- " <wsdl:portType name=\"IncludeTestServicesSoap\">{0}" +
- " <wsdl:operation name=\"EchoString\">{0}" +
- " <wsdl:input message=\"tns:EchoStringSoapIn\" />{0}" +
- " <wsdl:output message=\"tns:EchoStringSoapOut\" />{0}" +
- " </wsdl:operation>{0}" +
- " <wsdl:operation name=\"Vehicle\">{0}" +
- " <wsdl:input message=\"tns:VehicleSoapIn\" />{0}" +
- " <wsdl:output message=\"tns:VehicleSoapOut\" />{0}" +
- " </wsdl:operation>{0}" +
- " </wsdl:portType>{0}" +
- " <wsdl:binding name=\"IncludeTestServicesSoap\" type=\"tns:IncludeTestServicesSoap\">{0}" +
- " <soap:binding transport=\"http://schemas.xmlsoap.org/soap/http\" />{0}" +
- " <wsdl:operation name=\"EchoString\">{0}" +
- " <soap:operation soapAction=\"http://tempuri.org/EchoString\" style=\"document\" />{0}" +
- " <wsdl:input>{0}" +
- " <soap:body use=\"literal\" />{0}" +
- " </wsdl:input>{0}" +
- " <wsdl:output>{0}" +
- " <soap:body use=\"literal\" />{0}" +
- " </wsdl:output>{0}" +
- " </wsdl:operation>{0}" +
- " <wsdl:operation name=\"Vehicle\">{0}" +
- " <soap:operation soapAction=\"http://tempuri.org/Vehicle\" style=\"document\" />{0}" +
- " <wsdl:input>{0}" +
- " <soap:body use=\"literal\" />{0}" +
- " </wsdl:input>{0}" +
- " <wsdl:output>{0}" +
- " <soap:body use=\"literal\" />{0}" +
- " </wsdl:output>{0}" +
- " </wsdl:operation>{0}" +
- " </wsdl:binding>{0}" +
- " <wsdl:binding name=\"IncludeTestServicesSoap12\" type=\"tns:IncludeTestServicesSoap\">{0}" +
- " <soap12:binding transport=\"http://schemas.xmlsoap.org/soap/http\" />{0}" +
- " <wsdl:operation name=\"EchoString\">{0}" +
- " <soap12:operation soapAction=\"http://tempuri.org/EchoString\" style=\"document\" />{0}" +
- " <wsdl:input>{0}" +
- " <soap12:body use=\"literal\" />{0}" +
- " </wsdl:input>{0}" +
- " <wsdl:output>{0}" +
- " <soap12:body use=\"literal\" />{0}" +
- " </wsdl:output>{0}" +
- " </wsdl:operation>{0}" +
- " <wsdl:operation name=\"Vehicle\">{0}" +
- " <soap12:operation soapAction=\"http://tempuri.org/Vehicle\" style=\"document\" />{0}" +
- " <wsdl:input>{0}" +
- " <soap12:body use=\"literal\" />{0}" +
- " </wsdl:input>{0}" +
- " <wsdl:output>{0}" +
- " <soap12:body use=\"literal\" />{0}" +
- " </wsdl:output>{0}" +
- " </wsdl:operation>{0}" +
- " </wsdl:binding>{0}" +
- " <wsdl:service name=\"IncludeTestServices\">{0}" +
- " <wsdl:port name=\"IncludeTestServicesSoap\" binding=\"tns:IncludeTestServicesSoap\">{0}" +
- " <soap:address location=\"http://localhost/IncludeTestServices.asmx\" />{0}" +
- " </wsdl:port>{0}" +
- " <wsdl:port name=\"IncludeTestServicesSoap12\" binding=\"tns:IncludeTestServicesSoap12\">{0}" +
- " <soap12:address location=\"http://localhost/IncludeTestServices.asmx\" />{0}" +
- " </wsdl:port>{0}" +
- " </wsdl:service>{0}" +
- "</wsdl:definitions>", Environment.NewLine), sw.ToString (), "#5");
- }
- [Test]
- [Category ("NotWorking")]
- public void ReflectTypeNonDefaultBinding ()
- {
- // bug #78953
- ServiceDescriptionReflector r =
- new ServiceDescriptionReflector ();
- r.Reflect (typeof (EdaInterface), "urn:foo");
- //foreach (ServiceDescription sss in r.ServiceDescriptions) sss.Write (Console.Out);
- // It should create two wsdls, one for www.DefaultNamespace.org and
- // another for urn:localBinding:local .
- Assert.AreEqual (2, r.ServiceDescriptions.Count, "#1");
- Assert.IsNotNull (r.ServiceDescriptions ["www.DefaultNamespace.org"], "#1-1");
- ServiceDescription sd = r.ServiceDescriptions ["urn:localBinding:local"];
- Assert.IsNotNull (sd, "#1-2");
- // Soap and Soap12
- Assert.AreEqual (2, sd.Bindings.Count, "#2-2.0");
- Binding b = sd.Bindings [0];
- Assert.AreEqual ("Local", b.Name, "#3");
- }
- [Test]
- public void Bug79087 ()
- {
- ServiceDescriptionReflector r =
- new ServiceDescriptionReflector ();
- r.Reflect (typeof (Bug79807Service), "urn:foo");
- StringWriter sw = new StringWriter ();
- r.ServiceDescriptions [0].Write (sw);
- ServiceDescription.Read (new StringReader (sw.ToString ()));
- }
- [Test]
- public void EmptyAction ()
- {
- ServiceDescriptionReflector r =
- new ServiceDescriptionReflector ();
- r.Reflect (typeof (EmptyActionService), "urn:foo");
- Binding b = r.ServiceDescriptions [0].Bindings ["EmptyActionServiceSoap"];
- OperationBinding o = b.Operations [0];
- SoapOperationBinding sob = o.Extensions [0] as SoapOperationBinding;
- Assert.AreEqual (String.Empty, sob.SoapAction);
- }
- [Test]
- public void Bug332150 ()
- {
- ServiceDescriptionReflector r =
- new ServiceDescriptionReflector ();
- r.Reflect (typeof (Bug332150Service), "urn:foo");
- StringWriter sw = new StringWriter ();
- r.ServiceDescriptions [0].Write (sw);
- ServiceDescription.Read (new StringReader (sw.ToString ()));
- }
- [Test]
- public void Bug345448 ()
- {
- ServiceDescriptionReflector r =
- new ServiceDescriptionReflector ();
- r.Reflect (typeof (Bug345448Service), "urn:foo");
- ServiceDescription sd = r.ServiceDescriptions [0];
- Assert.AreEqual("Bug345448ServiceSoap", sd.Bindings [0].Name, "sd #1");
- Assert.AreEqual("Bug345448ServiceSoap12", sd.Bindings [1].Name, "sd #2");
- }
- [Test]
- public void Bug345449 ()
- {
- ServiceDescriptionReflector r =
- new ServiceDescriptionReflector ();
- r.Reflect (typeof (Bug345448Service), "urn:foo");
- ServiceDescription sd = r.ServiceDescriptions [0];
- Assert.AreEqual("Bug345448ServiceSoap", sd.Services [0].Ports [0].Name, "sd #3");
- Assert.AreEqual("Bug345448ServiceSoap12", sd.Services [0].Ports [1].Name, "sd #4");
- }
- [Test]
- public void Bug360241 ()
- {
- // Make sure the map for service client is properly created
- new Bug360241SoapHttpClientProtocol ();
- }
- public class IncludeTestServices : WebService
- {
- [WebMethod ()]
- [return: XmlElement ("MyTime", DataType = "time")]
- public DateTime EchoString ([XmlElement (DataType = "string")] string strval)
- {
- return DateTime.Now;
- }
- [WebMethod ()]
- [XmlInclude (typeof (Car))]
- public Vehicle Vehicle (string licenseNumber)
- {
- if (licenseNumber == "0") {
- Vehicle v = new Car ();
- v.licenseNumber = licenseNumber;
- return v;
- } else {
- return null;
- }
- }
- }
- [XmlRoot ("NewVehicle")]
- public abstract class Vehicle
- {
- public string licenseNumber;
- public DateTime make;
- public TimeSpan age;
- }
- public class Car : Vehicle
- {
- }
- public class NullableContainer
- {
- [WebMethod (Description="Test nullables")]
- public int? GetNull ()
- {
- return null;
- }
- }
- // bug #78953
- [WebServiceAttribute (Namespace = "www.DefaultNamespace.org")]
- [WebServiceBindingAttribute (Name = "Local", Namespace = "urn:localBinding:local")]
- public class EdaInterface : WebService
- {
- [WebMethod]
- public void Test ()
- {
- }
- [WebMethod]
- public void Test2 ()
- {
- }
- [WebMethod]
- [SoapDocumentMethodAttribute ("urn:localBinding:local:LocalBindingMethod",
- RequestNamespace = "urn:localBinding:local",
- Binding = "Local",
- Use = SoapBindingUse.Literal,
- ParameterStyle = SoapParameterStyle.Bare)]
- public void BindingMethod ()
- {
- }
- }
- // bug #79807
- public class Bug79807Item
- {
- public string stringOne;
- public string stringTwo;
- }
- public class Bug79807AnotherItem
- {
- public string stringOne;
- public string stringTwo;
- }
- [WebService]
- [SoapRpcService]
- public class Bug79807Service : WebService
- {
- [WebMethod]
- public Bug79807Item [] Method1 (int count)
- {
- Bug79807Item [] arr = new Bug79807Item [count];
- for (int i = 0;i < count;i++) {
- arr [i].stringOne = "one";
- arr [i].stringTwo = "two";
- }
- return arr;
- }
- [WebMethod]
- public Bug79807AnotherItem [] Method2 (int count)
- {
- Bug79807AnotherItem [] arr = new Bug79807AnotherItem [count];
- for (int i = 0;i < count;i++) {
- arr [i].stringOne = "one";
- arr [i].stringTwo = "two";
- }
- return arr;
- }
- }
- [WebService (Namespace = "http://tempuri.org/")]
- public class EmptyActionService : WebService
- {
- [WebMethod]
- [SoapDocumentMethod ("")]
- public string HelloWorld () {
- return "Hello World";
- }
- }
- [WebService (Namespace = "http://tempuri.org/")]
- [WebServiceBinding (ConformsTo = WsiProfiles.BasicProfile1_1)]
- public abstract class Bug332150SecureWebService : WebService
- {
- public Bug332150SecureWebService ()
- {
- }
- [WebMethod]
- public bool Login (string userName, string password)
- {
- return true;
- }
- }
- [WebService (Namespace = "http://tempuri.org/")]
- [WebServiceBinding (ConformsTo = WsiProfiles.BasicProfile1_1)]
- public class Bug332150Service : Bug332150SecureWebService
- {
- public Bug332150Service ()
- {
- }
- [WebMethod]
- public string HelloWorld ()
- {
- return "Hello World";
- }
- }
- [WebService (Namespace = "http://tempuri.org/")]
- [WebServiceBindingAttribute (Name = "AnotherBinding", Namespace = "http://tempuri.org/")]
- public class Bug345448Service : WebService
- {
- [WebMethod]
- //[SoapDocumentMethodAttribute (Binding="AnotherBinding")]
- public string HelloWorld ()
- {
- return "Hello World";
- }
- }
- [WebServiceBindingAttribute (Name = "AnotherBinding", Namespace = "http://tempuri.org/")]
- public class Bug360241SoapHttpClientProtocol : SoapHttpClientProtocol
- {
- }
- }
- }
- #endif
|