From 1d22a02de9462845e9076bb64bf76342517b33e5 Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Wed, 22 Nov 2006 07:29:33 +0000 Subject: [PATCH] preparing for my branch. svn path=/branches/atsushi/mcs/; revision=68322 --- mcs/class/System.Web.Services/.cvsignore | 12 - .../Assembly/AssemblyInfo.cs | 68 - .../System.Web.Services/Assembly/ChangeLog | 5 - .../System.Web.Services/Assembly/Locale.cs | 45 - mcs/class/System.Web.Services/ChangeLog | 153 - mcs/class/System.Web.Services/Makefile | 15 - .../Mono.System.Web.Services.csproj | 901 ---- .../ChangeLog | 60 - .../WebServicesConfigurationSectionHandler.cs | 492 -- .../XmlFormatExtensionAttribute.cs | 98 - .../XmlFormatExtensionPointAttribute.cs | 66 - .../XmlFormatExtensionPrefixAttribute.cs | 71 - .../BasicProfileChecker.cs | 586 --- .../BasicProfileViolation.cs | 81 - .../BasicProfileViolationCollection.cs | 88 - .../Binding.cs | 114 - .../BindingCollection.cs | 113 - .../System.Web.Services.Description/ChangeLog | 722 --- .../ConformanceChecker.cs | 246 - .../DocumentableItem.cs | 100 - .../ExtensionManager.cs | 232 - .../FaultBinding.cs | 62 - .../FaultBindingCollection.cs | 108 - .../HttpAddressBinding.cs | 63 - .../HttpBinding.cs | 65 - .../HttpGetProtocolImporter.cs | 86 - .../HttpGetProtocolReflector.cs | 77 - .../HttpOperationBinding.cs | 63 - .../HttpPostProtocolImporter.cs | 87 - .../HttpPostProtocolReflector.cs | 80 - .../HttpSimpleProtocolImporter.cs | 348 -- .../HttpSimpleProtocolReflector.cs | 143 - .../HttpUrlEncodedBinding.cs | 45 - .../HttpUrlReplacementBinding.cs | 45 - .../System.Web.Services.Description/Import.cs | 85 - .../ImportCollection.cs | 96 - .../InputBinding.cs | 62 - .../Message.cs | 120 - .../MessageBinding.cs | 89 - .../MessageCollection.cs | 109 - .../MessagePart.cs | 116 - .../MessagePartCollection.cs | 107 - .../MimeContentBinding.cs | 74 - .../MimeMultipartRelatedBinding.cs | 62 - .../MimePart.cs | 62 - .../MimePartCollection.cs | 85 - .../MimeTextBinding.cs | 64 - .../MimeTextMatch.cs | 147 - .../MimeTextMatchCollection.cs | 91 - .../MimeXmlBinding.cs | 63 - .../NamedItem.cs | 51 - .../Operation.cs | 130 - .../OperationBinding.cs | 127 - .../OperationBindingCollection.cs | 96 - .../OperationCollection.cs | 96 - .../OperationFault.cs | 36 - .../OperationFaultCollection.cs | 108 - .../OperationFlow.cs | 40 - .../OperationInput.cs | 37 - .../OperationMessage.cs | 96 - .../OperationMessageCollection.cs | 172 - .../OperationOutput.cs | 34 - .../OutputBinding.cs | 62 - .../System.Web.Services.Description/Port.cs | 107 - .../PortCollection.cs | 114 - .../PortType.cs | 93 - .../PortTypeCollection.cs | 113 - .../ProtocolImporter.cs | 846 ---- .../ProtocolReflector.cs | 415 -- .../Service.cs | 103 - .../ServiceCollection.cs | 116 - .../ServiceDescription.cs | 339 -- .../ServiceDescriptionBaseCollection.cs | 101 - .../ServiceDescriptionCollection.cs | 168 - .../ServiceDescriptionFormatExtension.cs | 89 - ...iceDescriptionFormatExtensionCollection.cs | 175 - .../ServiceDescriptionImportStyle.cs | 36 - .../ServiceDescriptionImportWarnings.cs | 48 - .../ServiceDescriptionImporter.cs | 291 -- .../ServiceDescriptionReflector.cs | 110 - .../ServiceDescriptionSerializerBase.cs | 1829 ------- .../Soap12AddressBinding.cs | 44 - .../Soap12Binding.cs | 47 - .../Soap12BodyBinding.cs | 44 - .../Soap12FaultBinding.cs | 44 - .../Soap12HeaderBinding.cs | 44 - .../Soap12OperationBinding.cs | 52 - .../SoapAddressBinding.cs | 63 - .../SoapBinding.cs | 81 - .../SoapBindingStyle.cs | 42 - .../SoapBindingUse.cs | 42 - .../SoapBodyBinding.cs | 111 - .../SoapExtensionImporter.cs | 65 - .../SoapExtensionReflector.cs | 63 - .../SoapFaultBinding.cs | 92 - .../SoapHeaderBinding.cs | 119 - .../SoapHeaderFaultBinding.cs | 101 - .../SoapHttpTransportImporter.cs | 49 - .../SoapOperationBinding.cs | 77 - .../SoapProtocolImporter.cs | 631 --- .../SoapProtocolReflector.cs | 212 - .../SoapTransportImporter.cs | 82 - .../System.Web.Services.Description/Types.cs | 70 - .../WebReference.cs | 112 - .../WebReferenceCollection.cs | 79 - .../WebServicesInteroperability.cs | 321 -- .../wsdl.genxs | 36 - .../System.Web.Services.Discovery/ChangeLog | 162 - .../ContractReference.cs | 191 - .../ContractSearchPattern.cs | 70 - .../DiscoveryClientDocumentCollection.cs | 87 - .../DiscoveryClientProtocol.cs | 367 -- .../DiscoveryClientReferenceCollection.cs | 88 - .../DiscoveryClientResult.cs | 83 - .../DiscoveryClientResultCollection.cs | 83 - .../DiscoveryDocument.cs | 157 - .../DiscoveryDocumentLinksPattern.cs | 69 - .../DiscoveryDocumentReference.cs | 151 - .../DiscoveryDocumentSearchPattern.cs | 69 - .../DiscoveryDocumentSerializer.cs | 527 -- .../DiscoveryExceptionDictionary.cs | 86 - .../DiscoveryReference.cs | 148 - .../DiscoveryReferenceCollection.cs | 83 - .../DiscoveryRequestHandler.cs | 110 - .../DiscoverySearchPattern.cs | 54 - .../DynamicDiscoveryDocument.cs | 92 - .../ExcludePathInfo.cs | 65 - .../SchemaReference.cs | 132 - .../SoapBinding.cs | 73 - .../XmlSchemaSearchPattern.cs | 69 - .../AnyReturnReader.cs | 70 - .../System.Web.Services.Protocols/ChangeLog | 886 ---- .../System.Web.Services.Protocols/Fault.cs | 233 - .../HtmlFormParameterReader.cs | 55 - .../HtmlFormParameterWriter.cs | 71 - .../HttpGetClientProtocol.cs | 62 - .../HttpGetTypeStubInfo.cs | 62 - .../HttpMethodAttribute.cs | 71 - .../HttpPostClientProtocol.cs | 62 - .../HttpPostTypeStubInfo.cs | 62 - .../HttpServerProtocol.cs | 97 - .../HttpSimpleClientProtocol.cs | 214 - .../HttpSimpleTypeStubInfo.cs | 152 - .../HttpSimpleWebServiceHandler.cs | 128 - .../HttpSoapWebServiceHandler.cs | 377 -- .../HttpWebClientProtocol.cs | 223 - .../InvokeCompletedEventArgs.cs | 53 - .../InvokeCompletedEventHandler.cs | 41 - .../LogicalMethodInfo.cs | 451 -- .../LogicalMethodTypes.cs | 37 - .../MatchAttribute.cs | 86 - .../System.Web.Services.Protocols/Methods.cs | 512 -- .../MimeFormatter.cs | 131 - .../MimeParameterReader.cs | 50 - .../MimeParameterWriter.cs | 78 - .../MimeReturnReader.cs | 51 - .../MimeReturnWriter.cs | 43 - .../System.Web.Services.Protocols/NOTES | 132 - .../NopReturnReader.cs | 65 - .../PatternMatcher.cs | 122 - .../ServerProtocol.cs | 136 - .../Soap12FaultCodes.cs | 72 - .../SoapClientMessage.cs | 112 - .../SoapClientMethod.cs | 48 - .../SoapDocumentMethodAttribute.cs | 135 - .../SoapDocumentServiceAttribute.cs | 88 - .../SoapDocumentationHandler.cs | 239 - .../SoapException.cs | 200 - .../SoapExtension.cs | 203 - .../SoapExtensionAttribute.cs | 55 - .../SoapFaultSubcode.cs | 64 - .../SoapHeader.cs | 166 - .../SoapHeaderAttribute.cs | 78 - .../SoapHeaderCollection.cs | 90 - .../SoapHeaderDirection.cs | 42 - .../SoapHeaderException.cs | 93 - .../SoapHttpClientProtocol.cs | 380 -- .../SoapMessage.cs | 240 - .../SoapMessageStage.cs | 40 - .../SoapParameterStyle.cs | 38 - .../SoapProtocolVersion.cs | 44 - .../SoapRpcMethodAttribute.cs | 113 - .../SoapRpcServiceAttribute.cs | 72 - .../SoapServerMessage.cs | 120 - .../SoapServerProtocol.cs | 90 - .../SoapServiceRoutingStyle.cs | 37 - .../SoapUnknownHeader.cs | 67 - .../TextReturnReader.cs | 71 - .../TypeStubManager.cs | 404 -- .../UrlEncodedParameterWriter.cs | 102 - .../UrlParameterReader.cs | 55 - .../UrlParameterWriter.cs | 57 - .../ValueCollectionParameterReader.cs | 109 - .../WebClientAsyncResult.cs | 125 - .../WebClientProtocol.cs | 198 - .../WebServiceHandler.cs | 85 - .../WebServiceHandlerFactory.cs | 176 - .../WebServiceHelper.cs | 215 - .../XmlReturnReader.cs | 100 - .../XmlReturnWriter.cs | 96 - .../System.Web.Services.dll.sources | 196 - .../System.Web.Services/ChangeLog | 114 - .../System.Web.Services/TODOAttribute.cs | 57 - .../System.Web.Services/WebMethodAttribute.cs | 117 - .../System.Web.Services/WebService.cs | 100 - .../WebServiceAttribute.cs | 75 - .../WebServiceBindingAttribute.cs | 110 - .../WebServicesDescriptionAttribute.cs | 54 - .../System.Web.Services/WsiClaims.cs | 46 - .../System.Web.Services_test.dll.sources | 16 - mcs/class/System.Web.Services/Test/.cvsignore | 9 - mcs/class/System.Web.Services/Test/ChangeLog | 15 - .../ChangeLog | 13 - .../XmlFormatExtensionAttributeTest.cs | 63 - .../BindingCollectionTest.cs | 51 - .../System.Web.Services.Description/ChangeLog | 8 - .../DocumentableItemTest.cs | 42 - .../OperationCollectionTest.cs | 50 - .../OperationMessageCollectionTest.cs | 133 - .../OperationMessageTest.cs | 39 - .../PortTypeCollectionTest.cs | 51 - .../PortTypeTest.cs | 52 - .../ServiceCollectionTest.cs | 51 - .../ServiceDescriptionCollectionTest.cs | 61 - .../SoapBodyBindingTest.cs | 82 - .../SoapOperationBindingTest.cs | 38 - .../TypesTest.cs | 39 - .../System.Web.Services.Discovery/ChangeLog | 13 - .../ContractReferenceTest.cs | 33 - .../Test/System.Web.Services/ChangeLog | 13 - .../WebMethodAttributeTest.cs | 36 - .../WebServiceAttributeTest.cs | 32 - .../Test/System.Web.Services_test.args | 12 - .../Test/standalone/.cvsignore | 16 - .../Test/standalone/ChangeLog | 200 - .../Test/standalone/Conv.asmx.template | 224 - .../Test/standalone/Conv.cs.template | 273 - .../Test/standalone/Makefile | 86 - .../Test/standalone/README | 91 - .../Test/standalone/WebServiceTest.cs | 5 - .../client/external/BankCodeEJBHomeTest.cs | 25 - .../client/external/GlobalWeatherTest.cs | 52 - .../client/external/HPcatalogTest.cs | 38 - .../client/external/IODCODESPOSTAUXTest.cs | 31 - .../client/external/TemperatureServiceTest.cs | 26 - .../client/localhost/ConvDocEncBarTest.cs | 273 - .../client/localhost/ConvDocEncWraTest.cs | 273 - .../client/localhost/ConvDocLitBarTest.cs | 273 - .../client/localhost/ConvDocLitWraTest.cs | 273 - .../client/localhost/ConvRpcTest.cs | 273 - .../client/localhost/DataServiceTest.cs | 41 - .../localhost/DuplicateArrayTestTest.cs | 42 - .../client/localhost/IncludeTestTest.cs | 29 - .../client/localhost/SessionCounterTest.cs | 24 - .../client/localhost/TestBinding4Test.cs | 47 - .../Test/standalone/cormissing.xsl | 292 -- .../Test/standalone/header.html | 7 - .../System.Web.Services/Test/standalone/msfix | 116 - .../Test/standalone/proxies.net.xml.gz | Bin 228309 -> 0 bytes .../Test/standalone/server/ConvDocEncBar.asmx | 225 - .../Test/standalone/server/ConvDocEncWra.asmx | 225 - .../Test/standalone/server/ConvDocLitBar.asmx | 225 - .../Test/standalone/server/ConvDocLitWra.asmx | 225 - .../Test/standalone/server/ConvRpc.asmx | 225 - .../Test/standalone/server/DataService.asmx | 32 - .../standalone/server/DuplicateArrayTest.asmx | 73 - .../Test/standalone/server/IncludeTest.asmx | 34 - .../standalone/server/SessionCounter.asmx | 35 - .../Test/standalone/server/Test1.asmx | 60 - .../Test/standalone/server/Test2.asmx | 81 - .../Test/standalone/server/TestBinding1.asmx | 29 - .../Test/standalone/server/TestBinding2.asmx | 29 - .../Test/standalone/server/TestBinding3.asmx | 52 - .../Test/standalone/server/TestBinding4.asmx | 53 - .../Test/standalone/server/TestBinding5.asmx | 24 - .../Test/standalone/server/TestBinding6.asmx | 25 - .../Test/standalone/server/web.config | 8 - .../Test/standalone/server/xsp.vsdisco | 4 - .../Test/standalone/services.xml | 4395 ----------------- .../Test/standalone/wsdl.ignore | 39 - .../Test/standalone/wsdlfiles.tar.gz | Bin 367789 -> 0 bytes .../Test/standalone/wstest | 1 - .../Test/standalone/wstest.cs | 994 ---- 283 files changed, 40365 deletions(-) delete mode 100755 mcs/class/System.Web.Services/.cvsignore delete mode 100644 mcs/class/System.Web.Services/Assembly/AssemblyInfo.cs delete mode 100644 mcs/class/System.Web.Services/Assembly/ChangeLog delete mode 100644 mcs/class/System.Web.Services/Assembly/Locale.cs delete mode 100644 mcs/class/System.Web.Services/ChangeLog delete mode 100644 mcs/class/System.Web.Services/Makefile delete mode 100755 mcs/class/System.Web.Services/Mono.System.Web.Services.csproj delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Configuration/ChangeLog delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Configuration/WebServicesConfigurationSectionHandler.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionPointAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionPrefixAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileChecker.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileViolation.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileViolationCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Binding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/BindingCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ChangeLog delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ConformanceChecker.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/DocumentableItem.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ExtensionManager.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/FaultBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/FaultBindingCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpAddressBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpGetProtocolImporter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpGetProtocolReflector.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpOperationBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpPostProtocolImporter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpPostProtocolReflector.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpSimpleProtocolImporter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpSimpleProtocolReflector.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpUrlEncodedBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/HttpUrlReplacementBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Import.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ImportCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/InputBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Message.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MessageBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MessageCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MessagePart.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MessagePartCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MimeContentBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MimeMultipartRelatedBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MimePart.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MimePartCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextMatch.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextMatchCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/MimeXmlBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/NamedItem.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Operation.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OperationBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OperationBindingCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OperationCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OperationFault.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OperationFaultCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OperationFlow.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OperationInput.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OperationMessage.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OperationMessageCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OperationOutput.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/OutputBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Port.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/PortCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/PortType.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/PortTypeCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ProtocolImporter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ProtocolReflector.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Service.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescription.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionBaseCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionFormatExtension.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionFormatExtensionCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImportStyle.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImportWarnings.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImporter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionReflector.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionSerializerBase.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Soap12AddressBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Soap12Binding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Soap12BodyBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Soap12FaultBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Soap12HeaderBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Soap12OperationBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapAddressBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapBindingStyle.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapBindingUse.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapBodyBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapExtensionImporter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapExtensionReflector.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapFaultBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapHeaderBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapHeaderFaultBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapHttpTransportImporter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapOperationBinding.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapProtocolImporter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapProtocolReflector.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/SoapTransportImporter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/Types.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/WebReference.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/WebReferenceCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/WebServicesInteroperability.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Description/wsdl.genxs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/ChangeLog delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/ContractReference.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/ContractSearchPattern.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientDocumentCollection.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientProtocol.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientReferenceCollection.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientResult.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientResultCollection.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocument.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentLinksPattern.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentReference.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentSearchPattern.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentSerializer.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryExceptionDictionary.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryReference.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryReferenceCollection.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryRequestHandler.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoverySearchPattern.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/DynamicDiscoveryDocument.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/ExcludePathInfo.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/SchemaReference.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/SoapBinding.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Discovery/XmlSchemaSearchPattern.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/AnyReturnReader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/ChangeLog delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/Fault.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HtmlFormParameterReader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HtmlFormParameterWriter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpGetClientProtocol.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpGetTypeStubInfo.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpMethodAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpPostClientProtocol.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpPostTypeStubInfo.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpServerProtocol.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSimpleClientProtocol.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSimpleTypeStubInfo.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSimpleWebServiceHandler.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSoapWebServiceHandler.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpWebClientProtocol.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/InvokeCompletedEventArgs.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/InvokeCompletedEventHandler.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/LogicalMethodInfo.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/LogicalMethodTypes.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/MatchAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/Methods.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/MimeFormatter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/MimeParameterReader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/MimeParameterWriter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/MimeReturnReader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/MimeReturnWriter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/NOTES delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/NopReturnReader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/PatternMatcher.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/ServerProtocol.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/Soap12FaultCodes.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapClientMessage.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapClientMethod.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentMethodAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentServiceAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentationHandler.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapException.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapExtension.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapExtensionAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapFaultSubcode.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderCollection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderDirection.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderException.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHttpClientProtocol.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessageStage.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapParameterStyle.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapProtocolVersion.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapRpcMethodAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapRpcServiceAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServerMessage.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServerProtocol.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServiceRoutingStyle.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapUnknownHeader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/TextReturnReader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/TypeStubManager.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlEncodedParameterWriter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlParameterReader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlParameterWriter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/ValueCollectionParameterReader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/WebClientAsyncResult.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/WebClientProtocol.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHandler.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHandlerFactory.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHelper.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/XmlReturnReader.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.Protocols/XmlReturnWriter.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services.dll.sources delete mode 100644 mcs/class/System.Web.Services/System.Web.Services/ChangeLog delete mode 100644 mcs/class/System.Web.Services/System.Web.Services/TODOAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services/WebMethodAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services/WebService.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services/WebServiceAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services/WebServiceBindingAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services/WebServicesDescriptionAttribute.cs delete mode 100644 mcs/class/System.Web.Services/System.Web.Services/WsiClaims.cs delete mode 100755 mcs/class/System.Web.Services/System.Web.Services_test.dll.sources delete mode 100644 mcs/class/System.Web.Services/Test/.cvsignore delete mode 100644 mcs/class/System.Web.Services/Test/ChangeLog delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Configuration/ChangeLog delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Configuration/XmlFormatExtensionAttributeTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/BindingCollectionTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/ChangeLog delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/DocumentableItemTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationCollectionTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationMessageCollectionTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationMessageTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/PortTypeCollectionTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/PortTypeTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/ServiceCollectionTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/ServiceDescriptionCollectionTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/SoapBodyBindingTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/SoapOperationBindingTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Description/TypesTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Discovery/ChangeLog delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Discovery/ContractReferenceTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services/ChangeLog delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services/WebMethodAttributeTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services/WebServiceAttributeTest.cs delete mode 100755 mcs/class/System.Web.Services/Test/System.Web.Services_test.args delete mode 100644 mcs/class/System.Web.Services/Test/standalone/.cvsignore delete mode 100644 mcs/class/System.Web.Services/Test/standalone/ChangeLog delete mode 100644 mcs/class/System.Web.Services/Test/standalone/Conv.asmx.template delete mode 100644 mcs/class/System.Web.Services/Test/standalone/Conv.cs.template delete mode 100644 mcs/class/System.Web.Services/Test/standalone/Makefile delete mode 100644 mcs/class/System.Web.Services/Test/standalone/README delete mode 100644 mcs/class/System.Web.Services/Test/standalone/WebServiceTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/external/BankCodeEJBHomeTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/external/GlobalWeatherTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/external/HPcatalogTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/external/IODCODESPOSTAUXTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/external/TemperatureServiceTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocEncBarTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocEncWraTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocLitBarTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocLitWraTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvRpcTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/localhost/DataServiceTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/localhost/DuplicateArrayTestTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/localhost/IncludeTestTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/localhost/SessionCounterTest.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/client/localhost/TestBinding4Test.cs delete mode 100644 mcs/class/System.Web.Services/Test/standalone/cormissing.xsl delete mode 100644 mcs/class/System.Web.Services/Test/standalone/header.html delete mode 100644 mcs/class/System.Web.Services/Test/standalone/msfix delete mode 100644 mcs/class/System.Web.Services/Test/standalone/proxies.net.xml.gz delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/ConvDocEncBar.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/ConvDocEncWra.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/ConvDocLitBar.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/ConvDocLitWra.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/ConvRpc.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/DataService.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/DuplicateArrayTest.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/IncludeTest.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/SessionCounter.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/Test1.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/Test2.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/TestBinding1.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/TestBinding2.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/TestBinding3.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/TestBinding4.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/TestBinding5.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/TestBinding6.asmx delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/web.config delete mode 100644 mcs/class/System.Web.Services/Test/standalone/server/xsp.vsdisco delete mode 100644 mcs/class/System.Web.Services/Test/standalone/services.xml delete mode 100644 mcs/class/System.Web.Services/Test/standalone/wsdl.ignore delete mode 100644 mcs/class/System.Web.Services/Test/standalone/wsdlfiles.tar.gz delete mode 100755 mcs/class/System.Web.Services/Test/standalone/wstest delete mode 100644 mcs/class/System.Web.Services/Test/standalone/wstest.cs diff --git a/mcs/class/System.Web.Services/.cvsignore b/mcs/class/System.Web.Services/.cvsignore deleted file mode 100755 index dade061d483..00000000000 --- a/mcs/class/System.Web.Services/.cvsignore +++ /dev/null @@ -1,12 +0,0 @@ -*.csproj.user -*.dll -*.mdb -*.pdb -*.sln -*.suo -.makefrag -.response -TestResult.xml -bin -library-deps.stamp -obj diff --git a/mcs/class/System.Web.Services/Assembly/AssemblyInfo.cs b/mcs/class/System.Web.Services/Assembly/AssemblyInfo.cs deleted file mode 100644 index 203b3196106..00000000000 --- a/mcs/class/System.Web.Services/Assembly/AssemblyInfo.cs +++ /dev/null @@ -1,68 +0,0 @@ -// -// AssemblyInfo.cs -// -// Author: -// Andreas Nahr (ClassDevelopment@A-SoftTech.com) -// -// (C) 2003 Ximian, Inc. http://www.ximian.com -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Reflection; -using System.Resources; -using System.Security; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about the System.Web.Services assembly - -#if (NET_1_0) - [assembly: AssemblyVersion("1.0.3300.0")] - [assembly: SatelliteContractVersion("1.0.3300.0")] -#elif (NET_2_0) - [assembly: AssemblyVersion ("2.0.3600.0")] - [assembly: SatelliteContractVersion ("2.0.3600.0")] -#elif (NET_1_1) - [assembly: AssemblyVersion("1.0.5000.0")] - [assembly: SatelliteContractVersion("1.0.5000.0")] -#endif - -[assembly: AssemblyTitle("System.Web.Services.dll")] -[assembly: AssemblyDescription("System.Web.Services.dll")] -[assembly: AssemblyConfiguration("Development version")] -[assembly: AssemblyCompany("MONO development team")] -[assembly: AssemblyProduct("MONO CLI")] -[assembly: AssemblyCopyright("(c) 2003 Various Authors")] -[assembly: AssemblyTrademark("")] - -[assembly: CLSCompliant(true)] -[assembly: AssemblyDefaultAlias("System.Web.Services.dll")] -[assembly: AssemblyInformationalVersion("0.0.0.1")] -[assembly: NeutralResourcesLanguage("en-US")] - -[assembly: ComVisible(false)] -[assembly: AllowPartiallyTrustedCallers] - -[assembly: AssemblyDelaySign(true)] -[assembly: AssemblyKeyFile("../msfinal.pub")] diff --git a/mcs/class/System.Web.Services/Assembly/ChangeLog b/mcs/class/System.Web.Services/Assembly/ChangeLog deleted file mode 100644 index 2770fc74366..00000000000 --- a/mcs/class/System.Web.Services/Assembly/ChangeLog +++ /dev/null @@ -1,5 +0,0 @@ -2003-07-21 Andreas Nahr - - * AssemblyInfo.cs: Added - * ChangeLog: Added - * Locale.cs: Added \ No newline at end of file diff --git a/mcs/class/System.Web.Services/Assembly/Locale.cs b/mcs/class/System.Web.Services/Assembly/Locale.cs deleted file mode 100644 index 92fbf2abe01..00000000000 --- a/mcs/class/System.Web.Services/Assembly/Locale.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -// Locale.cs -// -// Author: -// Miguel de Icaza (miguel@ximian.com) -// Andreas Nahr (ClassDevelopment@A-SoftTech.com) -// -// (C) 2001 - 2003 Ximian, Inc (http://www.ximian.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -internal sealed class Locale { - - private Locale () - { - } - - /// - /// Returns the translated message for the current locale - /// - public static string GetText (string msg) - { - return msg; - } -} diff --git a/mcs/class/System.Web.Services/ChangeLog b/mcs/class/System.Web.Services/ChangeLog deleted file mode 100644 index fe927da9cc3..00000000000 --- a/mcs/class/System.Web.Services/ChangeLog +++ /dev/null @@ -1,153 +0,0 @@ -2004-07-14 Lluis Sanchez Gual - - * System.Web.Services.dll.sources: Added new files: - System.Web.Services.Description/BasicProfileChecker.cs - System.Web.Services.Description/ConformanceChecker.cs - -2004-07-13 Lluis Sanchez Gual - - * System.Web.Services.dll.sources: Added new files: - System.Web.Services.Description/BasicProfileViolation.cs - System.Web.Services.Description/BasicProfileViolationCollection.cs - System.Web.Services.Description/NamedItem.cs - System.Web.Services.Description/Soap12AddressBinding.cs - System.Web.Services.Description/Soap12Binding.cs - System.Web.Services.Description/Soap12BodyBinding.cs - System.Web.Services.Description/Soap12FaultBinding.cs - System.Web.Services.Description/Soap12HeaderBinding.cs - System.Web.Services.Description/Soap12OperationBinding.cs - System.Web.Services.Description/WebReference.cs - System.Web.Services.Description/WebReferenceCollection.cs - System.Web.Services.Description/WebServicesInteroperability.cs - -2004-07-10 Lluis Sanchez Gual - - * System.Web.Services.dll.sources: Added 2.0 files: - System.Web.Services/WsiClaims.cs - System.Web.Services.Protocols/InvokeCompletedEventArgs.cs - System.Web.Services.Protocols/InvokeCompletedEventHandler.cs - System.Web.Services.Protocols/Soap12FaultCodes.cs - System.Web.Services.Protocols/SoapFaultSubcode.cs - System.Web.Services.Protocols/SoapProtocolVersion.cs - -2004-02-27 Lluis Sanchez Gual - - * System.Web.Services.dll.sources: Added System.Web.Services.Protocols/Fault.cs. - -2003-10-10 Lluis Sanchez Gual - - * DiscoveryDocumentSerializer.cs: New file. - -2003-10-06 Lluis Sanchez Gual - - * System.Web.Services.dll.sources: Added - System.Web.Services.Description/HttpGetProtocolImporter.cs - System.Web.Services.Description/HttpPostProtocolImporter.cs - System.Web.Services.Description/HttpSimpleProtocolImporter.cs - -2003-10-04 Lluis Sanchez Gual - - * System.Web.Services.dll.sources: Added - System.Web.Services.Description/HttpGetProtocolReflector.cs - System.Web.Services.Description/HttpPostProtocolReflector.cs - System.Web.Services.Description/HttpSimpleProtocolReflector.cs - -2003-09-28 Lluis Sanchez Gual - - * System.Web.Services.dll.sources: Added - System.Web.Services.Protocols/HttpGetTypeStubInfo.cs, - System.Web.Services.Protocols/HttpGetWebServiceHandler.cs, - System.Web.Services.Protocols/HttpPostTypeStubInfo.cs, - System.Web.Services.Protocols/HttpPostWebServiceHandler.cs, - System.Web.Services.Protocols/HttpSimpleTypeStubInfo.cs, - System.Web.Services.Protocols/HttpSimpleWebServiceHandler.cs, - System.Web.Services.Protocols/TypeStubManager.cs - -2003-09-28 Lluis Sanchez Gual - - * System.Web.Services.dll.sources: Added SoapHttpTransportImporter.cs. - -2003-09-14 Lluis Sanchez Gual - - * System.Web.Services_test.dll.sources: Added BindingCollectionTest.cs - ChangeLog DocumentableItemTest.cs OperationCollectionTest.cs - OperationMessageCollectionTest.cs OperationMessageTest.cs - PortTypeCollectionTest.cs PortTypeTest.cs ServiceCollectionTest.cs - ServiceDescriptionCollectionTest.cs - SoapBodyBindingTest.cs SoapOperationBindingTest.cs TypesTest.cs - New test files by Erik LeBel. - -2003-08-01 Lluis Sanchez Gual - - * System.Web.Services.dll.sources: Added ExtensionManager.cs, - ServiceDescriptionSerializerBase.cs - -2003-08-28 Lluis Sanchez Gual - - * System.Web.Services.dll.sources: Added System.Web.Services.Protocols.SoapDocumentationHandler - -2003-07-21 Andreas Nahr - - * System.Web.Services.dll.sources: Added Assembly/AssemblyInfo.cs, Assembly/Locale.cs - -2003-07-04 Lluis Sanchez Gual - - * list: added System.Web.Services.Protocols.HttpSoapWebServiceHandler.cs and - System.Web.Services.Protocols.WebServiceHelper.cs. - -2003-02-25 Dave Bettin - * Test: Modified test cases to conform to nunit2 guidelines - -2002-08-24 Tim Coleman - * list: - New files added to build. - -2002-08-23 Tim Coleman - * list: - New files added to build. - -2002-08-07 Tim Coleman - * System.Web.Services.build: - Added "test" target to build. - Added "clean" target to build. - * Test: - New test suites added. - -2002-08-06 Tim Coleman - * list: Added System.Web.Services.Protocols/ServerProtocol.cs - -2002-07-29 Dave Bettin - * list: added new Discovery classes - * System.Web.Services.Discovery: added stubs - * .cvsignore: added - * Mono.System.Web.Services: added VS.net project for assembly - -2002-07-25 Tim Coleman - * list: add new classes - -2002-07-24 Tim Coleman - * list: - Added System.Web.Services.Description/SoapProtocolReflector.cs - -2002-07-22 Tim Coleman - * makefile.gnu: - * list: - Modifications to make this library buildable on - linux. - - -2002-07-22 Tim Coleman - * list: Added new files from System.Web.Services.Protocols - and System.Web.Services.Configuration - -2002-07-19 Tim Coleman - * list: Added - -2002-07-19 Tim Coleman - * System.Web.Services.build: added - * System.Web.Services: - * System.Web.Services.Configuration: - * System.Web.Services.Description: - * System.Web.Services.Discovery: - * System.Web.Services.Protocols: - New directories added diff --git a/mcs/class/System.Web.Services/Makefile b/mcs/class/System.Web.Services/Makefile deleted file mode 100644 index aa6d3e1e69f..00000000000 --- a/mcs/class/System.Web.Services/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -thisdir = class/System.Web.Services -SUBDIRS = -include ../../build/rules.make - -LIBRARY = System.Web.Services.dll -LIB_MCS_FLAGS = \ - /nowarn:649 /nowarn:169 \ - /r:$(corlib) \ - /r:System.dll \ - /r:System.EnterpriseServices.dll \ - /r:System.Xml.dll \ - /r:System.Web.dll -TEST_MCS_FLAGS = $(LIB_MCS_FLAGS) -nowarn:618 - -include ../../build/library.make diff --git a/mcs/class/System.Web.Services/Mono.System.Web.Services.csproj b/mcs/class/System.Web.Services/Mono.System.Web.Services.csproj deleted file mode 100755 index 93597850fa6..00000000000 --- a/mcs/class/System.Web.Services/Mono.System.Web.Services.csproj +++ /dev/null @@ -1,901 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mcs/class/System.Web.Services/System.Web.Services.Configuration/ChangeLog b/mcs/class/System.Web.Services/System.Web.Services.Configuration/ChangeLog deleted file mode 100644 index 71d17ed5213..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Configuration/ChangeLog +++ /dev/null @@ -1,60 +0,0 @@ -2004-06-01 Gert Driesen - - * WebServicesConfigurationSectionHandler.cs: removed unused variables - -2004-02-05 Alon Gazit - - * XmlFormatExtensionAttribute.cs: - * XmlFormatExtensionPointAttribute.cs: - * XmlFormatExtensionPrefixAttribute.cs: This attribute is inherited by - derived classes.changed the AttributeUsage attribute. - -2004-01-24 Lluis Sanchez Gual - - * XmlFormatExtensionPrefixAttribute.cs: Allow multiple usage. - -2003-12-12 Lluis Sanchez Gual - - * WebServicesConfigurationSectionHandler.cs: Removed TODO. - -2003-10-03 Gonzalo Paniagua Javier - - * WebServicesConfigurationSectionHandler.cs: keep the file name of the - configuration file around for wsdlHelpGenerator. - -2003-09-25 Lluis Sanchez Gual - - * WebServicesConfigurationSectionHandler.cs: added support for - soapExtensionReflectorTypes, soapExtensionImporterTypes and - serviceDescriptionFormatExtensionTypes. - -2003-08-28 Lluis Sanchez Gual - - * XmlFormatExtensionPointAttribute.cs: Fixed constructor. Member name - was not set. - -2003-07-08 Gonzalo Paniagua Javier - - * WebServicesConfigurationSectionHandler.cs: added - support. - -2003-07-03 Gonzalo Paniagua Javier - - * WebServicesConfigurationSectionHandler.cs: support remove/clear for - . Fixed IsSupported. - -2003-07-03 Gonzalo Paniagua Javier - - * WebServicesConfigurationSectionHandler.cs: singleton. - -2003-07-02 Gonzalo Paniagua Javier - - * WebServicesConfigurationSectionHandler.cs: New file that handles - system.web/webServices section. - -2002-07-21 Tim Coleman - * ChangeLog: - * XmlFormatExtensionAttribute.cs: - * XmlFormatExtensionPointAttribute.cs: - * XmlFormatExtensionPrefixAttribute.cs: - New files added diff --git a/mcs/class/System.Web.Services/System.Web.Services.Configuration/WebServicesConfigurationSectionHandler.cs b/mcs/class/System.Web.Services/System.Web.Services.Configuration/WebServicesConfigurationSectionHandler.cs deleted file mode 100644 index 10fe7602f9e..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Configuration/WebServicesConfigurationSectionHandler.cs +++ /dev/null @@ -1,492 +0,0 @@ -// -// System.Web.Services.Configuration.WebServicesConfigurationSectionHandler -// -// Authors: -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// -// (C) 2003 Ximian, Inc (http://www.ximian.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections; -using System.Configuration; -using System.Xml; - -namespace System.Web.Services.Configuration -{ - [Flags] - enum WSProtocol - { - HttpSoap = 1, - HttpPost = 1 << 1, - HttpGet = 1 << 2, - Documentation = 1 << 3, - All = 0x0F - } - - class WSConfig - { - static WSConfig instance; - WSProtocol protocols; - string wsdlHelpPage; - string filePath; - ArrayList extensionTypes = new ArrayList(); - ArrayList extensionImporterTypes = new ArrayList(); - ArrayList extensionReflectorTypes = new ArrayList(); - ArrayList formatExtensionTypes = new ArrayList(); - - public WSConfig (WSConfig parent, object context) - { - if (parent == null) - return; - - protocols = parent.protocols; - wsdlHelpPage = parent.wsdlHelpPage; - if (wsdlHelpPage != null) - filePath = parent.filePath; - else - filePath = context as string; - } - - static WSProtocol ParseProtocol (string protoName, out string error) - { - WSProtocol proto; - error = null; - try { - proto = (WSProtocol) Enum.Parse (typeof (WSProtocol), protoName); - } catch { - error = "Invalid protocol name"; - return 0; - } - - return proto; - } - - // Methods to modify configuration values - public bool AddProtocol (string protoName, out string error) - { - if (protoName == "All") { - error = "Invalid protocol name"; - return false; - } - - WSProtocol proto = ParseProtocol (protoName, out error); - if (error != null) - return false; - - protocols |= proto; - return true; - } - - public bool RemoveProtocol (string protoName, out string error) - { - if (protoName == "All") { - error = "Invalid protocol name"; - return false; - } - - WSProtocol proto = ParseProtocol (protoName, out error); - if (error != null) - return false; - - protocols &= ~proto; - return true; - } - - public void ClearProtocol () - { - protocols = 0; - } - - // Methods to query/get configuration - public static bool IsSupported (WSProtocol proto) - { - return ((Instance.protocols & proto) == proto && (proto != 0) && (proto != WSProtocol.All)); - } - - // Properties - public string WsdlHelpPage { - get { return wsdlHelpPage; } - set { wsdlHelpPage = value; } - } - - public string ConfigFilePath { - get { return filePath; } - set { filePath = value; } - } - - static public WSConfig Instance { - get { - //TODO: use HttpContext to get the configuration - if (instance != null) - return instance; - - lock (typeof (WSConfig)) { - if (instance != null) - return instance; - - instance = (WSConfig) ConfigurationSettings.GetConfig ("system.web/webServices"); - } - - return instance; - } - } - - public ArrayList ExtensionTypes { - get { return extensionTypes; } - } - - public ArrayList ExtensionImporterTypes { - get { return extensionImporterTypes; } - } - - public ArrayList ExtensionReflectorTypes { - get { return extensionReflectorTypes; } - } - - public ArrayList FormatExtensionTypes { - get { return formatExtensionTypes; } - } - - } - - enum WSExtensionGroup - { - High, - Low - } - - class WSExtensionConfig - { - Type type; - int priority; - WSExtensionGroup group; - - public Exception SetType (string typeName) - { - Exception exc = null; - - try { - type = Type.GetType (typeName, true); - } catch (Exception e) { - exc = e; - } - - return exc; - } - - public Exception SetPriority (string prio) - { - if (prio == null || prio == "") - return null; - - Exception exc = null; - try { - priority = Int32.Parse (prio); - } catch (Exception e) { - exc = e; - } - - return exc; - } - - public Exception SetGroup (string grp) - { - if (grp == null || grp == "") - return null; - - Exception exc = null; - try { - group = (WSExtensionGroup) Int32.Parse (grp); - if (group < WSExtensionGroup.High || group > WSExtensionGroup.Low) - throw new ArgumentOutOfRangeException ("group", "Must be 0 or 1"); - } catch (Exception e) { - exc = e; - } - - return exc; - } - - // Getters - public Type Type { - get { return type; } - } - - public int Priority { - get { return priority; } - } - - public WSExtensionGroup Group { - get { return group; } - } - } - - class WebServicesConfigurationSectionHandler : IConfigurationSectionHandler - { - public object Create (object parent, object context, XmlNode section) - { - WSConfig config = new WSConfig (parent as WSConfig, context); - - if (section.Attributes != null && section.Attributes.Count != 0) - ThrowException ("Unrecognized attribute", section); - - XmlNodeList nodes = section.ChildNodes; - foreach (XmlNode child in nodes) { - XmlNodeType ntype = child.NodeType; - if (ntype == XmlNodeType.Whitespace || ntype == XmlNodeType.Comment) - continue; - - if (ntype != XmlNodeType.Element) - ThrowException ("Only elements allowed", child); - - string name = child.Name; - if (name == "protocols") { - ConfigProtocols (child, config); - continue; - } - - if (name == "soapExtensionTypes") { - ConfigSoapExtensionTypes (child, config.ExtensionTypes); - continue; - } - - if (name == "soapExtensionReflectorTypes") { - ConfigSoapExtensionTypes (child, config.ExtensionReflectorTypes); - continue; - } - - if (name == "soapExtensionImporterTypes") { - ConfigSoapExtensionTypes (child, config.ExtensionImporterTypes); - continue; - } - - if (name == "serviceDescriptionFormatExtensionTypes") { - ConfigFormatExtensionTypes (child, config); - continue; - } - - if (name == "wsdlHelpGenerator") { - string href = AttValue ("href", child, false); - if (child.Attributes != null && child.Attributes.Count != 0) - HandlersUtil.ThrowException ("Unrecognized attribute", child); - - config.ConfigFilePath = context as string; - config.WsdlHelpPage = href; - continue; - } - - ThrowException ("Unexpected element", child); - } - - return config; - } - - static void ConfigProtocols (XmlNode section, WSConfig config) - { - if (section.Attributes != null && section.Attributes.Count != 0) - ThrowException ("Unrecognized attribute", section); - - XmlNodeList nodes = section.ChildNodes; - foreach (XmlNode child in nodes) { - XmlNodeType ntype = child.NodeType; - if (ntype == XmlNodeType.Whitespace || ntype == XmlNodeType.Comment) - continue; - - if (ntype != XmlNodeType.Element) - ThrowException ("Only elements allowed", child); - - string name = child.Name; - string error; - if (name == "add") { - string protoName = AttValue ("name", child, false); - if (child.Attributes != null && child.Attributes.Count != 0) - HandlersUtil.ThrowException ("Unrecognized attribute", child); - - if (!config.AddProtocol (protoName, out error)) - ThrowException (error, child); - - continue; - } - - if (name == "remove") { - string protoName = AttValue ("name", child, false); - if (child.Attributes != null && child.Attributes.Count != 0) - HandlersUtil.ThrowException ("Unrecognized attribute", child); - - if (!config.RemoveProtocol (protoName, out error)) - ThrowException (error, child); - - continue; - } - - if (name == "clear") { - if (child.Attributes != null && child.Attributes.Count != 0) - HandlersUtil.ThrowException ("Unrecognized attribute", child); - - config.ClearProtocol (); - continue; - } - - ThrowException ("Unexpected element", child); - } - } - - static void ConfigSoapExtensionTypes (XmlNode section, ArrayList extensions) - { - if (section.Attributes != null && section.Attributes.Count != 0) - ThrowException ("Unrecognized attribute", section); - - XmlNodeList nodes = section.ChildNodes; - foreach (XmlNode child in nodes) { - XmlNodeType ntype = child.NodeType; - if (ntype == XmlNodeType.Whitespace || ntype == XmlNodeType.Comment) - continue; - - if (ntype != XmlNodeType.Element) - ThrowException ("Only elements allowed", child); - - string name = child.Name; - if (name == "add") { - string seType = AttValue ("type", child, false); - string priority = AttValue ("priority", child); - string group = AttValue ("group", child); - if (child.Attributes != null && child.Attributes.Count != 0) - HandlersUtil.ThrowException ("Unrecognized attribute", child); - - WSExtensionConfig wse = new WSExtensionConfig (); - Exception e = wse.SetType (seType); - if (e != null) - ThrowException (e.Message, child); - - e = wse.SetPriority (priority); - if (e != null) - ThrowException (e.Message, child); - - e = wse.SetGroup (group); - if (e != null) - ThrowException (e.Message, child); - - extensions.Add (wse); - continue; - } - - ThrowException ("Unexpected element", child); - } - } - - static void ConfigFormatExtensionTypes (XmlNode section, WSConfig config) - { - if (section.Attributes != null && section.Attributes.Count != 0) - ThrowException ("Unrecognized attribute", section); - - XmlNodeList nodes = section.ChildNodes; - foreach (XmlNode child in nodes) { - XmlNodeType ntype = child.NodeType; - if (ntype == XmlNodeType.Whitespace || ntype == XmlNodeType.Comment) - continue; - - if (ntype != XmlNodeType.Element) - ThrowException ("Only elements allowed", child); - - string name = child.Name; - if (name == "add") { - string typeName = AttValue ("name", child, false); - if (child.Attributes != null && child.Attributes.Count != 0) - HandlersUtil.ThrowException ("Unrecognized attribute", child); - - try { - config.FormatExtensionTypes.Add (Type.GetType (typeName, true)); - } catch (Exception e) { - ThrowException (e.Message, child); - } - continue; - } - - ThrowException ("Unexpected element", child); - } - } - - // To save some typing... - static string AttValue (string name, XmlNode node, bool optional) - { - return HandlersUtil.ExtractAttributeValue (name, node, optional); - } - - static string AttValue (string name, XmlNode node) - { - return HandlersUtil.ExtractAttributeValue (name, node, true); - } - - static void ThrowException (string message, XmlNode node) - { - HandlersUtil.ThrowException (message, node); - } - // - } - - class HandlersUtil - { - private HandlersUtil () - { - } - - static internal string ExtractAttributeValue (string attKey, XmlNode node) - { - return ExtractAttributeValue (attKey, node, false); - } - - static internal string ExtractAttributeValue (string attKey, XmlNode node, bool optional) - { - if (node.Attributes == null) { - if (optional) - return null; - - ThrowException ("Required attribute not found: " + attKey, node); - } - - XmlNode att = node.Attributes.RemoveNamedItem (attKey); - if (att == null) { - if (optional) - return null; - ThrowException ("Required attribute not found: " + attKey, node); - } - - string value = att.Value; - if (value == String.Empty) { - string opt = optional ? "Optional" : "Required"; - ThrowException (opt + " attribute is empty: " + attKey, node); - } - - return value; - } - - static internal void ThrowException (string msg, XmlNode node) - { - if (node != null && node.Name != String.Empty) - msg = msg + " (node name: " + node.Name + ") "; - throw new ConfigurationException (msg, node); - } - } - -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionAttribute.cs deleted file mode 100644 index ec4f056566a..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionAttribute.cs +++ /dev/null @@ -1,98 +0,0 @@ - // -// System.Web.Services.Configuration.XmlFormatExtensionAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Configuration { - [AttributeUsage (AttributeTargets.Class, Inherited = true)] - public sealed class XmlFormatExtensionAttribute : Attribute { - - #region Fields - - string elementName; - string ns; - Type[] extensionPoints; - - #endregion // Fields - - #region Constructors - - public XmlFormatExtensionAttribute () - { - } - - public XmlFormatExtensionAttribute (string elementName, string ns, Type extensionPoint1) - : this (elementName, ns, new Type[1] {extensionPoint1}) - { - } - - public XmlFormatExtensionAttribute (string elementName, string ns, Type[] extensionPoints) - : this () - { - this.elementName = elementName; - this.ns = ns; - this.extensionPoints = extensionPoints; - } - - public XmlFormatExtensionAttribute (string elementName, string ns, Type extensionPoint1, Type extensionPoint2) - : this (elementName, ns, new Type[2] {extensionPoint1, extensionPoint2}) - { - } - - public XmlFormatExtensionAttribute (string elementName, string ns, Type extensionPoint1, Type extensionPoint2, Type extensionPoint3) - : this (elementName, ns, new Type[3] {extensionPoint1, extensionPoint2, extensionPoint3}) - { - } - - public XmlFormatExtensionAttribute (string elementName, string ns, Type extensionPoint1, Type extensionPoint2, Type extensionPoint3, Type extensionPoint4) - : this (elementName, ns, new Type[4] {extensionPoint1, extensionPoint2, extensionPoint3, extensionPoint4}) - { - } - - #endregion // Constructors - - #region Properties - - public string ElementName { - get { return elementName; } - set { elementName = value; } - } - - public Type[] ExtensionPoints { - get { return extensionPoints; } - set { extensionPoints = value; } - } - - public string Namespace { - get { return ns; } - set { ns = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionPointAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionPointAttribute.cs deleted file mode 100644 index fd1d95b40bc..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionPointAttribute.cs +++ /dev/null @@ -1,66 +0,0 @@ - // -// System.Web.Services.Configuration.XmlFormatExtensionPointAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Configuration { - [AttributeUsage (AttributeTargets.Class, Inherited = true)] - public sealed class XmlFormatExtensionPointAttribute : Attribute { - - #region Fields - - bool allowElements; - string memberName; - - #endregion // Fields - - #region Constructors - - public XmlFormatExtensionPointAttribute (string memberName) - { - this.memberName = memberName; - allowElements = false; // FIXME - } - - #endregion // Constructors - - #region Properties - - public bool AllowElements { - get { return allowElements; } - set { allowElements = value; } - } - - public string MemberName { - get { return memberName; } - set { memberName = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionPrefixAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionPrefixAttribute.cs deleted file mode 100644 index 00007929c3c..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Configuration/XmlFormatExtensionPrefixAttribute.cs +++ /dev/null @@ -1,71 +0,0 @@ - // -// System.Web.Services.Configuration.XmlFormatExtensionPrefixAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Configuration { - [AttributeUsage (AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - public sealed class XmlFormatExtensionPrefixAttribute : Attribute { - - #region Fields - - string prefix; - string ns; - - #endregion // Fields - - #region Constructors - - public XmlFormatExtensionPrefixAttribute () - { - } - - public XmlFormatExtensionPrefixAttribute (string prefix, string ns) - : this () - { - this.prefix = prefix; - this.ns = ns; - } - - #endregion // Constructors - - #region Properties - - public string Prefix { - get { return prefix; } - set { prefix = value; } - } - - public string Namespace { - get { return ns; } - set { ns = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileChecker.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileChecker.cs deleted file mode 100644 index a499bf59284..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileChecker.cs +++ /dev/null @@ -1,586 +0,0 @@ -// -// System.Web.Services.Description.BasicProfileChecker.cs -// -// Author: -// Lluis Sanchez (lluis@novell.com) -// -// Copyright (C) Novell, Inc., 2004 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#if NET_2_0 - -using System.Xml.Schema; -using System.Xml; -using System.Collections; - -namespace System.Web.Services.Description -{ - internal class BasicProfileChecker: ConformanceChecker - { - public static BasicProfileChecker Instance = new BasicProfileChecker (); - - public override WsiClaims Claims { - get { return WsiClaims.BP10; } - } - - public override void Check (ConformanceCheckContext ctx, Import value) - { - if (value.Location == "" || value.Location == null) { - ctx.ReportRuleViolation (value, BasicProfileRules.R2007); - return; - } - - object doc = ctx.GetDocument (value.Location); - if (doc == null) ctx.ReportError (value, "Document '" + value.Location + "' not found"); - - if (doc is XmlSchema) - ctx.ReportRuleViolation (value, BasicProfileRules.R2002); - - ServiceDescription imported = doc as ServiceDescription; - if (imported == null) { - ctx.ReportRuleViolation (value, BasicProfileRules.R2001); - return; - } - - // TODO: rule R2003 - - if (imported.TargetNamespace != value.Namespace) - ctx.ReportRuleViolation (value, BasicProfileRules.R2005); - } - - public override void Check (ConformanceCheckContext ctx, ServiceDescription value) - { - - } - - public override void Check (ConformanceCheckContext ctx, ServiceDescriptionFormatExtension value) - { - if (value.Required) - ctx.ReportRuleViolation (value, BasicProfileRules.R2026); - } - - public override void Check (ConformanceCheckContext ctx, MessagePart value) - { - CheckWsdlQName (ctx, value, value.Type); - CheckWsdlQName (ctx, value, value.Element); - - if (value.DefinedByElement && value.Element.Namespace == XmlSchema.Namespace) - ctx.ReportRuleViolation (value, BasicProfileRules.R2206); - } - - public override void Check (ConformanceCheckContext ctx, Types value) - { - } - - public override void Check (ConformanceCheckContext ctx, Message value) - { - // TODO: R2113 - } - - public override void Check (ConformanceCheckContext ctx, Binding value) - { - SoapBinding sb = (SoapBinding) value.Extensions.Find (typeof(SoapBinding)); - if (sb == null || sb.Transport == null || sb.Transport == "") { - ctx.ReportRuleViolation (value, BasicProfileRules.R2701); - return; - } - - if (sb.Transport != "http://schemas.xmlsoap.org/soap/http") - ctx.ReportRuleViolation (value, BasicProfileRules.R2702); - - LiteralType type = GetLiteralBindingType (value); - if (type == LiteralType.NotLiteral) - ctx.ReportRuleViolation (value, BasicProfileRules.R2706); - else if (type == LiteralType.Inconsistent) - ctx.ReportRuleViolation (value, BasicProfileRules.R2705); - - // Collect all parts referenced from this type - - Hashtable parts = new Hashtable (); - PortType port = ctx.Services.GetPortType (value.Type); - foreach (Operation op in port.Operations) { - foreach (OperationMessage om in op.Messages) { - Message msg = ctx.Services.GetMessage (om.Message); - foreach (MessagePart part in msg.Parts) - parts.Add (part,part); - } - } - - foreach (OperationBinding ob in value.Operations) { - if (ob.Input != null) CheckMessageBinding (ctx, parts, ob.Input); - if (ob.Output != null) CheckMessageBinding (ctx, parts, ob.Output); - foreach (FaultBinding fb in ob.Faults) - CheckMessageBinding (ctx, parts, fb); - } - - if (parts.Count > 0) - ctx.ReportRuleViolation (value, BasicProfileRules.R2209); - } - - public override void Check (ConformanceCheckContext ctx, OperationBinding ob) - { - } - - void CheckMessageBinding (ConformanceCheckContext ctx, Hashtable portParts, MessageBinding value) - { - SoapBodyBinding sbb = (SoapBodyBinding) value.Extensions.Find (typeof(SoapBodyBinding)); - Message msg = FindMessage (ctx, value); - LiteralType bt = GetLiteralBindingType (value.OperationBinding.Binding); - - if (sbb != null) - { - if (bt == LiteralType.Document) - { - if (sbb.Parts != null && sbb.Parts.Length > 1) - ctx.ReportRuleViolation (value, BasicProfileRules.R2201); - - if (sbb.Parts == null) { - if (msg.Parts != null && msg.Parts.Count > 1) - ctx.ReportRuleViolation (value, BasicProfileRules.R2210); - if (msg.Parts.Count == 1) - portParts.Remove (msg.Parts[0]); - } - else { - if (sbb.Parts.Length == 0 && msg.Parts.Count == 1) { - portParts.Remove (msg.Parts[0]); - } else { - foreach (string part in sbb.Parts) { - MessagePart mp = msg.FindPartByName (part); - portParts.Remove (mp); - if (!mp.DefinedByElement) - ctx.ReportRuleViolation (value, BasicProfileRules.R2204); - } - } - } - } - else if (bt == LiteralType.Rpc) - { - if (sbb.Parts != null) { - foreach (string part in sbb.Parts) { - MessagePart mp = msg.FindPartByName (part); - portParts.Remove (mp); - if (!mp.DefinedByType) - ctx.ReportRuleViolation (value, BasicProfileRules.R2203); - } - } - } - } - - SoapHeaderBinding shb = (SoapHeaderBinding) value.Extensions.Find (typeof(SoapHeaderBinding)); - if (shb != null) { - Message hm = ctx.Services.GetMessage (shb.Message); - MessagePart mp = hm.FindPartByName (shb.Part); - portParts.Remove (mp); - if (mp != null && !mp.DefinedByElement) - ctx.ReportRuleViolation (value, BasicProfileRules.R2205); - } - - SoapHeaderFaultBinding shfb = (SoapHeaderFaultBinding) value.Extensions.Find (typeof(SoapHeaderFaultBinding)); - if (shfb != null) { - Message hm = ctx.Services.GetMessage (shfb.Message); - MessagePart mp = hm.FindPartByName (shfb.Part); - portParts.Remove (mp); - if (mp != null && !mp.DefinedByElement) - ctx.ReportRuleViolation (value, BasicProfileRules.R2205); - } - - // TODO: SoapFaultBinding ?? - } - - Message FindMessage (ConformanceCheckContext ctx, MessageBinding mb) - { - PortType pt = ctx.Services.GetPortType (mb.OperationBinding.Binding.Type); - foreach (Operation op in pt.Operations) - if (op.IsBoundBy (mb.OperationBinding)) { - OperationMessage om; - if (mb is InputBinding) om = op.Messages.Input; - else if (mb is OutputBinding) om = op.Messages.Output; - else if (mb is FaultBinding) om = op.Messages.Fault; - else return null; - return ctx.Services.GetMessage (om.Message); - } - return null; - } - - public override void Check (ConformanceCheckContext ctx, Operation value) { } - public override void Check (ConformanceCheckContext ctx, OperationMessage value) { } - public override void Check (ConformanceCheckContext ctx, Port value) { } - public override void Check (ConformanceCheckContext ctx, PortType value) { } - public override void Check (ConformanceCheckContext ctx, Service value) { } - - public override void Check (ConformanceCheckContext ctx, XmlSchema s) - { - if (s.TargetNamespace == null || s.TargetNamespace == "") { - foreach (XmlSchemaObject ob in s.Items) - if (!(ob is XmlSchemaImport) && !(ob is XmlSchemaAnnotation)) { - ctx.ReportRuleViolation (s, BasicProfileRules.R2105); - break; - } - } - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaImport value) - { - XmlSchema doc = ctx.GetDocument (value.SchemaLocation) as XmlSchema; - if (doc == null) ctx.ReportError (value, "Schema '" + value.SchemaLocation + "' not found"); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaAttribute value) - { - CheckSchemaQName (ctx, value, value.RefName); - CheckSchemaQName (ctx, value, value.SchemaTypeName); - - XmlAttribute[] uatts = value.UnhandledAttributes; - if (uatts != null) { - foreach (XmlAttribute at in uatts) - if (at.LocalName == "arrayType" && at.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/") - ctx.ReportRuleViolation (value, BasicProfileRules.R2111); - } - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaAttributeGroupRef value) - { - CheckSchemaQName (ctx, value, value.RefName); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaComplexContentExtension value) - { - CheckSchemaQName (ctx, value, value.BaseTypeName); - if (value.BaseTypeName.Namespace == "http://schemas.xmlsoap.org/soap/encoding/" && value.BaseTypeName.Name == "Array") - ctx.ReportRuleViolation (value, BasicProfileRules.R2110); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaComplexContentRestriction value) - { - CheckSchemaQName (ctx, value, value.BaseTypeName); - if (value.BaseTypeName.Namespace == "http://schemas.xmlsoap.org/soap/encoding/" && value.BaseTypeName.Name == "Array") - ctx.ReportRuleViolation (value, BasicProfileRules.R2110); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaElement value) - { - CheckSchemaQName (ctx, value, value.RefName); - CheckSchemaQName (ctx, value, value.SubstitutionGroup); - CheckSchemaQName (ctx, value, value.SchemaTypeName); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaGroupRef value) - { - CheckSchemaQName (ctx, value, value.RefName); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaKeyref value) - { - CheckSchemaQName (ctx, value, value.Refer); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaSimpleContentExtension value) - { - CheckSchemaQName (ctx, value, value.BaseTypeName); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaSimpleContentRestriction value) - { - CheckSchemaQName (ctx, value, value.BaseTypeName); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaSimpleTypeList value) - { - CheckSchemaQName (ctx, value, value.ItemTypeName); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaSimpleTypeRestriction value) - { - CheckSchemaQName (ctx, value, value.BaseTypeName); - } - - public override void Check (ConformanceCheckContext ctx, XmlSchemaSimpleTypeUnion value) - { - foreach (XmlQualifiedName name in value.MemberTypes) - CheckSchemaQName (ctx, value, name); - } - - // Helper methods - - void CheckWsdlQName (ConformanceCheckContext ctx, object element, XmlQualifiedName name) - { - if (name == null || name == XmlQualifiedName.Empty) return; - if (name.Namespace == "" || name.Namespace == XmlSchema.Namespace) return; - - if (ctx.ServiceDescription.Types != null && ctx.ServiceDescription.Types.Schemas != null) - { - foreach (XmlSchema s in ctx.ServiceDescription.Types.Schemas) - { - if (s.TargetNamespace == name.Namespace) return; - foreach (XmlSchemaObject i in s.Includes) - if ((i is XmlSchemaImport) && ((XmlSchemaImport)i).Namespace == name.Namespace) return; - } - } - ctx.ReportRuleViolation (element, BasicProfileRules.R2101); - } - - void CheckSchemaQName (ConformanceCheckContext ctx, object element, XmlQualifiedName name) - { - if (name == null || name == XmlQualifiedName.Empty) return; - if (name.Namespace == "" || name.Namespace == XmlSchema.Namespace) return; - if (ctx.CurrentSchema.TargetNamespace == name.Namespace) return; - - foreach (XmlSchemaObject i in ctx.CurrentSchema.Includes) - if ((i is XmlSchemaImport) && ((XmlSchemaImport)i).Namespace == name.Namespace) return; - - ctx.ReportRuleViolation (element, BasicProfileRules.R2102); - } - - LiteralType GetLiteralBindingType (Binding b) - { - SoapBinding sb = (SoapBinding) b.Extensions.Find (typeof(SoapBinding)); - SoapBindingStyle style = (sb != null) ? sb.Style : SoapBindingStyle.Document; - if (style == SoapBindingStyle.Default) style = SoapBindingStyle.Document; - - foreach (OperationBinding ob in b.Operations) { - SoapOperationBinding sob = (SoapOperationBinding) ob.Extensions.Find (typeof(SoapOperationBinding)); - if (sob.Style != SoapBindingStyle.Default && sob.Style != style) - return LiteralType.Inconsistent; - if (ob.Input != null) { - SoapBodyBinding sbb = (SoapBodyBinding) ob.Input.Extensions.Find (typeof(SoapBodyBinding)); - if (sbb != null && sbb.Use != SoapBindingUse.Literal) return LiteralType.NotLiteral; - SoapFaultBinding sfb = (SoapFaultBinding) ob.Input.Extensions.Find (typeof(SoapFaultBinding)); - if (sfb != null && sfb.Use != SoapBindingUse.Literal) return LiteralType.NotLiteral; - SoapHeaderBinding shb = (SoapHeaderBinding) ob.Input.Extensions.Find (typeof(SoapHeaderBinding)); - if (shb != null && shb.Use != SoapBindingUse.Literal) return LiteralType.NotLiteral; - SoapHeaderFaultBinding shfb = (SoapHeaderFaultBinding) ob.Input.Extensions.Find (typeof(SoapHeaderFaultBinding)); - if (shfb != null && shfb.Use != SoapBindingUse.Literal) return LiteralType.NotLiteral; - } - if (ob.Output != null) { - SoapBodyBinding sbb = (SoapBodyBinding) ob.Output.Extensions.Find (typeof(SoapBodyBinding)); - if (sbb != null && sbb.Use != SoapBindingUse.Literal) return LiteralType.NotLiteral; - SoapFaultBinding sfb = (SoapFaultBinding) ob.Input.Extensions.Find (typeof(SoapFaultBinding)); - if (sfb != null && sfb.Use != SoapBindingUse.Literal) return LiteralType.NotLiteral; - SoapHeaderBinding shb = (SoapHeaderBinding) ob.Input.Extensions.Find (typeof(SoapHeaderBinding)); - if (shb != null && shb.Use != SoapBindingUse.Literal) return LiteralType.NotLiteral; - SoapHeaderFaultBinding shfb = (SoapHeaderFaultBinding) ob.Input.Extensions.Find (typeof(SoapHeaderFaultBinding)); - if (shfb != null && shfb.Use != SoapBindingUse.Literal) return LiteralType.NotLiteral; - } - } - if (style == SoapBindingStyle.Document) return LiteralType.Document; - else return LiteralType.Rpc; - } - - enum LiteralType { - NotLiteral, - Inconsistent, - Rpc, - Document - } - } - - internal class BasicProfileRules - { - - // 3.2 Conformance of Services, Consumers and Registries - - // Can't check: R0001 - - // 3.3 Conformance Annotation in Descriptions - - // Can't check: R0002, R0003 - - // 3.4 Conformance Annotation in Messages - - // Can't check: R0004, R0005, R0006, R0007 - - // 3.5 Conformance Annotation in Registry Data - - // UDDI related: R3020, R3030, R3021, R3005, R3004. - - // 4.1 XML Representation of SOAP Messages - - // Rules not related to service description - - // 4.2 SOAP Processing Model - - // Rules not related to service description - - // 4.3 Use of SOAP in HTTP - - // Rules not related to service description - - // 5.1 Document structure - - public static readonly ConformanceRule R2001 = new ConformanceRule ( - "R2001", - "A DESCRIPTION MUST only use the WSDL \"import\" statement to import another WSDL description", - ""); - - public static readonly ConformanceRule R2002 = new ConformanceRule ( - "R2002", - "To import XML Schema Definitions, a DESCRIPTION MUST use the XML Schema \"import\" statement", - ""); - - public static readonly ConformanceRule R2007 = new ConformanceRule ( - "R2007", - "A DESCRIPTION MUST specify a non-empty location attribute on the wsdl:import element", - ""); - - public static readonly ConformanceRule R2005 = new ConformanceRule ( - "R2005", - "The targetNamespace attribute on the wsdl:definitions element of a description that is being imported MUST have same the value as the namespace attribute on the wsdl:import element in the importing DESCRIPTION", - ""); - - public static readonly ConformanceRule R2026 = new ConformanceRule ( - "R2026", - "A DESCRIPTION SHOULD NOT include extension elements with a wsdl:required attribute value of \"true\" on any WSDL construct (wsdl:binding, wsdl:portType, wsdl:message, wsdl:types or wsdl:import) that claims conformance to the Profile", - ""); - - // 5.2 Types - - public static readonly ConformanceRule R2101 = new ConformanceRule ( - "R2101", - "A DESCRIPTION MUST NOT use QName references to elements in namespaces that have been neither imported, nor defined in the referring WSDL document", - ""); - - public static readonly ConformanceRule R2102 = new ConformanceRule ( - "R2102", - "A QName reference to a Schema component in a DESCRIPTION MUST use the namespace defined in the targetNamespace attribute on the xsd:schema element, or to a namespace defined in the namespace attribute on an xsd:import element within the xsd:schema element", - ""); - - public static readonly ConformanceRule R2105 = new ConformanceRule ( - "R2105", - "All xsd:schema elements contained in a wsdl:types element of a DESCRIPTION MUST have a targetNamespace attribute with a valid and non-null value, UNLESS the xsd:schema element has xsd:import and/or xsd:annotation as its only child element(s)", - ""); - - public static readonly ConformanceRule R2110 = new ConformanceRule ( - "R2110", - "In a DESCRIPTION, array declarations MUST NOT extend or restrict the soapenc:Array type", - ""); - - public static readonly ConformanceRule R2111 = new ConformanceRule ( - "R2111", - "In a DESCRIPTION, array declarations MUST NOT use wsdl:arrayType attribute in the type declaration", - ""); - - // R2112: Suggestion. - // R2113: Not related to servide description - // R2114: Suggestion. - - // 5.3 Messages - - public static readonly ConformanceRule R2201 = new ConformanceRule ( - "R2201", - "A document-literal binding in a DESCRIPTION MUST, in each of its soapbind:body element(s), have at most one part listed in the parts attribute, if the parts attribute is specified", - ""); - - public static readonly ConformanceRule R2210 = new ConformanceRule ( - "R2210", - "If a document-literal binding in a DESCRIPTION does not specify the parts attribute on a soapbind:body element, the corresponding abstract wsdl:message MUST define zero or one wsdl:parts", - ""); - - public static readonly ConformanceRule R2203 = new ConformanceRule ( - "R2203", - "An rpc-literal binding in a DESCRIPTION MUST refer, in its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the type attribute", - ""); - - public static readonly ConformanceRule R2204 = new ConformanceRule ( - "R2204", - "A document-literal binding in a DESCRIPTION MUST refer, in each of its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the element attribute", - ""); - - public static readonly ConformanceRule R2205 = new ConformanceRule ( - "R2205", - "A wsdl:binding in a DESCRIPTION MUST refer, in each of its soapbind:header, soapbind:headerfault and soapbind:fault elements, only to wsdl:part element(s) that have been defined using the element attribute", - ""); - - public static readonly ConformanceRule R2209 = new ConformanceRule ( - "R2209", - "A wsdl:binding in a DESCRIPTION SHOULD bind every wsdl:part of a wsdl:message in the wsdl:portType to which it refers to one of soapbind:body, soapbind:header, soapbind:fault or soapbind:headerfault", - ""); - - public static readonly ConformanceRule R2206 = new ConformanceRule ( - "R2206", - "A wsdl:message in a DESCRIPTION containing a wsdl:part that uses the element attribute MUST refer, in that attribute, to a global element declaration", - ""); - - // R2211: Related to message structure - // R2202: Suggestion. - // R2207: Optional - // R2208: Optional - - // 5.4 Port Types - - // TODO - - // 5.5 Bindings - - // TODO - - // 5.6 SOAP Binding - - public static readonly ConformanceRule R2701 = new ConformanceRule ( - "R2701", - "The wsdl:binding element in a DESCRIPTION MUST be constructed so that its soapbind:binding child element specifies the transport attribute", - ""); - - public static readonly ConformanceRule R2702 = new ConformanceRule ( - "R2702", - "A wsdl:binding element in a DESCRIPTION MUST specify the HTTP transport protocol with SOAP binding. Specifically, the transport attribute of its soapbind:binding child MUST have the value \"http://schemas.xmlsoap.org/soap/http\"", - ""); - - public static readonly ConformanceRule R2705 = new ConformanceRule ( - "R2705", - "A wsdl:binding in a DESCRIPTION MUST use either be a rpc-literal binding or a document-literal binding", - ""); - - public static readonly ConformanceRule R2706 = new ConformanceRule ( - "R2706", - "A wsdl:binding in a DESCRIPTION MUST use the value of \"literal\" for the use attribute in all soapbind:body, soapbind:fault, soapbind:header and soapbind:headerfault elements", - ""); - - // R2707: Interpretation rule: A wsdl:binding in a DESCRIPTION that contains one or more soapbind:body, soapbind:fault, soapbind:header or soapbind:headerfault elements that do not specify the use attribute MUST be interpreted as though the value "literal" had been specified in each case - // R2709: Suggestion. - - // TODO - } - - /* - The following rules cannot be checked: - R2002, R2003, R4004, R4003, R2022, R2023, R2004, R2010, R2011 - There is no access to the unerlying xml - - The following are suggestions: - R2008, R2112 - - The following are optional - R4002, R2020, R2021, R2024, R2114 - - Can't be checked: - R2025 - - Process related - R2027 - - TODO: section 5.3 - */ -} - -#endif diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileViolation.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileViolation.cs deleted file mode 100644 index 869e59d1743..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileViolation.cs +++ /dev/null @@ -1,81 +0,0 @@ -// -// System.Web.Services.Description.BasicProfileViolation.cs -// -// Author: -// Lluis Sanchez (lluis@novell.com) -// -// Copyright (C) Novell, Inc., 2004 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#if NET_2_0 - -using System.Collections.Specialized; -using System.Web.Services; - -namespace System.Web.Services.Description -{ - public class BasicProfileViolation - { - WsiClaims _claims; - StringCollection _elements; - ConformanceRule _rule; - - internal BasicProfileViolation (WsiClaims claims, ConformanceRule rule) - { - _claims = claims; - _rule = rule; - _elements = new StringCollection (); - } - - public WsiClaims Claims { - get { return _claims; } - } - - public string Details { - get { return _rule.Details; } - } - - public StringCollection Elements { - get { return _elements; } - } - - public string NormativeStatement { - get { return _rule.NormativeStatement ; } - } - - public string Recommendation { - get { return _rule.Recommendation; } - } - - public override string ToString () - { - string res = NormativeStatement + ": " + Details; - foreach (string s in Elements) - res += "\n - " + s; - return res; - } - } -} - -#endif diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileViolationCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileViolationCollection.cs deleted file mode 100644 index 1e06fbd8304..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileViolationCollection.cs +++ /dev/null @@ -1,88 +0,0 @@ -// -// System.Web.Services.Description.BasicProfileViolationCollection.cs -// -// Author: -// Lluis Sanchez (lluis@novell.com) -// -// Copyright (C) Novell, Inc., 2004 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#if NET_2_0 - -using System.Collections; - -namespace System.Web.Services.Description -{ - public class BasicProfileViolationCollection: CollectionBase - { - public BasicProfileViolationCollection () - { - } - - public BasicProfileViolation this [int index] { - get { return (BasicProfileViolation) List [index]; } - set { List [index] = value; } - } - - public int Add (BasicProfileViolation violation) - { - return List.Add (violation); - } - - public bool Contains (BasicProfileViolation violation) - { - return List.Contains (violation); - } - - public void CopyTo (BasicProfileViolation[] array, int index) - { - List.CopyTo (array, index); - } - - public int IndexOf (BasicProfileViolation violation) - { - return List.IndexOf (violation); - } - - public void Insert (int index, BasicProfileViolation violation) - { - List.Insert (index, violation); - } - - public void Remove (BasicProfileViolation violation) - { - List.Remove (violation); - } - - public override string ToString() - { - string s = ""; - foreach (BasicProfileViolation violation in List) - s += violation.ToString () + "\n"; - return s; - } - } -} - -#endif diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/Binding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/Binding.cs deleted file mode 100644 index 82ac7e18473..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/Binding.cs +++ /dev/null @@ -1,114 +0,0 @@ -// -// System.Web.Services.Description.Binding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml; -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - [XmlFormatExtensionPoint ("Extensions")] - public sealed class Binding : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - - #region Fields - - ServiceDescriptionFormatExtensionCollection extensions; -#if !NET_2_0 - string name; -#endif - OperationBindingCollection operations; - ServiceDescription serviceDescription; - XmlQualifiedName type; - - #endregion // Fields - - #region Constructors - - public Binding () - { - extensions = new ServiceDescriptionFormatExtensionCollection (this); -#if !NET_2_0 - name = String.Empty; -#endif - operations = new OperationBindingCollection (this); - serviceDescription = null; - type = XmlQualifiedName.Empty; - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public ServiceDescriptionFormatExtensionCollection Extensions { - get { return extensions; } - } - -#if !NET_2_0 - [XmlAttribute ("name", DataType = "NCName")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - - [XmlElement ("operation")] - public OperationBindingCollection Operations { - get { return operations; } - } - - public ServiceDescription ServiceDescription { - get { return serviceDescription; } - } - - [XmlAttribute ("type")] - public XmlQualifiedName Type { - get { return type; } - set { type = value; } - } - - #endregion // Properties - - #region Methods - - internal void SetParent (ServiceDescription serviceDescription) - { - this.serviceDescription = serviceDescription; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/BindingCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/BindingCollection.cs deleted file mode 100644 index 147a4b5e4d8..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/BindingCollection.cs +++ /dev/null @@ -1,113 +0,0 @@ -// -// System.Web.Services.Description.BindingCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - public sealed class BindingCollection : ServiceDescriptionBaseCollection { - - #region Fields - - ServiceDescription serviceDescription; - - #endregion // Fields - - #region Constructors - - internal BindingCollection (ServiceDescription serviceDescription) - : base (serviceDescription) - { - } - - #endregion // Constructors - - #region Properties - - public Binding this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - return (Binding) List[index]; - } - set { List [index] = value; } - } - - public Binding this [string name] { - get { return (Binding) Table[name]; } - } - - #endregion // Properties - - #region Methods - - public int Add (Binding binding) - { - Insert (Count, binding); - return (Count - 1); - } - - public bool Contains (Binding binding) - { - return List.Contains (binding); - } - - public void CopyTo (Binding[] array, int index) - { - List.CopyTo (array, index); - } - - protected override string GetKey (object value) - { - if (!(value is Binding)) - throw new InvalidCastException (); - return ((Binding) value).Name; - } - - public int IndexOf (Binding binding) - { - return List.IndexOf (binding); - } - - public void Insert (int index, Binding binding) - { - List.Insert (index, binding); - } - - public void Remove (Binding binding) - { - List.Remove (binding); - } - - protected override void SetParent (object value, object parent) - { - ((Binding) value).SetParent ((ServiceDescription) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ChangeLog b/mcs/class/System.Web.Services/System.Web.Services.Description/ChangeLog deleted file mode 100644 index c4278e6ee1e..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ChangeLog +++ /dev/null @@ -1,722 +0,0 @@ -2005-04-11 Lluis Sanchez Gual - - * ServiceDescriptionCollection.cs: Notify the parent importer - when a service description is added. - * ServiceDescriptionImporter.cs: Register wsdl docs added to the - collection. - -2005-02-07 Lluis Sanchez Gual - - * HttpSimpleProtocolImporter.cs: Fixed warning. - -2004-11-08 Lluis Sanchez Gual - - * HttpPostProtocolReflector.cs: Avoid generating an empty part attribute. - This was causing problems when importing the wsdl from MS Visual Studio. - -2004-10-26 Lluis Sanchez Gual - - * ProtocolImporter.cs, HttpSimpleProtocolImporter.cs, - SoapProtocolImporter.cs: When appsettingurlkey is provided, generate - code that reads the url from the config file, instead of doing it at - the moment of generation. This fixes bug #68795. - -2004-10-01 Lluis Sanchez Gual - - * HttpSimpleProtocolImporter.cs: Fix import of arrays of primitive types. - -2004-09-13 Lluis Sanchez Gual - - * ServiceDescriptionReflector.cs: Don't generate empty schemas. - -2004-09-03 Lluis Sanchez Gual - - * ProtocolImporter.cs: Fixing the fix. The generated class must always - be added. - -2004-09-01 Lluis Sanchez Gual - - * BasicProfileChecker.cs: Some small fixes. - * FaultBinding.cs: Removed useless code. - * HttpSimpleProtocolImporter.cs, SoapProtocolImporter.cs: Take into account - that now we may be generating code for a binding which is not referenced - by any port. In this case Port is null. - * MessageBinding.cs: Properly set the parent operation binding. - * OperationBinding.cs: When adding messages, set its parent property. - * ProtocolImporter.cs: Support generation of proxies for wsdl documents - that do not have any Service entry. In this case, it now generates - a proxy for every binding. - -2004-08-24 Lluis Sanchez Gual - - * BasicProfileChecker.cs: Implemented more rules. - * ConformanceChecker.cs: Added service list property in - ConformanceCheckContext. - * MessagePart.cs: Added some convenient internal properties. - * OperationMessageCollection.cs: Added property for getting the fault - message. - * ServiceDescriptionFormatExtensionCollection.cs: The find method now - can return subclasses of the provided class. - * WebServicesInteroperability.cs: Set the context schema when processing - a schema. - -2004-07-28 Lluis Sanchez Gual - - * BasicProfileChecker.cs, ConformanceChecker.cs, - WebServicesInteroperability.cs: Fixed build errors. I commited before - it was ready :-(. - -2004-07-28 Lluis Sanchez Gual - - * BasicProfileChecker.cs: Added checks for R2101, R2102, R2105, R2110, R2111 - * ConformanceChecker.cs: Added check methods for schema objects. - * WebServicesInteroperability.cs: Added checks for schema objects. - -2004-07-26 Lluis Sanchez Gual - - * HttpSimpleProtocolImporter.cs: Implemented internal method to support - the new asyc model. - * ProtocolImporter.cs: Generate code for the new async model. - Added support for generating server skeletons in addition to client - proxies. - * ServiceDescriptionImporter.cs: Removed unneded check. - * SoapProtocolImporter.cs: Added support for generating server skeletons in - addition to client proxies. - -2004-07-23 Lluis Sanchez Gual - - * ServiceDescriptionImporter.cs: Fixed bug when getting documents from a - reference. - * SoapProtocolImporter.cs: Create code exportes using the corrent generation - options. Added final attribute to the generated methods (so generated - methods are not virtual any more). - * WebServicesInteroperability.cs: Fixed bug when getting documents from a - reference. Added check for Import elements. - -2004-07-22 Lluis Sanchez Gual - - * ProtocolImporter.cs: Added some internal properties needed for 2.0 - features. - * ServiceDescriptionImporter.cs: Implemented some 2.0 methods. - * SoapProtocolImporter.cs: Create xml importers using the correct - ImportContext and generation options. - * WebReference.cs: It is now internal for 1.1 profile. Implemented some - properties. - * CodeGenerationOptions.cs: Made internal in 1.1 profile. - * ImportContext.cs: Implemented. - * XmlSchemaImporter.cs: Implemented some 2.0 constructors. - -2004-07-14 Lluis Sanchez Gual - - * ConformanceChecker.cs, BasicProfileChecker.cs: New files that implement - the basic infrastructure for basic profile conformance checking. - * BasicProfileViolation.cs: Take normative information from the rule object. - * BasicProfileViolationCollection.cs: Added Add method. - * ServiceDescriptionFormatExtension.cs: Little fix. - * WebServicesInteroperability.cs: Implemented basic support for conformance - checking. - -2004-07-13 Lluis Sanchez Gual - - * Binding.cs, Message.cs, MessageBinding.cs, MessagePart.cs, Operation.cs, - OperationBinding.cs, OperationMessage.cs, Port.cs, PortType.cs, - Service.cs, ServiceDescription.cs, - Name property moved to NamedItem in 2.0. - * DocumentableItem.cs, ServiceDescriptionFormatExtension.cs, - ServiceDescriptionImportWarnings.cs, ServiceDescriptionImporter.cs, - SoapFaultBinding.cs: Added 2.0 api. - * BasicProfileViolation.cs, BasicProfileViolationCollection.cs, - NamedItem.cs, Soap12AddressBinding.cs, Soap12Binding.cs, - Soap12BodyBinding.cs, Soap12FaultBinding.cs, Soap12HeaderBinding.cs, - Soap12OperationBinding.cs, WebReference.cs, WebReferenceCollection.cs, - WebServicesInteroperability.cs: Mostly implemented new 2.0 classes. - -2004-07-01 Lluis Sanchez Gual - - * SoapProtocolReflector.cs: Don't generate wsdl for unknown header - attributes. - -2004-06-25 Lluis Sanchez Gual - - * HttpSimpleProtocolImporter.cs: Added null check. The XmlTypeMapping for - the return type will be null if the method returns void. - -2004-06-22 Lluis Sanchez Gual - - * HttpSimpleProtocolImporter.cs: Import return types as XmlTypeMapping, - not as XmlMemberMapping. This allows the use of the correct AddMetadata - method for generating attributes. - -2004-06-11 Gert Driesen - - * SoapProtocolImporter.cs: Added stub for missing IsSoapEncodingPresent - method - * MimeContentBinding.cs: removed extra Default attribute from Part - -2004-06-10 Lluis Sanchez Gual - - * HttpSimpleProtocolImporter.cs: Add needed XmlInclude attributes to the - generated class. Generate the correct data type for input parameters. - * SoapProtocolImporter.cs: Like in MS.NET, take the first output parameter - as the return value of the method. When generating a header variable, - use the type name as the base for the variable name, not the part name. - -2004-06-02 Lluis Sanchez Gual - - * HttpSimpleProtocolImporter.cs: Fixed case of generated methods to match - MS behavior. Always use import input parameters as System.String. - * ProtocolImporter.cs: Remove _x0020_ from type names. - * SoapProtocolImporter.cs: Fixed case of generated methods to match - MS behavior. - -2004-06-01 Gert Driesen - - * Binding.cs: removed extra XmlIgnore attribute on ServiceDescription - * Import.cs: removed extra XmlIgnore attribute on ServiceDescription - * Message.cs: removed extra XmlIgnore attribute on ServiceDescription - * MessageBinding.cs: removed extra DefaultValue attribute from Name, - removed extra XmlIgnoreAttribute from OperationBinding - * MessagePart.cs: removed extra XmlIgnore attribute on Message - * MimeContentBinding.cs: removed extra DefaultValue attribute on Part - * Operation.cs: removed extra XmlIgnore attribute on PortType - * OperationBinding.cs: removed extra XmlIgnore attribute on Binding - * OperationMessage.cs: removed extra XmlIgnore attribute on Operation - * Port.cs: removed extra XmlIgnore attribute on Service - * PortType.cs: removed extra XmlIgnore on ServiceDescription - * Service.cs: removed extra XmlIgnore on ServiceDescription - * ServiceDescriptionFormatExtension.cs: removed extra XmlIgnore - attribute on Parent - * SoapHeaderBinding.cs: added XmlElement attribute on Fault - * HttpSimpleProtocolImporter.cs: removed unused variable - * ServiceDescriptionImporter.cs: removed unused variable - * SoapProtocolImporter.cs: removed unused variable - -2004-05-25 Lluis Sanchez Gual - - * BindingCollection.cs: Fixed this[string] property. - -2004-05-24 Lluis Sanchez Gual - - * ProtocolImporter.cs: issue a warning if no services have been found. - -2004-03-02 Lluis Sanchez Gual - - * SoapBinding.cs: Added missing attributes. The class is not sealed. - * SoapBodyBinding.cs: Removed unneeded attributes. - -2004-03-02 Lluis Sanchez Gual - - * ProtocolImporter.cs: Little fix in schema classification. - -2004-02-27 Lluis Sanchez Gual - - * ExtensionManager.cs: Create all serializers for soap extensions at once. - * HttpSimpleProtocolImporter.cs: Assign the correct set of schemas to the - schema importers (do not mix literal schemas with encoded schemas). - * ProtocolImporter.cs: Added LiteralSchemas and EncodedSchemas properties. - Separation between literal and encoded schemas is needed to avoid importing - for example a literal schema as encoded. Also implemented ClasifySchemas, - which separates literal from encoded schemas. I really don't like doing it - in this way, but I haven't found another way. - * SoapProtocolImporter.cs: Add type include attributes to the generated - proxy classes. - -2004-02-11 Lluis Sanchez Gual - - * SoapProtocolReflector.cs: Fixed bug #53247. Element name asigned to the - message part (in literal+bare format) was incorrect. - -2004-01-27 Lluis Sanchez Gual - - * SoapProtocolImporter.cs, SoapProtocolReflector.cs: Support methods with - "any" as return type. In this case, the part of the return message contains - a reference to the type that describes the "any" element. - -2004-01-24 Lluis Sanchez Gual - - * ExtensionManager.cs: Support more than one XmlFormatExtensionPrefixAttribute - un one soap extension. - * HttpSimpleProtocolImporter.cs: Made class internal. - * HttpSimpleProtocolReflector.cs.cs: ReflectMethodBinding(): GET and POST - do not use method bindings. Return null. - * ProtocolReflector.cs: Several fixes: do not generate binding if it doesn't - have any operation, avoid port and binding name colisions, and other minor - fixes. - * ServiceDescription.cs: Collect the namespaces to be added to the root - element of a serializaed wsdl document from the soap extensions. - * ServiceDescriptionSerializerBase.cs: Made classes internal. - * SoapAddressBinding.cs, SoapFaultBinding.cs, SoapOperationBinding.cs, - SoapProtocolImporter.cs: Class should not be sealed. - * SoapBodyBinding.cs: Set the correct class attributes. - * SoapHeaderBinding.cs: Class should not be sealed. Added missing method. - * SoapHeaderFaultBinding.cs: Fixed class attributes. - -2004-01-21 Lluis Sanchez Gual - - * HttpSimpleProtocolImporter.cs: pass the web service class list to the xml - importers to make sure that no data classes are created with the same - name as the web service. - * ProtocolImporter.cs: Use port name as class name only if there is more - than one port using the same protocol. This fixes big #52742. - -2004-01-19 Lluis Sanchez Gual - - * HttpSimpleProtocolReflector.cs, SoapProtocolReflector.cs: - Use GetWebServiceLiteralNamespace instead of WebServiceLiteralNamespace. - * ProtocolReflector.cs: Port names must be unique in a service description. - This fixes bug #53019. - * ProtocolImporter.cs: Little fix. - -2004-01-14 Lluis Sanchez Gual - - * ProtocolImporter.cs, SoapProtocolImporter.cs: Added support for OneWay - operations (those don't have output message). - * SoapProtocolReflector.cs: Set the correct element name and - namespace for headers (those are not managed like other data classes). - -2004-01-13 Lluis Sanchez Gual - - * ProtocolReflector.cs: in the case a new ServiceDescription is created, - the name of the BindingInfo was not copied into the new ServiceDescriptor. - Patch by Yaacov Akiba Slama. - -2003-12-12 Lluis Sanchez Gual - - * HttpSimpleProtocolImporter.cs: In ImportOutMembersMapping(), support part - without element name (use anyType in this case). - In GetOutMimeFormatter(), support MimeContentBinding. - * ProtocolImporter.cs, SoapProtocolImporter.cs: Improved error and warning - handling. Minor fixes. - -2003-11-11 Lluis Sanchez Gual - - * ServiceDescription.cs, SoapBinding.cs, SoapHeaderBinding.cs, - SoapHeaderFaultBinding.cs: Removed some TODOs and FIXMEs. - -2003-10-20 Lluis Sanchez Gual - - * ServiceDescription.cs: Fixed implementation of CanRead. - -2003-10-15 Lluis Sanchez Gual - - * MessageBinding.cs: Name property should be null by default. - * ProtocolImporter.cs: Take into account the previous change. - -2003-10-15 Lluis Sanchez Gual - - * HttpSimpleProtocolReflector.cs, ProtocolReflector.cs: - Fixed naming of messages. - * ProtocolImporter.cs: It now iterates through all bindings. It creates - a namespace for all bindings. - * ServiceDescriptionImporter.cs: Some code moved to ProtocolImporter. - * SoapProtocolImporter.cs: Improved support for RPC format. It now is working. - -2003-10-13 Lluis Sanchez Gual - - * HttpSimpleProtocolReflector.cs, SoapProtocolReflector.cs: - Get the namespace for literal types from LogicalTypeInfo, since it may not - be the same as the service namespace. - * ProtocolReflector.cs: Access LogicalTypeInfo to get WS info common to - all protocols. - * ServiceDescription.cs: Added soap/encoded namespace. - * SoapProtocolImporter.cs: Added some bits of RPC format support. - -2003-10-06 Lluis Sanchez Gual - - * ProtocolImporter.cs: Moved some code to ServiceDescriptionImporter. - WebServiceBindingAttribute addition moved to SoapProtocolImporter. - Moved GetServiceUrl here (from SoapProtocolImporter). - * ServiceDescriptionImporter.cs: Added support for HttpGet and HttpPost - importers. - * SoapProtocolImporter.cs: Minor fixes. - * HttpSimpleProtocolImporter.cs, HttpGetProtocolImporter.cs, - HttpPostProtocolImporter.cs: new files that implement HttpGet and HttpPost - importers. - -2003-10-04 Lluis Sanchez Gual - - * ProtocolReflector.cs: The ReflectionImporter property now creates a - reflector if the TypeStubInfo does not provide one. - Do not create XmlSchemaExporter. Take it from the service reflector, sine - it must be reused for all protocol reflectors. Moved some code to - SoapProtocolReflector, since it cannot be reused for all reflectors. - * ServiceDescriptionReflector.cs: Reflect the type for all available - protocols. - * SoapProtocolReflector.cs: Moved here some code from ProtoclReflector. - * HttpGetProtocolReflector.cs, HttpPostProtocolReflector.cs, - HttpSimpleProtocolReflector.cs: new files. - -2003-10-01 Lluis Sanchez Gual - - * ProtocolReflector.cs: Adapted to the changes in TypeStubInfo. Moved some - common code to ServiceDescriptionReflector. - * ServiceDescriptionReflector.cs: Moved some code from ProtocolReflector.cs - -2003-09-28 Lluis Sanchez Gual - - * ExtensionManager.cs: Read extension types from the configuration file. - Added methods for getting extension importers and reflectors. - * ProtocolImporter.cs: Implemented. - * ProtocolReflector.cs: Implemented. - * ServiceDescriptionCollection.cs: Fixed some methods for finding wsdl - elements. - * ServiceDescriptionImporter.cs: moved most of the code to ProtocolImporter. - * ServiceDescriptionReflector.cs: moved most of the code to - ProtocolReflector and SoapProtocolReflector. - * SoapProtocolImporter.cs: Implemented. - * SoapProtocolReflector.cs: Implemented. - * SoapTransportImporter.cs: Implemented. - * SoapHttpTransportImporter.cs: Implemented. - * wsdl.genxs: Added. - -2003-09-14 Lluis Sanchez Gual - - * DocumentableItem.cs MimeContentBinding.cs OperationMessage.cs - OperationMessageCollection.cs PortCollection.cs PortType.cs - PortTypeCollection.cs ServiceCollection.cs ServiceDescriptionCollection.cs - SoapBodyBinding.cs SoapOperationBinding.cs: Several fixes by Erik LeBel - * ServiceDescriptionImporter.cs: - * ServiceDescriptionSerializerBase.cs: regenerated after the changes in - the service description changes. - * ServiceDescriptionReflector.cs: Fixed generation of message parts in - bare format. - -2003-09-11 Lluis Sanchez Gual - - * ServiceDescriptionImporter.cs, ServiceDescriptionReflector.cs: Added - first bits of encoded format support. - -2003-09-04 Lluis Sanchez Gual - - * ServiceDescription.cs: minor fixes. - * ServiceDescriptionImporter.cs: initial implementation. - * ServiceDescriptionReflector.cs: Added support for bare parameter style. - Added support for encoded format. - -2003-09-01 Lluis Sanchez Gual - - * ExtensionManager.cs: Added - * ServiceDescriptionSerializerBase.cs. Added - * ServiceDescription.cs: Reenabled suspport for serialization. - * ServiceDescriptionReflector.cs: Import type and method documentation. - -2003-08-29 Lluis Sanchez Gual - - * ServiceDescription.cs: Disabled suspport for serialization, until I found - an easy way of generate serialization readers and writers. - -2003-08-28 Lluis Sanchez Gual - - * MessageBinding.cs: Added default value attribute for Name property. - * OperationMessage.cs: Added default value attribute for Name property. - * ServiceDescription.cs: Changed order of some properties, so they are - serialized in the right order. - Added GetNamespaceList(), which returns the namespaces to add when serializing - the document. - Implemented classes ServiceDescriptionSerializer and ServiceDescriptionWriter, - that extends the XmlSerializer by adding suport for XmlFormatExtensions. - * ServiceDescriptionReflector.cs: Basic implementation (no support for - extensions yet). - * SoapBinding.cs: Fixed namespace name. - * SoapBodyBinding.cs: Added null check in PartsString property. - * SoapOperationBinding.cs: Fixed namespace name. - -2003-07-22 Lluis Sanchez Gual - - * Binding.cs, Import.cs, Message.cs, MessageBinding.cs, MessagePart.cs, - Operation.cs, OperationBinding.cs, OperationMessage.cs, Port.cs, - PortType.cs, Service.cs: Added XmlIgnore attributes to properties - referencing parent objects. - * OperationMessageCollection.cs: Fixed wrong OnInsert method - * ServiceDescription.cs: Removed unneeded methods in - ServiceDescriptionSerializer. - -2002-08-20 Tim Coleman - * ServiceDescription.cs: - Add ServiceDescription.ServiceDescriptionSerializer - class. - * ServiceDescriptionFormatExtensionCollection.cs: - Remove reference to "parent". - -2002-08-19 Tim Coleman - * BindingCollection.cs: - Use base constructor, remove SetParent call - * FaultBindingCollection.cs: - * ImportCollection.cs: - * MessageCollection.cs: - * MessagePartCollection.cs: - * OperationBindingCollection.cs: - * OperationCollection.cs: - * OperationFaultCollection.cs: - * PortCollection.cs: - * PortTypeCollection.cs: - * ServiceCollection.cs: - * ServiceDescriptionFormatExtensionCollection.cs: - Use base constructor - * ServiceDescriptionCollection.cs: - Use base constructor, Remove SetParent method - * ServiceDescriptionBaseCollection.cs: - Make parent object private as according to - class status page. - * OperationMessageCollection.cs: - Use base constructor - Remove excess break's to avoid compiler warning - Remove TODO attribute (confirmed default retval) - -2002-08-15 Tim Coleman - * FaultBindingCollection.cs: - * ImportCollection.cs: - * MessageCollection.cs: - * MessagePartCollection.cs: - * OperationBindingCollection.cs: - * OperationCollection.cs: - * OperationFaultCollection.cs: - * OperationMessageCollection.cs: - * PortCollection.cs: - * PortTypeCollection.cs: - * ServiceCollection.cs: - * ServiceDescriptionFormatExtensionCollection.cs: - Use parent from ServiceDescriptionBaseCollection - * ServiceDescriptionCollection.cs: - Use parent from ServiceDescriptionBaseCollection - Implement SetParent () method - * ServiceDescriptionBaseCollection.cs: - Add "parent" object. - Add SetParent call to OnSet() and OnInsert () - -2002-08-12 Tim Coleman - * Operation.cs: - Fix ParameterOrderString in case ParameterOrder is - null. - * BindingCollection.cs: - Remove Table handling on insert/delete/indexer - because it is handled in base class. - * ServiceDescriptionBaseCollection.cs: - Only add an element to the hashtable if its GetKey () - method does not return null. - -2002-08-09 Tim Coleman - * BindingCollection.cs: - * ServiceDescriptionCollection.cs: - Implement Set indexer - * FaultBindingCollection.cs: - * MessageCollection.cs: - * MessagePartCollection.cs: - * OperationFaultCollection.cs: - * PortCollection.cs: - * PortTypeCollection.cs: - * ServiceCollection.cs: - Implement Set indexer, code cleanup - * Message.cs: - Implement FindPartByName () - * OperationMessageCollection.cs: - Alter OnSet () method - * ServiceDescriptionBaseCollection.cs: - Implement some methods. - * ServiceDescriptionFormatExtensionCollection.cs: - Implement Find (), FindAll (), OnValidate () methods - - -2002-08-06 Tim Coleman - * ServiceDescription.cs: - Add namespace definitions when serializing. - * HttpBinding.cs: - Change namespace definition (wsdl was spelt wsld) - -2002-08-06 Tim Coleman - * ServiceDescription.cs: - Change the XmlElement name from "type" to "types" for - the Types object - -2002-08-06 Tim Coleman - * ServerProtocol.cs: - Add new class as implied by class statuc page. - SoapServerProtocol is derived from this. - * SoapServerProtocol.cs: - Change base class to ServerProtocol. - * SoapClientMethod.cs: - This class should not be sealed. - -2002-08-03 Tim Coleman - * SoapProtocolReflector.cs: - Removed SoapBinding property and made the class - not sealed to agree with class reference page. - -2002-08-03 Tim Coleman - * ServiceDescriptionBaseCollection.cs: - Removed some NotImplementedException()'s so that - it runs. - -2002-07-26 Tim Coleman - * ServiceDescription.cs: - Changed the creation of the XmlSerializer after - consulting the System.Xml.Serialization namespace - and trying to serialize a document. Now works somewhat! - -2002-07-25 Tim Coleman - * OperationMessageCollection.cs: - Some implementation of this class after consulting a - WSDL reference. Now validates the inputs. - -2002-07-24 Tim Coleman - * ProtocolImporter.cs: - * ProtocolReflector.cs: - Some implementation of these classes. MonoTODO's begone! - * SoapProtocolImporter.cs: - Changed description to literal string "Soap" - * SoapProtocolReflector.cs: - Added a new class based on guesswork and conjecture. - -2002-07-24 Tim Coleman - * ServiceDescription.cs: - Implement Read/Write methods for serialization/ - deserialization. - -2002-07-23 Tim Coleman - * ServiceDescription.cs: - Add XmlIgnore attribute to ServiceDescriptions property - * OperationFlow.cs: - * ServiceDescriptionImportWarnings.cs: - Explicitly set values in enumeration to match - .NET. - -2002-07-22 Tim Coleman - * Binding.cs: - * BindingCollection.cs: - * DocumentableItem.cs: - * FaultBinding.cs: - * FaultBindingCollection.cs: - * HttpAddressBinding.cs: - * HttpBinding.cs: - * HttpOperationBinding.cs: - * HttpUrlEncodedBinding.cs: - * HttpUrlReplacementBinding.cs: - * Import.cs: - * ImportCollection.cs: - * InputBinding.cs: - * Message.cs: - * MessageBinding.cs: - * MessageCollection.cs: - * MessagePart.cs: - * MessagePartCollection.cs: - * MimeContentBinding.cs: - * MimeMultipartRelatedBinding.cs: - * MimePart.cs: - * MimePartCollection.cs: - * MimeTextBinding.cs: - * MimeTextMatch.cs: - * MimeTextMatchCollection.cs: - * MimeXmlBinding.cs: - * Operation.cs: - * OperationBinding.cs: - * OperationBindingCollection.cs: - * OperationCollection.cs: - * OperationFaultCollection.cs: - * OperationFlow.cs: - * OperationMessage.cs: - * OperationMessageCollection.cs: - * OutputBinding.cs: - * Port.cs: - * PortCollection.cs: - * PortType.cs: - * PortTypeCollection.cs: - * ProtocolImporter.cs: - * Service.cs: - * ServiceCollection.cs: - * ServiceDescription.cs: - * ServiceDescriptionBaseCollection.cs: - * ServiceDescriptionCollection.cs: - * ServiceDescriptionFormatExtension.cs: - * ServiceDescriptionFormatExtensionCollection.cs: - * ServiceDescriptionImportWarnings.cs: - * SoapAddressBinding.cs: - * SoapBinding.cs: - * SoapBindingStyle.cs: - * SoapBindingUse.cs: - * SoapBodyBinding.cs: - * SoapExtensionImporter.cs: - * SoapExtensionReflector.cs: - * SoapFaultBinding.cs: - * SoapHeaderBinding.cs: - * SoapHeaderFaultBinding.cs: - * SoapOperationBinding.cs: - * SoapTransportImporter.cs: - * Types.cs: - 1. Add missing attributes as determined by reflection - 2. Fix protection levels where appropriate - 3. Add missing items where appropriate - Basically, this was a change to remove all the X's from - the project status page for this namespace :) - -2002-07-19 Tim Coleman - * Binding.cs: - * BindingCollection.cs: - * ChangeLog: - * DocumentableItem.cs: - * FaultBinding.cs: - * FaultBindingCollection.cs: - * HttpAddressBinding.cs: - * HttpBinding.cs: - * HttpOperationBinding.cs: - * HttpUrlEncodedBinding.cs: - * HttpUrlReplacementBinding.cs: - * Import.cs: - * ImportCollection.cs: - * InputBinding.cs: - * Message.cs: - * MessageBinding.cs: - * MessageCollection.cs: - * MessagePart.cs: - * MessagePartCollection.cs: - * MimeContentBinding.cs: - * MimeMultipartRelatedBinding.cs: - * MimePart.cs: - * MimePartCollection.cs: - * MimeTextBinding.cs: - * MimeTextMatch.cs: - * MimeTextMatchCollection.cs: - * MimeXmlBinding.cs: - * Operation.cs: - * OperationBinding.cs: - * OperationBindingCollection.cs: - * OperationCollection.cs: - * OperationFault.cs: - * OperationFaultCollection.cs: - * OperationFlow.cs: - * OperationInput.cs: - * OperationMessage.cs: - * OperationMessageCollection.cs: - * OperationOutput.cs: - * OutputBinding.cs: - * Port.cs: - * PortCollection.cs: - * PortType.cs: - * PortTypeCollection.cs: - * ProtocolImporter.cs: - * ProtocolReflector.cs: - * Service.cs: - * ServiceCollection.cs: - * ServiceDescription.cs: - * ServiceDescriptionBaseCollection.cs: - * ServiceDescriptionCollection.cs: - * ServiceDescriptionFormatExtension.cs: - * ServiceDescriptionFormatExtensionCollection.cs: - * ServiceDescriptionImportStyle.cs: - * ServiceDescriptionImportWarnings.cs: - * ServiceDescriptionImporter.cs: - * ServiceDescriptionReflector.cs: - * SoapAddressBinding.cs: - * SoapBinding.cs: - * SoapBindingStyle.cs: - * SoapBindingUse.cs: - * SoapBodyBinding.cs: - * SoapExtensionImporter.cs: - * SoapExtensionReflector.cs: - * SoapFaultBinding.cs: - * SoapHeaderBinding.cs: - * SoapHeaderFaultBinding.cs: - * SoapOperationBinding.cs: - * SoapProtocolImporter.cs: - * SoapTransportImporter.cs: - * Types.cs: - Initial implementation diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ConformanceChecker.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ConformanceChecker.cs deleted file mode 100644 index a4a037aa75e..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ConformanceChecker.cs +++ /dev/null @@ -1,246 +0,0 @@ -// -// System.Web.Services.Description.ConformanceChecker.cs -// -// Author: -// Lluis Sanchez (lluis@novell.com) -// -// Copyright (C) Novell, Inc., 2004 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#if NET_2_0 - -using System.Xml.Schema; -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - internal abstract class ConformanceChecker - { - public abstract WsiClaims Claims { get; } - - public virtual void Check (ConformanceCheckContext ctx, Binding value) { } - public virtual void Check (ConformanceCheckContext ctx, MessageBinding value) { } - public virtual void Check (ConformanceCheckContext ctx, Import value) { } - public virtual void Check (ConformanceCheckContext ctx, Message value) { } - public virtual void Check (ConformanceCheckContext ctx, MessagePart value) { } - public virtual void Check (ConformanceCheckContext ctx, Operation value) { } - public virtual void Check (ConformanceCheckContext ctx, OperationBinding value) { } - public virtual void Check (ConformanceCheckContext ctx, OperationMessage value) { } - public virtual void Check (ConformanceCheckContext ctx, Port value) { } - public virtual void Check (ConformanceCheckContext ctx, PortType value) { } - public virtual void Check (ConformanceCheckContext ctx, Service value) { } - public virtual void Check (ConformanceCheckContext ctx, ServiceDescription value) { } - public virtual void Check (ConformanceCheckContext ctx, Types value) { } - public virtual void Check (ConformanceCheckContext ctx, ServiceDescriptionFormatExtension value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaObject value) {} - - public virtual void Check (ConformanceCheckContext ctx, XmlSchema s) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaImport value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaAll value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaAnnotation value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaAttribute value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaAttributeGroup value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaAttributeGroupRef value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaComplexContentExtension value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaChoice value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaComplexContent value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaComplexContentRestriction value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaComplexType value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaElement value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaGroup value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaGroupRef value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaIdentityConstraint value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaKeyref value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaRedefine value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaSequence value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaSimpleContent value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaSimpleContentExtension value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaSimpleContentRestriction value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaSimpleType value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaSimpleTypeList value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaSimpleTypeRestriction value) {} - public virtual void Check (ConformanceCheckContext ctx, XmlSchemaSimpleTypeUnion value) {} - } - - internal class ConformanceRule - { - public string NormativeStatement; - public string Details; - public string Recommendation; - - public ConformanceRule (string name, string desc, string rec) - { - NormativeStatement = name; - Details = desc; - Recommendation = rec; - } - } - - internal class ConformanceCheckContext - { - BasicProfileViolationCollection violations; - ServiceDescriptionCollection collection; - WebReference webReference; - ConformanceChecker checker; - public ServiceDescription ServiceDescription; - public XmlSchema CurrentSchema; - XmlSchemas schemas = new XmlSchemas (); - ServiceDescriptionCollection services; - - public ConformanceCheckContext (ServiceDescriptionCollection collection, BasicProfileViolationCollection violations) - { - this.collection = collection; - this.violations = violations; - foreach (ServiceDescription sd in collection) { - if (sd.Types != null && sd.Types.Schemas != null) - schemas.Add (sd.Types.Schemas); - } - services = collection; - } - - public ConformanceCheckContext (WebReference webReference, BasicProfileViolationCollection violations) - { - this.webReference = webReference; - this.violations = violations; - services = new ServiceDescriptionCollection (); - - foreach (object doc in webReference.Documents.Values) - { - if (doc is XmlSchema) - schemas.Add ((XmlSchema)doc); - else if (doc is ServiceDescription) { - ServiceDescription sd = (ServiceDescription) doc; - services.Add (sd); - if (sd.Types != null && sd.Types.Schemas != null) - schemas.Add (sd.Types.Schemas); - } - } - } - - public ConformanceChecker Checker { - get { return checker; } - set { checker = value; } - } - - public BasicProfileViolationCollection Violations { - get { return violations; } - } - - public XmlSchemas Schemas { - get { return schemas; } - } - - public ServiceDescriptionCollection Services { - get { return services; } - } - - public object GetDocument (string url) - { - if (collection != null) - return null; - else - return webReference.Documents [url]; - } - - public void ReportError (object currentObject, string msg) - { - throw new InvalidOperationException (msg + " (" + GetDescription (currentObject) + ")"); - } - - public void ReportRuleViolation (object currentObject, ConformanceRule rule) - { - BasicProfileViolation v = null; - foreach (BasicProfileViolation bpv in violations) { - if (bpv.NormativeStatement == rule.NormativeStatement) { - v = bpv; - break; - } - } - - if (v == null) { - v = new BasicProfileViolation (checker.Claims, rule); - violations.Add (v); - } - - v.Elements.Add (GetDescription (currentObject)); - } - - string GetDescription (object obj) - { - if (obj is ServiceDescription) { - return "Service Description '" + ServiceDescription.TargetNamespace + "'"; - } - else if (obj is Binding || obj is Message || obj is PortType || obj is Service) { - return GetNamedItemDescription (obj, ServiceDescription); - } - else if (obj is Import) { - return GetItemDescription (obj, ServiceDescription, ((Import)obj).Location); - } - else if (obj is MessageBinding) { - return GetNamedItemDescription (obj, ((MessageBinding)obj).OperationBinding); - } - else if (obj is MessagePart) { - return GetNamedItemDescription (obj, ((MessagePart)obj).Message); - } - else if (obj is Operation) { - return GetNamedItemDescription (obj, ((Operation)obj).PortType); - } - else if (obj is OperationBinding) { - return GetNamedItemDescription (obj, ((OperationBinding)obj).Binding); - } - else if (obj is OperationMessage) { - return GetNamedItemDescription (obj, ((OperationMessage)obj).Operation); - } - else if (obj is Port) { - return GetNamedItemDescription (obj, ((Port)obj).Service); - } - else if (obj is ServiceDescriptionFormatExtension) { - ServiceDescriptionFormatExtension ext = (ServiceDescriptionFormatExtension) obj; - return GetItemDescription (ext, ext.Parent, ext.GetType().Name); - } - else if (obj is XmlSchema) { - if (ServiceDescription == null) - return "Schema '" + ((XmlSchema)obj).TargetNamespace + "'"; - else - return "Schema '" + ((XmlSchema)obj).TargetNamespace + "', in " + GetDescription (ServiceDescription); - } - else if (obj is XmlSchemaObject) { - return obj.GetType().Name + " in Schema " + GetDescription (CurrentSchema); - } - return obj.GetType().Name; - } - - string GetNamedItemDescription (object item, object parent) - { - return item.GetType().Name + " '" + ((NamedItem)item).Name + "', in " + GetDescription (parent); - } - - string GetItemDescription (object item, object parent, string name) - { - return item.GetType().Name + " '" + name + "' in " + GetDescription (parent); - } - } -} - -#endif diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/DocumentableItem.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/DocumentableItem.cs deleted file mode 100644 index 4bcca149a74..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/DocumentableItem.cs +++ /dev/null @@ -1,100 +0,0 @@ -// -// System.Web.Services.Description.DocumentableItem.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Xml.Serialization; -using System.Xml; - -namespace System.Web.Services.Description { - public abstract class DocumentableItem { - - #region Fields - - string documentation; - -#if NET_2_0 - XmlElement docElement; -#endif - - #endregion // Fields - - #region Constructors - - protected DocumentableItem () - { - documentation = String.Empty; - } - - #endregion // Constructors - - #region Properties - -#if NET_2_0 - [XmlIgnore] - public string Documentation { - get { - return docElement != null ? docElement.InnerText : ""; - } - - set { - if (value == null) - docElement = null; - else { - XmlDocument doc = new XmlDocument (); - docElement = doc.CreateElement ("wsdl", "documentation", "http://schemas.xmlsoap.org/wsdl/"); - docElement.InnerText = value; - } - } - } - - [System.Runtime.InteropServices.ComVisible(false)] - [XmlAnyElement (Name="documentation", Namespace="http://schemas.xmlsoap.org/wsdl/")] - public XmlElement DocumentationElement { - get { return docElement; } - set { docElement = value; } - } -#else - [XmlElement ("documentation")] - [DefaultValue ("")] - public string Documentation { - get { return documentation; } - set { - if (value == null) - documentation = String.Empty; - else - documentation = value; - } - } - -#endif - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ExtensionManager.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ExtensionManager.cs deleted file mode 100644 index 0a9149973ab..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ExtensionManager.cs +++ /dev/null @@ -1,232 +0,0 @@ -// -// System.Web.Services.Description.ExtensionManager.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Reflection; -using System.Collections; -using System.Web.Services.Configuration; -using System.Xml.Serialization; -using System.Xml; - -namespace System.Web.Services.Description -{ - internal abstract class ExtensionManager - { - static Hashtable extensionsByName; - static Hashtable extensionsByType; - static ArrayList maps = new ArrayList (); - static ArrayList extensions = new ArrayList (); - - static ExtensionManager () - { - extensionsByName = new Hashtable (); - extensionsByType = new Hashtable (); - - RegisterExtensionType (typeof (HttpAddressBinding)); - RegisterExtensionType (typeof (HttpBinding)); - RegisterExtensionType (typeof (HttpOperationBinding)); - RegisterExtensionType (typeof (HttpUrlEncodedBinding)); - RegisterExtensionType (typeof (HttpUrlReplacementBinding)); - RegisterExtensionType (typeof (MimeContentBinding)); - RegisterExtensionType (typeof (MimeMultipartRelatedBinding)); - RegisterExtensionType (typeof (MimeTextBinding)); - RegisterExtensionType (typeof (MimeXmlBinding)); - RegisterExtensionType (typeof (SoapAddressBinding)); - RegisterExtensionType (typeof (SoapBinding)); - RegisterExtensionType (typeof (SoapBodyBinding)); - RegisterExtensionType (typeof (SoapFaultBinding)); - RegisterExtensionType (typeof (SoapHeaderBinding)); -// RegisterExtensionType (typeof (SoapHeaderFaultBinding)); - RegisterExtensionType (typeof (SoapOperationBinding)); - - foreach (Type type in WSConfig.Instance.FormatExtensionTypes) - RegisterExtensionType (type); - - CreateExtensionSerializers (); - } - - static void RegisterExtensionType (Type type) - { - ExtensionInfo ext = new ExtensionInfo(); - ext.Type = type; - - object[] ats = type.GetCustomAttributes (typeof(XmlFormatExtensionPrefixAttribute), true); - - foreach (XmlFormatExtensionPrefixAttribute at in ats) - ext.NamespaceDeclarations.Add (new XmlQualifiedName (at.Prefix, at.Namespace)); - - ats = type.GetCustomAttributes (typeof(XmlFormatExtensionAttribute), true); - if (ats.Length > 0) - { - XmlFormatExtensionAttribute at = (XmlFormatExtensionAttribute)ats[0]; - ext.ElementName = at.ElementName; - if (at.Namespace != null) ext.Namespace = at.Namespace; - } - - XmlRootAttribute root = new XmlRootAttribute (); - root.ElementName = ext.ElementName; - if (ext.Namespace != null) root.Namespace = ext.Namespace; - - XmlReflectionImporter ri = new XmlReflectionImporter (); - XmlTypeMapping map = ri.ImportTypeMapping (type, root); - - if (ext.ElementName == null) throw new InvalidOperationException ("XmlFormatExtensionAttribute must be applied to type " + type); - extensionsByName.Add (ext.Namespace + " " + ext.ElementName, ext); - extensionsByType.Add (type, ext); - - maps.Add (map); - extensions.Add (ext); - } - - static void CreateExtensionSerializers () - { - XmlSerializer[] sers = XmlSerializer.FromMappings ((XmlMapping[]) maps.ToArray (typeof(XmlMapping))); - for (int n=0; n Count) - throw new ArgumentOutOfRangeException (); - return (FaultBinding) List[index]; - } - set { List [index] = value; } - } - - public FaultBinding this [string name] { - get { return this [IndexOf ((FaultBinding) Table[name])]; } - } - - #endregion // Properties - - #region Methods - - public int Add (FaultBinding bindingOperationFault) - { - Insert (Count, bindingOperationFault); - return (Count - 1); - } - - public bool Contains (FaultBinding bindingOperationFault) - { - return List.Contains (bindingOperationFault); - } - - public void CopyTo (FaultBinding[] array, int index) - { - List.CopyTo (array, index); - } - - protected override string GetKey (object value) - { - if (!(value is FaultBinding)) - throw new InvalidCastException (); - - return ((FaultBinding) value).Name; - } - - public int IndexOf (FaultBinding bindingOperationFault) - { - return List.IndexOf (bindingOperationFault); - } - - public void Insert (int index, FaultBinding bindingOperationFault) - { - List.Insert (index, bindingOperationFault); - } - - public void Remove (FaultBinding bindingOperationFault) - { - List.Remove (bindingOperationFault); - } - - protected override void SetParent (object value, object parent) - { - ((FaultBinding) value).SetParent ((OperationBinding) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpAddressBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/HttpAddressBinding.cs deleted file mode 100644 index bf120fb04c0..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpAddressBinding.cs +++ /dev/null @@ -1,63 +0,0 @@ -// -// System.Web.Services.Description.HttpAddressBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtension ("address", "http://schemas.xmlsoap.org/wsdl/http/", typeof (Port))] - public sealed class HttpAddressBinding : ServiceDescriptionFormatExtension { - - #region Fields - - string location; - - #endregion // Fields - - #region Constructors - - public HttpAddressBinding () - { - location = String.Empty; - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute ("location")] - public string Location { - get { return location; } - set { location = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/HttpBinding.cs deleted file mode 100644 index 3c1bbd76507..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpBinding.cs +++ /dev/null @@ -1,65 +0,0 @@ -// -// System.Web.Services.Description.HttpBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtension ("binding", "http://schemas.xmlsoap.org/wsdl/http/", typeof (Binding))] - [XmlFormatExtensionPrefix ("http", "http://schemas.xmlsoap.org/wsdl/http/")] - public sealed class HttpBinding : ServiceDescriptionFormatExtension { - - #region Fields - - public const string Namespace = "http://schemas.xmlsoap.org/wsdl/http/"; - string verb; - - #endregion // Fields - - #region Constructors - - public HttpBinding () - { - verb = String.Empty; - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute ("verb", DataType = "NMTOKEN")] - public string Verb { - get { return verb; } - set { verb = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpGetProtocolImporter.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/HttpGetProtocolImporter.cs deleted file mode 100644 index d984508f2e8..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpGetProtocolImporter.cs +++ /dev/null @@ -1,86 +0,0 @@ -// -// System.Web.Services.Description.HttpGetProtocolImporter.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.CodeDom; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Xml.Serialization; -using System.Xml; -using System.Collections; -using System.Configuration; - -namespace System.Web.Services.Description -{ - internal class HttpGetProtocolImporter : HttpSimpleProtocolImporter - { - #region Constructors - - public HttpGetProtocolImporter () - { - } - - #endregion // Constructors - - #region Properties - - public override string ProtocolName { - get { return "HttpGet"; } - } - - #endregion // Properties - - #region Methods - - protected override CodeTypeDeclaration BeginClass () - { - CodeTypeDeclaration codeClass = base.BeginClass (); - CodeTypeReference ctr = new CodeTypeReference ("System.Web.Services.Protocols.HttpGetClientProtocol"); - codeClass.BaseTypes.Add (ctr); - return codeClass; - } - - protected override Type GetInMimeFormatter () - { - HttpUrlEncodedBinding bin = OperationBinding.Input.Extensions.Find (typeof(HttpUrlEncodedBinding)) as HttpUrlEncodedBinding; - if (bin == null) throw new Exception ("Http urlEncoded binding not found"); - return typeof (UrlParameterWriter); - } - - protected override bool IsBindingSupported () - { - HttpBinding bin = (HttpBinding) Binding.Extensions.Find (typeof(HttpBinding)); - if (bin == null) return false; - return bin.Verb == "GET"; - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpGetProtocolReflector.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/HttpGetProtocolReflector.cs deleted file mode 100644 index 083c675b769..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpGetProtocolReflector.cs +++ /dev/null @@ -1,77 +0,0 @@ -// -// System.Web.Services.Description.HttpGetProtocolReflector.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Xml.Serialization; -using System.Xml; - -namespace System.Web.Services.Description { - - internal class HttpGetProtocolReflector : HttpSimpleProtocolReflector - { - #region Constructors - - public HttpGetProtocolReflector () - { - } - - #endregion // Constructors - - #region Properties - - public override string ProtocolName { - get { return "HttpGet"; } - } - - #endregion // Properties - - #region Methods - - protected override void BeginClass () - { - base.BeginClass (); - - HttpBinding hb = new HttpBinding (); - hb.Verb = "GET"; - Binding.Extensions.Add (hb); - } - - protected override bool ReflectMethod () - { - if (!base.ReflectMethod ()) return false; - - OperationBinding.Input.Extensions.Add (new HttpUrlEncodedBinding()); - return true; - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpOperationBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/HttpOperationBinding.cs deleted file mode 100644 index d713b8ee088..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpOperationBinding.cs +++ /dev/null @@ -1,63 +0,0 @@ -// -// System.Web.Services.Description.HttpOperationBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtension ("operation", "http://schemas.xmlsoap.org/wsdl/http/", typeof (OperationBinding))] - public sealed class HttpOperationBinding : ServiceDescriptionFormatExtension { - - #region Fields - - string location; - - #endregion // Fields - - #region Constructors - - public HttpOperationBinding () - { - location = String.Empty; - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute ("location")] - public string Location { - get { return location; } - set { location = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpPostProtocolImporter.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/HttpPostProtocolImporter.cs deleted file mode 100644 index 8c09c2f97dc..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpPostProtocolImporter.cs +++ /dev/null @@ -1,87 +0,0 @@ -// -// System.Web.Services.Description.HttpPostProtocolImporter.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.CodeDom; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Xml.Serialization; -using System.Xml; -using System.Collections; -using System.Configuration; - -namespace System.Web.Services.Description -{ - internal class HttpPostProtocolImporter : HttpSimpleProtocolImporter - { - #region Constructors - - public HttpPostProtocolImporter () - { - } - - #endregion // Constructors - - #region Properties - - public override string ProtocolName { - get { return "HttpPost"; } - } - - #endregion // Properties - - #region Methods - - protected override CodeTypeDeclaration BeginClass () - { - CodeTypeDeclaration codeClass = base.BeginClass (); - CodeTypeReference ctr = new CodeTypeReference ("System.Web.Services.Protocols.HttpPostClientProtocol"); - codeClass.BaseTypes.Add (ctr); - return codeClass; - } - - protected override Type GetInMimeFormatter () - { - MimeContentBinding bin = OperationBinding.Input.Extensions.Find (typeof(MimeContentBinding)) as MimeContentBinding; - if (bin == null) throw new Exception ("Http mime:content binding not found"); - if (bin.Type != "application/x-www-form-urlencoded") throw new Exception ("Encoding of mime:content binding not supported"); - return typeof (HtmlFormParameterWriter); - } - - protected override bool IsBindingSupported () - { - HttpBinding bin = (HttpBinding) Binding.Extensions.Find (typeof(HttpBinding)); - if (bin == null) return false; - return bin.Verb == "POST"; - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpPostProtocolReflector.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/HttpPostProtocolReflector.cs deleted file mode 100644 index 403eda74024..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpPostProtocolReflector.cs +++ /dev/null @@ -1,80 +0,0 @@ -// -// System.Web.Services.Description.HttpPostProtocolReflector.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Xml.Serialization; -using System.Xml; - -namespace System.Web.Services.Description { - - internal class HttpPostProtocolReflector : HttpSimpleProtocolReflector - { - #region Constructors - - public HttpPostProtocolReflector () - { - } - - #endregion // Constructors - - #region Properties - - public override string ProtocolName { - get { return "HttpPost"; } - } - - #endregion // Properties - - #region Methods - - protected override void BeginClass () - { - base.BeginClass (); - - HttpBinding hb = new HttpBinding (); - hb.Verb = "POST"; - Binding.Extensions.Add (hb); - } - - protected override bool ReflectMethod () - { - if (!base.ReflectMethod ()) return false; - - MimeContentBinding mcb = new MimeContentBinding (); - mcb.Type = "application/x-www-form-urlencoded"; - mcb.Part = null; - OperationBinding.Input.Extensions.Add (mcb); - return true; - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpSimpleProtocolImporter.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/HttpSimpleProtocolImporter.cs deleted file mode 100644 index a72c6cb59d8..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpSimpleProtocolImporter.cs +++ /dev/null @@ -1,348 +0,0 @@ -// -// System.Web.Services.Description.HttpSimpleProtocolImporter.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.CodeDom; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Web.Services.Configuration; -using System.Xml; -using System.Xml.Serialization; -using System.Configuration; -using System.Collections; - -namespace System.Web.Services.Description -{ - internal abstract class HttpSimpleProtocolImporter : ProtocolImporter - { - - #region Fields - - HttpBinding httpBinding; - - SoapCodeExporter soapExporter; - SoapSchemaImporter soapImporter; - XmlCodeExporter xmlExporter; - XmlSchemaImporter xmlImporter; - CodeIdentifiers memberIds; - XmlReflectionImporter xmlReflectionImporter; - - #endregion // Fields - - #region Constructors - - public HttpSimpleProtocolImporter () - { - } - - #endregion // Constructors - - #region Methods - - protected override CodeTypeDeclaration BeginClass () - { - httpBinding = (HttpBinding) Binding.Extensions.Find (typeof(HttpBinding)); - - CodeTypeDeclaration codeClass = new CodeTypeDeclaration (ClassName); - - string location = null; - if (Port != null) { - HttpAddressBinding sab = (HttpAddressBinding) Port.Extensions.Find (typeof(HttpAddressBinding)); - if (sab != null) location = sab.Location; - } - - CodeConstructor cc = new CodeConstructor (); - cc.Attributes = MemberAttributes.Public; - GenerateServiceUrl (location, cc.Statements); - codeClass.Members.Add (cc); - - memberIds = new CodeIdentifiers (); - return codeClass; - } - - protected override void BeginNamespace () - { - xmlImporter = new XmlSchemaImporter (LiteralSchemas, ClassNames); - soapImporter = new SoapSchemaImporter (EncodedSchemas, ClassNames); - xmlExporter = new XmlCodeExporter (CodeNamespace, null); - xmlReflectionImporter = new XmlReflectionImporter (); - } - - protected override void EndClass () - { - if (xmlExporter.IncludeMetadata.Count > 0) - { - if (CodeTypeDeclaration.CustomAttributes == null) - CodeTypeDeclaration.CustomAttributes = new CodeAttributeDeclarationCollection (); - CodeTypeDeclaration.CustomAttributes.AddRange (xmlExporter.IncludeMetadata); - } - } - - protected override void EndNamespace () - { - } - - protected override bool IsBindingSupported () - { - throw new NotImplementedException (); - } - - [MonoTODO] - protected override bool IsOperationFlowSupported (OperationFlow flow) - { - throw new NotImplementedException (); - } - - protected override CodeMemberMethod GenerateMethod () - { - try - { - HttpOperationBinding httpOper = OperationBinding.Extensions.Find (typeof (HttpOperationBinding)) as HttpOperationBinding; - if (httpOper == null) throw new Exception ("Http operation binding not found"); - - XmlMembersMapping inputMembers = ImportInMembersMapping (InputMessage); - XmlTypeMapping outputMember = ImportOutMembersMapping (OutputMessage); - - CodeMemberMethod met = GenerateMethod (memberIds, httpOper, inputMembers, outputMember); - - xmlExporter.ExportMembersMapping (inputMembers); - if (outputMember != null) - xmlExporter.ExportTypeMapping (outputMember); - - return met; - } - catch (Exception ex) - { - UnsupportedOperationBindingWarning (ex.Message); - return null; - } - } - - XmlMembersMapping ImportInMembersMapping (Message msg) - { - SoapSchemaMember[] mems = new SoapSchemaMember [msg.Parts.Count]; - for (int n=0; n 0) - methodParams = new CodeArrayCreateExpression (typeof(object), paramArray); - else - methodParams = new CodeArrayCreateExpression (typeof(object), 0); - - // Generate method url - - CodeThisReferenceExpression ethis = new CodeThisReferenceExpression(); - - CodeExpression thisURlExp = new CodeFieldReferenceExpression (ethis, "Url"); - CodePrimitiveExpression metUrl = new CodePrimitiveExpression (httpOper.Location); - CodeBinaryOperatorExpression expMethodLocation = new CodeBinaryOperatorExpression (thisURlExp, CodeBinaryOperatorType.Add, metUrl); - - // Invoke call - - CodePrimitiveExpression varMsgName = new CodePrimitiveExpression (messageName); - CodeMethodInvokeExpression inv; - - inv = new CodeMethodInvokeExpression (ethis, "Invoke", varMsgName, expMethodLocation, methodParams); - if (!isVoid) - method.Statements.Add (new CodeMethodReturnStatement (new CodeCastExpression (method.ReturnType, inv))); - else - method.Statements.Add (inv); - - // Begin Invoke Call - - CodeExpression expCallb = new CodeVariableReferenceExpression (varCallback); - CodeExpression expAsyncs = new CodeVariableReferenceExpression (varAsyncState); - inv = new CodeMethodInvokeExpression (ethis, "BeginInvoke", varMsgName, expMethodLocation, methodParams, expCallb, expAsyncs); - methodBegin.Statements.Add (new CodeMethodReturnStatement (inv)); - - // End Invoke call - - CodeExpression varAsyncr = new CodeVariableReferenceExpression (varAsyncResult); - inv = new CodeMethodInvokeExpression (ethis, "EndInvoke", varAsyncr); - if (!isVoid) - methodEnd.Statements.Add (new CodeMethodReturnStatement (new CodeCastExpression (methodEnd.ReturnType, inv))); - else - methodEnd.Statements.Add (inv); - - // Attributes - - CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Web.Services.Protocols.HttpMethodAttribute"); - att.Arguments.Add (new CodeAttributeArgument (new CodeTypeOfExpression(GetOutMimeFormatter ()))); - att.Arguments.Add (new CodeAttributeArgument (new CodeTypeOfExpression(GetInMimeFormatter ()))); - AddCustomAttribute (method, att, true); - - CodeTypeDeclaration.Members.Add (method); - CodeTypeDeclaration.Members.Add (methodBegin); - CodeTypeDeclaration.Members.Add (methodEnd); - - return method; - } - -#if NET_2_0 - internal override CodeExpression BuildInvokeAsync (string messageName, CodeArrayCreateExpression paramsArray, CodeExpression delegateField, CodeExpression userStateVar) - { - HttpOperationBinding httpOper = OperationBinding.Extensions.Find (typeof (HttpOperationBinding)) as HttpOperationBinding; - - CodeThisReferenceExpression ethis = new CodeThisReferenceExpression(); - - CodeExpression thisURlExp = new CodeFieldReferenceExpression (ethis, "Url"); - CodePrimitiveExpression metUrl = new CodePrimitiveExpression (httpOper.Location); - CodeBinaryOperatorExpression expMethodLocation = new CodeBinaryOperatorExpression (thisURlExp, CodeBinaryOperatorType.Add, metUrl); - - CodeMethodInvokeExpression inv2 = new CodeMethodInvokeExpression (ethis, "InvokeAsync"); - inv2.Parameters.Add (new CodePrimitiveExpression (messageName)); - inv2.Parameters.Add (expMethodLocation); - inv2.Parameters.Add (paramsArray); - inv2.Parameters.Add (delegateField); - inv2.Parameters.Add (userStateVar); - return inv2; - } -#endif - - protected virtual Type GetInMimeFormatter () - { - return null; - } - - protected virtual Type GetOutMimeFormatter () - { - if (OperationBinding.Output.Extensions.Find (typeof(MimeXmlBinding)) != null) - return typeof (XmlReturnReader); - - MimeContentBinding bin = (MimeContentBinding) OperationBinding.Output.Extensions.Find (typeof(MimeContentBinding)); - if (bin != null && bin.Type == "text/xml") - return typeof (XmlReturnReader); - - return typeof(NopReturnReader); - } - - string GetSimpleType (XmlMemberMapping member) - { - // MS seems to always use System.String for input parameters, except for byte[] - - switch (member.TypeName) - { - case "hexBinary": - case "base64Binary": - return "System.String"; - - default: - string ptype = member.TypeFullName; - int i = ptype.IndexOf ('['); - if (i == -1) - return "System.String"; - else - return "System.String" + ptype.Substring (i); - } - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpSimpleProtocolReflector.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/HttpSimpleProtocolReflector.cs deleted file mode 100644 index 58c18913cf6..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/HttpSimpleProtocolReflector.cs +++ /dev/null @@ -1,143 +0,0 @@ -// -// System.Web.Services.Description.HttpSimpleProtocolReflector.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Xml.Serialization; -using System.Xml; -using System.Xml.Schema; -using System.Reflection; - -namespace System.Web.Services.Description { - - internal abstract class HttpSimpleProtocolReflector : ProtocolReflector - { - #region Fields - - SoapBinding soapBinding; - - #endregion // Fields - - #region Constructors - - public HttpSimpleProtocolReflector () - { - } - - #endregion // Constructors - - #region Methods - - protected override void BeginClass () - { - HttpAddressBinding abind = new HttpAddressBinding (); - abind.Location = ServiceUrl; - Port.Extensions.Add (abind); - } - - protected override void EndClass () - { - } - - protected override bool ReflectMethod () - { - LogicalTypeInfo ti = TypeStubManager.GetLogicalTypeInfo (ServiceType); - HttpOperationBinding sob = new HttpOperationBinding(); - sob.Location = "/" + MethodStubInfo.Name; - OperationBinding.Extensions.Add (sob); - - if (!Method.IsVoid) - { - MimeXmlBinding mxb = new MimeXmlBinding (); - mxb.Part = "Body"; - OperationBinding.Output.Extensions.Add (mxb); - - MessagePart part = new MessagePart (); - part.Name = "Body"; - - XmlTypeMapping map = ReflectionImporter.ImportTypeMapping (Method.ReturnType, ti.GetWebServiceLiteralNamespace (ServiceDescription.TargetNamespace)); - XmlQualifiedName qname = new XmlQualifiedName (map.ElementName, map.Namespace); - part.Element = qname; - OutputMessage.Parts.Add (part); - SchemaExporter.ExportTypeMapping (map); - } - - XmlReflectionMember[] mems = new XmlReflectionMember [Method.Parameters.Length]; - for (int n=0; n Count) - throw new ArgumentOutOfRangeException (); - return (Import) List[index]; - } - set { List [index] = value; } - } - - #endregion // Properties - - #region Methods - - public int Add (Import import) - { - Insert (Count, import); - return (Count - 1); - } - - public bool Contains (Import import) - { - return List.Contains (import); - } - - public void CopyTo (Import[] array, int index) - { - List.CopyTo (array, index); - } - - public int IndexOf (Import import) - { - return List.IndexOf (import); - } - - public void Insert (int index, Import import) - { - List.Insert (index, import); - } - - public void Remove (Import import) - { - List.Remove (import); - } - - protected override void SetParent (object value, object parent) - { - ((Import) value).SetParent ((ServiceDescription) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/InputBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/InputBinding.cs deleted file mode 100644 index d2df51ec16e..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/InputBinding.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -// System.Web.Services.Description.InputBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtensionPoint ("Extensions")] - public sealed class InputBinding : MessageBinding { - - #region Fields - - ServiceDescriptionFormatExtensionCollection extensions; - - #endregion // Fields - - #region Constructors - - public InputBinding () - { - extensions = new ServiceDescriptionFormatExtensionCollection (this); - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public override ServiceDescriptionFormatExtensionCollection Extensions { - get { return extensions; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/Message.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/Message.cs deleted file mode 100644 index 558b49729dc..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/Message.cs +++ /dev/null @@ -1,120 +0,0 @@ -// -// System.Web.Services.Description.Message.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.Web.Services; -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - public sealed class Message : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - #region Fields - -#if !NET_2_0 - string name; -#endif - MessagePartCollection parts; - ServiceDescription serviceDescription; - - #endregion // Fields - - #region Constructors - - public Message () - { -#if !NET_2_0 - name = String.Empty; -#endif - parts = new MessagePartCollection (this); - serviceDescription = null; - } - - #endregion // Constructors - - #region Properties - -#if !NET_2_0 - [XmlAttribute ("name", DataType = "NCName")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - - [XmlElement ("part")] - public MessagePartCollection Parts { - get { return parts; } - } - -// [XmlIgnore] - public ServiceDescription ServiceDescription { - get { return serviceDescription; } - } - - #endregion // Properties - - #region Methods - - public MessagePart FindPartByName (string partName) - { - return parts [partName]; - } - - public MessagePart[] FindPartsByName (string[] partNames) - { - ArrayList searchResults = new ArrayList (); - - foreach (string partName in partNames) - searchResults.Add (FindPartByName (partName)); - - int count = searchResults.Count; - - if (count == 0) - throw new ArgumentException (); - - MessagePart[] returnValue = new MessagePart[count]; - searchResults.CopyTo (returnValue); - return returnValue; - } - - internal void SetParent (ServiceDescription serviceDescription) - { - this.serviceDescription = serviceDescription; - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MessageBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MessageBinding.cs deleted file mode 100644 index e1e7747967b..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MessageBinding.cs +++ /dev/null @@ -1,89 +0,0 @@ -// -// System.Web.Services.Description.MessageBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - public abstract class MessageBinding : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - - #region Fields - -#if !NET_2_0 - string name; -#endif - OperationBinding operationBinding; - - #endregion // Fields - - #region Constructors - - protected MessageBinding () - { - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public abstract ServiceDescriptionFormatExtensionCollection Extensions { - get; - } - -#if !NET_2_0 -// [DefaultValue (null)] - [XmlAttribute ("name", DataType = "NMTOKEN")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - -// [XmlIgnore] - public OperationBinding OperationBinding { - get { return operationBinding; } - } - - internal void SetParent (OperationBinding ob) - { - operationBinding = ob; - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MessageCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MessageCollection.cs deleted file mode 100644 index 6a3b9e9d7e6..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MessageCollection.cs +++ /dev/null @@ -1,109 +0,0 @@ -// -// System.Web.Services.Description.MessageCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - public sealed class MessageCollection : ServiceDescriptionBaseCollection { - - #region Constructors - - internal MessageCollection (ServiceDescription serviceDescription) - : base (serviceDescription) - { - } - - #endregion - - #region Properties - - public Message this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - - return (Message) List [index]; - } - set { List [index] = value; } - } - - public Message this [string name] { - get { return this [IndexOf ((Message) Table [name])]; } - } - - #endregion // Properties - - #region Methods - - public int Add (Message message) - { - Insert (Count, message); - return (Count - 1); - } - - public bool Contains (Message message) - { - return List.Contains (message); - } - - public void CopyTo (Message[] array, int index) - { - List.CopyTo (array, index); - } - - protected override string GetKey (object value) - { - if (!(value is Message)) - throw new InvalidCastException (); - - return ((Message) value).Name; - } - - public int IndexOf (Message message) - { - return List.IndexOf (message); - } - - public void Insert (int index, Message message) - { - List.Insert (index, message); - } - - public void Remove (Message message) - { - List.Remove (message); - } - - protected override void SetParent (object value, object parent) - { - ((Message) value).SetParent ((ServiceDescription) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MessagePart.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MessagePart.cs deleted file mode 100644 index 19865ac6e96..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MessagePart.cs +++ /dev/null @@ -1,116 +0,0 @@ -// -// System.Web.Services.Description.MessagePart.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Xml; -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - public sealed class MessagePart : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - - #region Fields - - XmlQualifiedName element; - Message message; -#if !NET_2_0 - string name; -#endif - XmlQualifiedName type; - - #endregion // Fields - - #region Constructors - - public MessagePart () - { - element = XmlQualifiedName.Empty; - message = null; -#if !NET_2_0 - name = String.Empty; -#endif - type = XmlQualifiedName.Empty; - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute ("element")] - public XmlQualifiedName Element { - get { return element; } - set { element = value; } - } - -// [XmlIgnore] - public Message Message { - get { return message; } - } - -#if !NET_2_0 - [XmlAttribute ("name", DataType = "NMTOKEN")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - - [XmlAttribute ("type")] - public XmlQualifiedName Type { - get { return type; } - set { type = value; } - } - - internal bool DefinedByType { - get { return type != null && type != XmlQualifiedName.Empty; } - } - - internal bool DefinedByElement { - get { return element != null && element != XmlQualifiedName.Empty; } - } - - #endregion // Properties - - #region Methods - - internal void SetParent (Message message) - { - this.message = message; - } - - #endregion // Methods - - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MessagePartCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MessagePartCollection.cs deleted file mode 100644 index 18714a72051..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MessagePartCollection.cs +++ /dev/null @@ -1,107 +0,0 @@ -// -// System.Web.Services.Description.MessagePartCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - public sealed class MessagePartCollection : ServiceDescriptionBaseCollection { - - #region Constructors - - internal MessagePartCollection (Message message) - : base (message) - { - } - - #endregion - - #region Properties - - public MessagePart this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - return (MessagePart) List[index]; - } - set { List [index] = value; } - } - - public MessagePart this [string name] { - get { return this [IndexOf ((MessagePart) Table[name])]; } - } - - #endregion // Properties - - #region Methods - - public int Add (MessagePart messagePart) - { - Insert (Count, messagePart); - return (Count - 1); - } - - public bool Contains (MessagePart messagePart) - { - return List.Contains (messagePart); - } - - public void CopyTo (MessagePart[] array, int index) - { - List.CopyTo (array, index); - } - - protected override string GetKey (object value) - { - if (!(value is MessagePart)) - throw new InvalidCastException (); - return ((MessagePart) value).Name; - } - - public int IndexOf (MessagePart messagePart) - { - return List.IndexOf (messagePart); - } - - public void Insert (int index, MessagePart messagePart) - { - List.Insert (index, messagePart); - } - - public void Remove (MessagePart messagePart) - { - List.Remove (messagePart); - } - - protected override void SetParent (object value, object parent) - { - ((MessagePart) value).SetParent ((Message) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeContentBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MimeContentBinding.cs deleted file mode 100644 index 46038a289f2..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeContentBinding.cs +++ /dev/null @@ -1,74 +0,0 @@ -// -// System.Web.Services.Description.MimeContentBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtensionPrefix ("mime", "http://schemas.xmlsoap.org/wsdl/mime/")] - [XmlFormatExtension ("content", "http://schemas.xmlsoap.org/wsdl/mime/", typeof (InputBinding), typeof (OutputBinding))] - public sealed class MimeContentBinding : ServiceDescriptionFormatExtension { - - #region Fields - - public const string Namespace = "http://schemas.xmlsoap.org/wsdl/mime/"; - string part; - string type; - - #endregion // Fields - - #region Constructors - - public MimeContentBinding () - { - part = String.Empty; - type = String.Empty; - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute ("part", DataType = "NMTOKEN")] - public string Part { - get { return part; } - set { part = value; } - } - - [XmlAttribute ("type")] - public string Type { - get { return type; } - set { type = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeMultipartRelatedBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MimeMultipartRelatedBinding.cs deleted file mode 100644 index 5e67324bd1a..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeMultipartRelatedBinding.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -// System.Web.Services.Description.MimeMultipartRelatedBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtension ("multipartRelated", "http://schemas.xmlsoap.org/wsdl/mime/", typeof (InputBinding), typeof (OutputBinding))] - public sealed class MimeMultipartRelatedBinding : ServiceDescriptionFormatExtension { - - #region Fields - - MimePartCollection parts; - - #endregion // Fields - - #region Constructors - - public MimeMultipartRelatedBinding () - { - parts = new MimePartCollection (); - } - - #endregion // Constructors - - #region Properties - - [XmlElement ("parts")] - public MimePartCollection Parts { - get { return parts; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MimePart.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MimePart.cs deleted file mode 100644 index 4857d44bf3c..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MimePart.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -// System.Web.Services.Description.MimePart.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtensionPoint ("Extensions")] - public sealed class MimePart : ServiceDescriptionFormatExtension { - - #region Fields - - ServiceDescriptionFormatExtensionCollection extensions; - - #endregion // Fields - - #region Constructors - - public MimePart () - { - extensions = new ServiceDescriptionFormatExtensionCollection (this); - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public ServiceDescriptionFormatExtensionCollection Extensions { - get { return extensions; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MimePartCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MimePartCollection.cs deleted file mode 100644 index f1fd0d08b81..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MimePartCollection.cs +++ /dev/null @@ -1,85 +0,0 @@ -// -// System.Web.Services.Description.MimePartCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; - -namespace System.Web.Services.Description { - public sealed class MimePartCollection : CollectionBase { - - #region Properties - - public MimePart this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - - return (MimePart) List[index]; - } - set { List[index] = value; } - } - - #endregion // Properties - - #region Methods - - public int Add (MimePart mimePart) - { - Insert (Count, mimePart); - return (Count - 1); - } - - public bool Contains (MimePart mimePart) - { - return List.Contains (mimePart); - } - - public void CopyTo (MimePart[] array, int index) - { - List.CopyTo (array, index); - } - - public int IndexOf (MimePart mimePart) - { - return List.IndexOf (mimePart); - } - - public void Insert (int index, MimePart mimePart) - { - List.Insert (index, mimePart); - } - - public void Remove (MimePart mimePart) - { - List.Remove (mimePart); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextBinding.cs deleted file mode 100644 index b42258645dd..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextBinding.cs +++ /dev/null @@ -1,64 +0,0 @@ -// -// System.Web.Services.Description.MimeTextBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtension ("text", "http://microsoft.com/wsdl/mime/textMatching/", typeof (InputBinding), typeof (OutputBinding), typeof (MimePart))] - [XmlFormatExtensionPrefix ("tm", "http://microsoft.com/wsdl/mime/textMatching/")] - public sealed class MimeTextBinding : ServiceDescriptionFormatExtension { - - #region Fields - - public const string Namespace = "http://microsoft.com/wsdl/mime/textMatching/"; - MimeTextMatchCollection matches; - - #endregion // Fields - - #region Constructors - - public MimeTextBinding () - { - matches = new MimeTextMatchCollection (); - } - - #endregion // Constructors - - #region Properties - - [XmlElement ("match", typeof (MimeTextMatch))] - public MimeTextMatchCollection Matches { - get { return matches; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextMatch.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextMatch.cs deleted file mode 100644 index 83383ed964f..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextMatch.cs +++ /dev/null @@ -1,147 +0,0 @@ -// -// System.Web.Services.Description.MimeTextMatch.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - public sealed class MimeTextMatch { - - #region Fields - - int capture; - int group; - bool ignoreCase; - MimeTextMatchCollection matches; - string name; - string pattern; - int repeats; - string type; - - #endregion // Fields - - #region Constructors - - public MimeTextMatch () - { - capture = 0; - group = 1; - ignoreCase = false; - matches = null; - name = String.Empty; - pattern = String.Empty; - repeats = 1; - type = String.Empty; - } - - #endregion // Constructors - - #region Properties - - [DefaultValue (0)] - [XmlAttribute ("capture")] - public int Capture { - get { return capture; } - set { - if (value < 0) - throw new ArgumentException (); - capture = value; - } - } - - [DefaultValue (1)] - [XmlAttribute ("group")] - public int Group { - get { return group; } - set { - if (value < 0) - throw new ArgumentException (); - group = value; - } - } - - [XmlAttribute ("ignoreCase")] - public bool IgnoreCase { - get { return ignoreCase; } - set { ignoreCase = value; } - } - - [XmlElement ("match")] - public MimeTextMatchCollection Matches { - get { return matches; } - } - - [XmlAttribute ("name")] - public string Name { - get { return name; } - set { name = value; } - } - - [XmlAttribute ("pattern")] - public string Pattern { - get { return pattern; } - set { pattern = value; } - } - - [XmlIgnore] - public int Repeats { - get { return repeats; } - set { - if (value < 0) - throw new ArgumentException (); - repeats = value; - } - } - - [DefaultValue ("1")] - [XmlAttribute ("repeats")] - public string RepeatsString { - get { return Repeats.ToString (); } - set { Repeats = Int32.Parse (value); } - } - - [XmlAttribute ("type")] - public string Type { - get { return type; } - set { type = value; } - } - - #endregion // Properties - - #region Methods - - internal void SetParent (MimeTextMatchCollection matches) - { - this.matches = matches; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextMatchCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextMatchCollection.cs deleted file mode 100644 index 849f6a8f715..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeTextMatchCollection.cs +++ /dev/null @@ -1,91 +0,0 @@ -// -// System.Web.Services.Description.MimeTextMatchCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; - -namespace System.Web.Services.Description { - public sealed class MimeTextMatchCollection : CollectionBase { - - #region Properties - - public MimeTextMatch this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - - return (MimeTextMatch) List [index]; - } - set { List[index] = value; } - } - - #endregion // Properties - - #region Methods - - public int Add (MimeTextMatch match) - { - Insert (Count, match); - return (Count - 1); - } - - public bool Contains (MimeTextMatch match) - { - return List.Contains (match); - } - - public void CopyTo (MimeTextMatch[] array, int index) - { - List.CopyTo (array, index); - } - - public int IndexOf (MimeTextMatch match) - { - return List.IndexOf (match); - } - - public void Insert (int index, MimeTextMatch match) - { - SetParent (match, this); - List.Insert (index, match); - } - - public void Remove (MimeTextMatch match) - { - List.Remove (match); - } - - private void SetParent (object value, object parent) - { - ((MimeTextMatch) value).SetParent ((MimeTextMatchCollection) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeXmlBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/MimeXmlBinding.cs deleted file mode 100644 index 9f3b43e54aa..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/MimeXmlBinding.cs +++ /dev/null @@ -1,63 +0,0 @@ -// -// System.Web.Services.Description.MimeXmlBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtension ("mimeXml", "http://schemas.xmlsoap.org/wsdl/mime/", typeof (MimePart), typeof (InputBinding), typeof (OutputBinding))] - public sealed class MimeXmlBinding : ServiceDescriptionFormatExtension { - - #region Fields - - string part; - - #endregion // Fields - - #region Constructors - - public MimeXmlBinding () - { - part = String.Empty; - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute ("part", DataType = "NMTOKEN")] - public string Part { - get { return part; } - set { part = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/NamedItem.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/NamedItem.cs deleted file mode 100644 index 7523884318d..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/NamedItem.cs +++ /dev/null @@ -1,51 +0,0 @@ -// -// System.Web.Services.Description.NamedItem.cs -// -// Author: -// Lluis Sanchez (lluis@novell.com) -// -// Copyright (C) Novell, Inc., 2004 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#if NET_2_0 - -namespace System.Web.Services.Description -{ - public abstract class NamedItem: DocumentableItem - { - string name; - - protected NamedItem() - { - } - - [System.Xml.Serialization.XmlAttribute ("name", DataType = "NCName")] - public string Name { - get { return name; } - set { name = value; } - } - } -} - -#endif diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/Operation.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/Operation.cs deleted file mode 100644 index 5c1156f14b0..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/Operation.cs +++ /dev/null @@ -1,130 +0,0 @@ -// -// System.Web.Services.Description.Operation.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Xml; -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - public sealed class Operation : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - #region Fields - - OperationFaultCollection faults; - OperationMessageCollection messages; -#if !NET_2_0 - string name; -#endif - string[] parameterOrder; - PortType portType; - - #endregion // Fields - - #region Constructors - - public Operation () - { - faults = new OperationFaultCollection (this); - messages = new OperationMessageCollection (this); -#if !NET_2_0 - name = String.Empty; -#endif - parameterOrder = null; - portType = null; - } - - #endregion // Constructors - - #region Properties - - [XmlElement ("fault")] - public OperationFaultCollection Faults { - get { return faults; } - } - - [XmlElement ("output", typeof (OperationOutput))] - [XmlElement ("input", typeof (OperationInput))] - public OperationMessageCollection Messages { - get { return messages; } - } - -#if !NET_2_0 - [XmlAttribute ("name", DataType = "NCName")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - - [XmlIgnore] - public string[] ParameterOrder { - get { return parameterOrder; } - set { parameterOrder = value; } - } - - [DefaultValue ("")] - [XmlAttribute ("parameterOrder")] - public string ParameterOrderString { - get { - if (parameterOrder == null) - return String.Empty; - return String.Join (" ", parameterOrder); - } - set { ParameterOrder = value.Split (' '); } - } - -// [XmlIgnore] - public PortType PortType { - get { return portType; } - } - - #endregion // Properties - - #region Methods - - public bool IsBoundBy (OperationBinding operationBinding) - { - return (operationBinding.Name == Name); - } - - internal void SetParent (PortType portType) - { - this.portType = portType; - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OperationBinding.cs deleted file mode 100644 index 3ac29b28043..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationBinding.cs +++ /dev/null @@ -1,127 +0,0 @@ -// -// System.Web.Services.Description.OperationBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtensionPoint ("Extensions")] - public sealed class OperationBinding : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - #region Fields - - Binding binding; - ServiceDescriptionFormatExtensionCollection extensions; - FaultBindingCollection faults; - InputBinding input; -#if !NET_2_0 - string name; -#endif - OutputBinding output; - - #endregion // Fields - - #region Constructors - - public OperationBinding () - { - extensions = new ServiceDescriptionFormatExtensionCollection (this); - faults = new FaultBindingCollection (this); - input = null; -#if !NET_2_0 - name = String.Empty; -#endif - output = null; - } - - #endregion // Constructors - - #region Properties - -// [XmlIgnore] - public Binding Binding { - get { return binding; } - } - - [XmlIgnore] - public ServiceDescriptionFormatExtensionCollection Extensions { - get { return extensions; } - } - - [XmlElement ("fault")] - public FaultBindingCollection Faults { - get { return faults; } - } - - [XmlElement ("input")] - public InputBinding Input { - get { return input; } - set { - input = value; - if (input != null) - input.SetParent (this); - } - } - -#if !NET_2_0 - [XmlAttribute ("name", DataType = "NCName")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - - [XmlElement ("output")] - public OutputBinding Output { - get { return output; } - set { - output = value; - if (output != null) - output.SetParent (this); - } - } - - #endregion // Properties - - #region Methods - - internal void SetParent (Binding binding) - { - this.binding = binding; - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationBindingCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OperationBindingCollection.cs deleted file mode 100644 index 3606a49f0b2..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationBindingCollection.cs +++ /dev/null @@ -1,96 +0,0 @@ -// -// System.Web.Services.Description.OperationBindingCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - public sealed class OperationBindingCollection : ServiceDescriptionBaseCollection { - - #region Constructors - - internal OperationBindingCollection (Binding binding) - : base (binding) - { - } - - #endregion // Constructors - - #region Properties - - public OperationBinding this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - return (OperationBinding) List[index]; - } - set { List[index] = value; } - } - - #endregion // Properties - - #region Methods - - public int Add (OperationBinding bindingOperation) - { - Insert (Count, bindingOperation); - return (Count - 1); - } - - public bool Contains (OperationBinding bindingOperation) - { - return List.Contains (bindingOperation); - } - - public void CopyTo (OperationBinding[] array, int index) - { - List.CopyTo (array, index); - } - - public int IndexOf (OperationBinding bindingOperation) - { - return List.IndexOf (bindingOperation); - } - - public void Insert (int index, OperationBinding bindingOperation) - { - List.Insert (index, bindingOperation); - } - - public void Remove (OperationBinding bindingOperation) - { - List.Remove (bindingOperation); - } - - protected override void SetParent (object value, object parent) - { - ((OperationBinding) value).SetParent ((Binding) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OperationCollection.cs deleted file mode 100644 index cf7ac358140..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationCollection.cs +++ /dev/null @@ -1,96 +0,0 @@ -// -// System.Web.Services.Description.OperationCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - public sealed class OperationCollection : ServiceDescriptionBaseCollection { - - #region Constructors - - internal OperationCollection (PortType portType) - : base (portType) - { - } - - #endregion // Constructors - - #region Properties - - public Operation this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - return (Operation) List[index]; - } - set { List[index] = value; } - } - - #endregion // Properties - - #region Methods - - public int Add (Operation operation) - { - Insert (Count, operation); - return (Count - 1); - } - - public bool Contains (Operation operation) - { - return List.Contains (operation); - } - - public void CopyTo (Operation[] array, int index) - { - List.CopyTo (array, index); - } - - public int IndexOf (Operation operation) - { - return List.IndexOf (operation); - } - - public void Insert (int index, Operation operation) - { - List.Insert (index, operation); - } - - public void Remove (Operation operation) - { - List.Remove (operation); - } - - protected override void SetParent (object value, object parent) - { - ((Operation) value).SetParent ((PortType) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationFault.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OperationFault.cs deleted file mode 100644 index e6e8f5e5c67..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationFault.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// System.Web.Services.Description.OperationFault.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; - -namespace System.Web.Services.Description { - public sealed class OperationFault : OperationMessage { - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationFaultCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OperationFaultCollection.cs deleted file mode 100644 index 0cc944f8948..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationFaultCollection.cs +++ /dev/null @@ -1,108 +0,0 @@ -// -// System.Web.Services.Description.OperationFaultCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - public sealed class OperationFaultCollection : ServiceDescriptionBaseCollection { - - #region Constructors - - internal OperationFaultCollection (Operation operation) - : base (operation) - { - } - - #endregion // Constructors - - #region Properties - - public OperationFault this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - return (OperationFault) List[index]; - } - set { List [index] = value; } - } - - public OperationFault this [string name] { - get { return this [IndexOf ((OperationFault) Table[name])]; } - } - - #endregion // Properties - - #region Methods - - public int Add (OperationFault operationFaultMessage) - { - Insert (Count, operationFaultMessage); - return (Count - 1); - } - - public bool Contains (OperationFault operationFaultMessage) - { - return List.Contains (operationFaultMessage); - } - - public void CopyTo (OperationFault[] array, int index) - { - List.CopyTo (array, index); - } - - protected override string GetKey (object value) - { - if (!(value is OperationFault)) - throw new InvalidCastException (); - - return ((OperationFault) value).Name; - } - - public int IndexOf (OperationFault operationFaultMessage) - { - return List.IndexOf (operationFaultMessage); - } - - public void Insert (int index, OperationFault operationFaultMessage) - { - List.Insert (index, operationFaultMessage); - } - - public void Remove (OperationFault operationFaultMessage) - { - List.Remove (operationFaultMessage); - } - - protected override void SetParent (object value, object parent) - { - ((OperationFault) value).SetParent ((Operation) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationFlow.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OperationFlow.cs deleted file mode 100644 index b6cef6f3bca..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationFlow.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.Services.Description.OperationFlow.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - [Serializable] - public enum OperationFlow { - None = 0x0, - Notification = 0x2, - OneWay = 0x1, - RequestResponse = 0x3, - SolicitResponse = 0x4 - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationInput.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OperationInput.cs deleted file mode 100644 index e7cdda5ba6d..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationInput.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.Services.Description.OperationInput.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Xml; - -namespace System.Web.Services.Description { - public sealed class OperationInput : OperationMessage { - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationMessage.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OperationMessage.cs deleted file mode 100644 index afc69245b74..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationMessage.cs +++ /dev/null @@ -1,96 +0,0 @@ -// -// System.Web.Services.Description.OperationMessage.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Xml; -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - public abstract class OperationMessage : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - #region Fields - - XmlQualifiedName message; -#if !NET_2_0 - string name; -#endif - Operation operation; - - #endregion // Fields - - #region Constructors - - protected OperationMessage () - { - message = XmlQualifiedName.Empty; - operation = null; - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute ("message")] - public XmlQualifiedName Message { - get { return message; } - set { message = value; } - } - -#if !NET_2_0 - [XmlAttribute ("name", DataType = "NMTOKEN")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - -// [XmlIgnore] - public Operation Operation { - get { return operation; } - } - - #endregion // Properties - - #region Methods - - internal void SetParent (Operation operation) - { - this.operation = operation; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationMessageCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OperationMessageCollection.cs deleted file mode 100644 index cac974c12b2..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationMessageCollection.cs +++ /dev/null @@ -1,172 +0,0 @@ -// -// System.Web.Services.Description.OperationMessageCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; - -namespace System.Web.Services.Description { - public sealed class OperationMessageCollection : ServiceDescriptionBaseCollection { - - #region Constructors - - internal OperationMessageCollection (Operation operation) - : base (operation) - { - } - - #endregion // Constructors - - #region Properties - - public OperationFlow Flow { - get { - switch (Count) { - case 1: - if (this[0] is OperationInput) - return OperationFlow.OneWay; - else - return OperationFlow.Notification; - case 2: - if (this[0] is OperationInput) - return OperationFlow.RequestResponse; - else - return OperationFlow.SolicitResponse; - } - return OperationFlow.None; - } - } - - public OperationInput Input { - get { - foreach (object message in List) - if (message is OperationInput) - return (OperationInput) message; - return null; - } - } - - public OperationMessage this [int index] { - get { return (OperationMessage) List[index]; } - set { List[index] = value; } - } - - public OperationOutput Output { - get { - foreach (object message in List) - if (message is OperationOutput) - return (OperationOutput) message; - return null; - } - } - - internal OperationFault Fault { - get { - foreach (object message in List) - if (message is OperationFault) - return (OperationFault) message; - return null; - } - } - - #endregion // Properties - - #region Methods - - protected override string GetKey (object value) - { - if (!(value is OperationMessage)) - throw new InvalidCastException (); - return ((OperationMessage) value).Name; - } - - public int Add (OperationMessage operationMessage) - { - Insert (Count, operationMessage); - return (Count - 1); - } - - public bool Contains (OperationMessage operationMessage) - { - return List.Contains (operationMessage); - } - - public void CopyTo (OperationMessage[] array, int index) - { - List.CopyTo (array, index); - } - - public int IndexOf (OperationMessage operationMessage) - { - return List.IndexOf (operationMessage); - } - - public void Insert (int index, OperationMessage operationMessage) - { - List.Insert (index, operationMessage); - } - - protected override void OnInsert (int index, object value) - { - if (Count == 0) - return; - - if (Count == 1 && value.GetType() != this[0].GetType()) - return; - - throw new InvalidOperationException ("The operation object can only contain one input and one output message."); - } - - protected override void OnSet (int index, object oldValue, object newValue) - { - if (oldValue.GetType () != newValue.GetType ()) - throw new InvalidOperationException ("The message types of the old and new value are not the same."); - base.OnSet (index, oldValue, newValue); - } - - protected override void OnValidate (object value) - { - if (value == null) - throw new ArgumentException("The message object is a null reference."); - if (!(value is OperationInput || value is OperationOutput)) - throw new ArgumentException ("The message object is not an input or an output message."); - } - - public void Remove (OperationMessage operationMessage) - { - List.Remove (operationMessage); - } - - protected override void SetParent (object value, object parent) - { - ((OperationMessage) value).SetParent ((Operation) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationOutput.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OperationOutput.cs deleted file mode 100644 index 4318d016c6e..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OperationOutput.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.Services.Description.OperationOutput.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - public sealed class OperationOutput : OperationMessage { - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/OutputBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/OutputBinding.cs deleted file mode 100644 index 3df29059c48..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/OutputBinding.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -// System.Web.Services.Description.OutputBinding.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - [XmlFormatExtensionPoint ("Extensions")] - public sealed class OutputBinding : MessageBinding { - - #region Fields - - ServiceDescriptionFormatExtensionCollection extensions; - - #endregion // Fields - - #region Constructors - - public OutputBinding () - { - extensions = new ServiceDescriptionFormatExtensionCollection (this); - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public override ServiceDescriptionFormatExtensionCollection Extensions { - get { return extensions; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/Port.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/Port.cs deleted file mode 100644 index 07ef9dbea1c..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/Port.cs +++ /dev/null @@ -1,107 +0,0 @@ -// -// System.Web.Services.Description.Port.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Configuration; -using System.Xml; -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - [XmlFormatExtensionPoint ("Extensions")] - public sealed class Port : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - #region Fields - - XmlQualifiedName binding; - ServiceDescriptionFormatExtensionCollection extensions; -#if !NET_2_0 - string name; -#endif - Service service; - - #endregion // Fields - - #region Constructors - - public Port () - { - binding = null; - extensions = new ServiceDescriptionFormatExtensionCollection (this); -#if !NET_2_0 - name = String.Empty; -#endif - service = null; - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute ("binding")] - public XmlQualifiedName Binding { - get { return binding; } - set { binding = value; } - } - - [XmlIgnore] - public ServiceDescriptionFormatExtensionCollection Extensions { - get { return extensions; } - } - -#if !NET_2_0 - [XmlAttribute ("name", DataType = "NCName")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - -// [XmlIgnore] - public Service Service { - get { return service; } - } - - #endregion // Properties - - #region Methods - - internal void SetParent (Service service) - { - this.service = service; - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/PortCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/PortCollection.cs deleted file mode 100644 index 79e51ec978c..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/PortCollection.cs +++ /dev/null @@ -1,114 +0,0 @@ -// -// System.Web.Services.Description.PortCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - public sealed class PortCollection : ServiceDescriptionBaseCollection { - - #region Constructors - - internal PortCollection (Service service) - : base (service) - { - } - - #endregion - - #region Properties - - public Port this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - - return (Port) List[index]; - } - set { List [index] = value; } - } - - public Port this [string name] { - get { - int index = IndexOf ((Port) Table[name]); - if (index >= 0) - return this[index]; - return null; - } - } - - #endregion // Properties - - #region Methods - - public int Add (Port port) - { - Insert (Count, port); - return (Count - 1); - } - - public bool Contains (Port port) - { - return List.Contains (port); - } - - public void CopyTo (Port[] array, int index) - { - List.CopyTo (array, index); - } - - protected override string GetKey (object value) - { - if (!(value is Port)) - throw new InvalidCastException (); - - return ((Port) value).Name; - } - - public int IndexOf (Port port) - { - return List.IndexOf (port); - } - - public void Insert (int index, Port port) - { - List.Insert (index, port); - } - - public void Remove (Port port) - { - List.Remove (port); - } - - protected override void SetParent (object value, object parent) - { - ((Port) value).SetParent ((Service) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/PortType.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/PortType.cs deleted file mode 100644 index 46116fd4afb..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/PortType.cs +++ /dev/null @@ -1,93 +0,0 @@ -// -// System.Web.Services.Description.PortType.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - public sealed class PortType : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - #region Fields - -#if !NET_2_0 - string name; -#endif - OperationCollection operations; - ServiceDescription serviceDescription; - - #endregion // Fields - - #region Constructors - - public PortType () - { - operations = new OperationCollection (this); - serviceDescription = null; - } - - #endregion // Constructors - - #region Properties - -#if !NET_2_0 - [XmlAttribute ("name", DataType = "NCName")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - - [XmlElement ("operation")] - public OperationCollection Operations { - get { return operations; } - } - -// [XmlIgnore] - public ServiceDescription ServiceDescription { - get { return serviceDescription; } - } - - #endregion // Properties - - #region Methods - - internal void SetParent (ServiceDescription serviceDescription) - { - this.serviceDescription = serviceDescription; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/PortTypeCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/PortTypeCollection.cs deleted file mode 100644 index 8c176b874e6..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/PortTypeCollection.cs +++ /dev/null @@ -1,113 +0,0 @@ -// -// System.Web.Services.Description.PortTypeCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - public sealed class PortTypeCollection : ServiceDescriptionBaseCollection { - - #region Constructors - - internal PortTypeCollection (ServiceDescription serviceDescription) - : base (serviceDescription) - { - } - - #endregion // Constructors - - #region Properties - - public PortType this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - - return (PortType) List[index]; - } - set { List [index] = value; } - } - - public PortType this [string name] { - get { - int index = IndexOf ((PortType) Table[name]); - if (index >= 0) - return this[index]; - return null; - } - } - - #endregion // Properties - - #region Methods - - public int Add (PortType portType) - { - Insert (Count, portType); - return (Count - 1); - } - - public bool Contains (PortType portType) - { - return List.Contains (portType); - } - - public void CopyTo (PortType[] array, int index) - { - List.CopyTo (array, index); - } - - protected override string GetKey (object value) - { - if (!(value is PortType)) - throw new InvalidCastException (); - return ((PortType) value).Name; - } - - public int IndexOf (PortType portType) - { - return List.IndexOf (portType); - } - - public void Insert (int index, PortType portType) - { - List.Insert (index, portType); - } - - public void Remove (PortType portType) - { - List.Remove (portType); - } - - protected override void SetParent (object value, object parent) - { - ((PortType) value).SetParent ((ServiceDescription) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ProtocolImporter.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ProtocolImporter.cs deleted file mode 100644 index 43f4e405bd4..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ProtocolImporter.cs +++ /dev/null @@ -1,846 +0,0 @@ -// -// System.Web.Services.Description.ProtocolImporter.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Xml.Serialization; -using System.Xml; -using System.Xml.Schema; -using System.Collections; -using System.Configuration; - -namespace System.Web.Services.Description { - public abstract class ProtocolImporter { - - #region Fields - - Binding binding; - string className; - CodeIdentifiers classNames; - CodeNamespace codeNamespace; - CodeCompileUnit codeCompileUnit; - CodeTypeDeclaration codeTypeDeclaration; - Message inputMessage; - string methodName; - Operation operation; - OperationBinding operationBinding; - Message outputMessage; - Port port; - PortType portType; - string protocolName; - Service service; - ServiceDescriptionImportWarnings warnings = (ServiceDescriptionImportWarnings)0; - ServiceDescriptionImporter descriptionImporter; - ImportInfo iinfo; - XmlSchemas xmlSchemas; - XmlSchemas soapSchemas; - -#if NET_2_0 - ArrayList asyncTypes = new ArrayList (); -#endif - - #endregion // Fields - - #region Constructors - - protected ProtocolImporter () - { - } - - #endregion // Constructors - - #region Properties - - [MonoTODO] - public XmlSchemas AbstractSchemas { - get { return descriptionImporter.Schemas; } - } - - public Binding Binding { - get { return binding; } - } - - public string ClassName { - get { return className; } - } - - public CodeIdentifiers ClassNames { - get { return classNames; } - } - - public CodeNamespace CodeNamespace { - get { return codeNamespace; } - } - - public CodeTypeDeclaration CodeTypeDeclaration { - get { return codeTypeDeclaration; } - } - - [MonoTODO] - public XmlSchemas ConcreteSchemas { - get { return descriptionImporter.Schemas; } - } - - public Message InputMessage { - get { return inputMessage; } - } - - public string MethodName { - get { return methodName; } - } - - public Operation Operation { - get { return operation; } - } - - public OperationBinding OperationBinding { - get { return operationBinding; } - } - - public Message OutputMessage { - get { return outputMessage; } - } - - public Port Port { - get { return port; } - } - - public PortType PortType { - get { return portType; } - } - - public abstract string ProtocolName { - get; - } - - public XmlSchemas Schemas { - get { return descriptionImporter.Schemas; } - } - - public Service Service { - get { return service; } - } - - public ServiceDescriptionCollection ServiceDescriptions { - get { return descriptionImporter.ServiceDescriptions; } - } - - public ServiceDescriptionImportStyle Style { - get { return descriptionImporter.Style; } - } - - public ServiceDescriptionImportWarnings Warnings { - get { return warnings; } - set { warnings = value; } - } - - internal ImportInfo ImportInfo - { - get { return iinfo; } - } - - internal XmlSchemas LiteralSchemas - { - get { return xmlSchemas; } - } - - internal XmlSchemas EncodedSchemas - { - get { return soapSchemas; } - } - -#if NET_2_0 - internal CodeGenerationOptions CodeGenerationOptions { - get { return descriptionImporter.CodeGenerationOptions; } - } - - internal ICodeGenerator CodeGenerator { - get { return descriptionImporter.CodeGenerator; } - } - - internal ImportContext ImportContext { - get { return descriptionImporter.Context; } - } -#endif - - #endregion // Properties - - #region Methods - - internal bool Import (ServiceDescriptionImporter descriptionImporter, CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit, ArrayList importInfo) - { - this.descriptionImporter = descriptionImporter; - this.classNames = new CodeIdentifiers();; - this.codeNamespace = codeNamespace; - this.codeCompileUnit = codeCompileUnit; - - warnings = (ServiceDescriptionImportWarnings) 0; - - bool found = false; - - ClasifySchemas (importInfo); - - BeginNamespace (); - - foreach (ImportInfo info in importInfo) - { - foreach (Service service in info.ServiceDescription.Services) - { - this.service = service; - int bindingCount = 0; - foreach (Port port in service.Ports) - { - binding = ServiceDescriptions.GetBinding (port.Binding); - if (IsBindingSupported ()) bindingCount ++; - } - - foreach (Port port in service.Ports) - { - this.iinfo = info; - this.port = port; - binding = ServiceDescriptions.GetBinding (port.Binding); - if (!IsBindingSupported ()) continue; - - found = true; - ImportPortBinding (bindingCount > 1); - } - } - } - - if (!found) - { - // Looks like MS.NET generates classes for all bindings if - // no services are present - - foreach (ImportInfo info in importInfo) - { - this.iinfo = info; - foreach (Binding b in info.ServiceDescription.Bindings) - { - this.binding = b; - this.service = null; - this.port = null; - if (!IsBindingSupported ()) continue; - found = true; - ImportPortBinding (true); - } - } - } - - EndNamespace (); - - if (!found) warnings = ServiceDescriptionImportWarnings.NoCodeGenerated; - return true; - } - - void ImportPortBinding (bool multipleBindings) - { - if (port != null) { - if (multipleBindings) className = port.Name; - else className = service.Name; - } - else - className = binding.Name; - - className = classNames.AddUnique (CodeIdentifier.MakeValid (className), port); - className = className.Replace ("_x0020_", ""); // MS.NET seems to do this - - try - { - portType = ServiceDescriptions.GetPortType (binding.Type); - if (portType == null) throw new Exception ("Port type not found: " + binding.Type); - - CodeTypeDeclaration codeClass = BeginClass (); - codeTypeDeclaration = codeClass; - AddCodeType (codeClass, port != null ? port.Documentation : null); - codeClass.Attributes = MemberAttributes.Public; - - if (service != null && service.Documentation != null && service.Documentation != "") - AddComments (codeClass, service.Documentation); - - if (Style == ServiceDescriptionImportStyle.Client) { - CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Diagnostics.DebuggerStepThroughAttribute"); - AddCustomAttribute (codeClass, att, true); - - att = new CodeAttributeDeclaration ("System.ComponentModel.DesignerCategoryAttribute"); - att.Arguments.Add (GetArg ("code")); - AddCustomAttribute (codeClass, att, true); - } - else - codeClass.TypeAttributes = System.Reflection.TypeAttributes.Abstract | System.Reflection.TypeAttributes.Public; - - if (binding.Operations.Count == 0) { - warnings |= ServiceDescriptionImportWarnings.NoMethodsGenerated; - return; - } - - foreach (OperationBinding oper in binding.Operations) - { - operationBinding = oper; - operation = FindPortOperation (); - if (operation == null) throw new Exception ("Operation " + operationBinding.Name + " not found in portType " + PortType.Name); - - foreach (OperationMessage omsg in operation.Messages) - { - Message msg = ServiceDescriptions.GetMessage (omsg.Message); - if (msg == null) throw new Exception ("Message not found: " + omsg.Message); - - if (omsg is OperationInput) - inputMessage = msg; - else - outputMessage = msg; - } - - CodeMemberMethod method = GenerateMethod (); - - if (method != null) - { - methodName = method.Name; - if (operation.Documentation != null && operation.Documentation != "") - AddComments (method, operation.Documentation); -#if NET_2_0 - if (Style == ServiceDescriptionImportStyle.Client) - AddAsyncMembers (method.Name, method); -#endif - } - } - -#if NET_2_0 - if (Style == ServiceDescriptionImportStyle.Client) - AddAsyncTypes (); -#endif - - EndClass (); - } - catch (InvalidOperationException ex) - { - warnings |= ServiceDescriptionImportWarnings.NoCodeGenerated; - UnsupportedBindingWarning (ex.Message); - } - } - - Operation FindPortOperation () - { - string inMessage = null; - string outMessage = null; - int numMsg = 1; - - if (operationBinding.Input == null) throw new InvalidOperationException ("Input operation binding not found"); - inMessage = (operationBinding.Input.Name != null) ? operationBinding.Input.Name : operationBinding.Name; - - if (operationBinding.Output != null) { - outMessage = (operationBinding.Output.Name != null) ? operationBinding.Output.Name : operationBinding.Name; - numMsg++; - } - - string operName = operationBinding.Name; - - Operation foundOper = null; - foreach (Operation oper in PortType.Operations) - { - if (oper.Name == operName) - { - int hits = 0; - foreach (OperationMessage omsg in oper.Messages) - { - if (omsg is OperationInput && GetOperMessageName (omsg, operName) == inMessage) hits++; - if (omsg is OperationOutput && GetOperMessageName (omsg, operName) == outMessage) hits++; - } - if (hits == numMsg) return oper; - foundOper = oper; - } - } - return foundOper; - } - - string GetOperMessageName (OperationMessage msg, string operName) - { - if (msg.Name == null) return operName; - else return msg.Name; - } - - internal void GenerateServiceUrl (string location, CodeStatementCollection stms) - { - if (ImportInfo.AppSettingUrlKey == null || ImportInfo.AppSettingUrlKey == string.Empty) { - if (location != null) { - CodeExpression ce = new CodeFieldReferenceExpression (new CodeThisReferenceExpression(), "Url"); - CodeAssignStatement cas = new CodeAssignStatement (ce, new CodePrimitiveExpression (location)); - stms.Add (cas); - } - } - else - { - CodeExpression prop = new CodePropertyReferenceExpression (new CodeTypeReferenceExpression ("System.Configuration.ConfigurationSettings"), "AppSettings"); - prop = new CodeIndexerExpression (prop, new CodePrimitiveExpression (ImportInfo.AppSettingUrlKey)); - stms.Add (new CodeVariableDeclarationStatement (typeof(string), "urlSetting", prop)); - - CodeExpression urlSetting = new CodeVariableReferenceExpression ("urlSetting"); - CodeExpression thisUrl = new CodeFieldReferenceExpression (new CodeThisReferenceExpression(), "Url"); - - CodeStatement[] trueStms = new CodeStatement [1]; - CodeExpression ce = urlSetting; - CodeExpression cond = new CodeBinaryOperatorExpression (urlSetting, CodeBinaryOperatorType.IdentityInequality, new CodePrimitiveExpression (null)); - - if (ImportInfo.AppSettingBaseUrl != null) - ce = new CodeMethodInvokeExpression (new CodeTypeReferenceExpression (typeof(string)), "Concat", ce, new CodePrimitiveExpression (ImportInfo.AppSettingBaseUrl)); - trueStms [0] = new CodeAssignStatement (thisUrl, ce); - - if (location != null) { - CodeStatement[] falseStms = new CodeStatement [1]; - falseStms [0] = new CodeAssignStatement (thisUrl, new CodePrimitiveExpression (location)); - stms.Add (new CodeConditionStatement (cond, trueStms, falseStms)); - } - else - stms.Add (new CodeConditionStatement (cond, trueStms)); - } - } - - void ClasifySchemas (ArrayList importInfo) - { - // I don't like this, but I could not find any other way of clasifying - // schemas between encoded and literal. - - xmlSchemas = new XmlSchemas (); - soapSchemas = new XmlSchemas (); - - foreach (ImportInfo info in importInfo) - { - foreach (Service service in info.ServiceDescription.Services) - { - foreach (Port port in service.Ports) - { - this.iinfo = info; - this.port = port; - binding = ServiceDescriptions.GetBinding (port.Binding); - if (binding == null) continue; - portType = ServiceDescriptions.GetPortType (binding.Type); - if (portType == null) continue; - - foreach (OperationBinding oper in binding.Operations) - { - operationBinding = oper; - operation = FindPortOperation (); - if (operation == null) continue; - - foreach (OperationMessage omsg in operation.Messages) - { - Message msg = ServiceDescriptions.GetMessage (omsg.Message); - if (msg == null) continue; - - if (omsg is OperationInput) - inputMessage = msg; - else - outputMessage = msg; - } - - if (GetMessageEncoding (oper.Input) == SoapBindingUse.Encoded) - AddMessageSchema (soapSchemas, oper.Input, inputMessage); - else - AddMessageSchema (xmlSchemas, oper.Input, inputMessage); - - if (oper.Output != null) { - if (GetMessageEncoding (oper.Output) == SoapBindingUse.Encoded) - AddMessageSchema (soapSchemas, oper.Output, outputMessage); - else - AddMessageSchema (xmlSchemas, oper.Output, outputMessage); - } - } - } - } - } - - XmlSchemas defaultList = xmlSchemas; - - if (xmlSchemas.Count == 0 && soapSchemas.Count > 0) - defaultList = soapSchemas; - - // Schemas not referenced by any message - foreach (XmlSchema sc in Schemas) - { - if (!soapSchemas.Contains (sc) && !xmlSchemas.Contains (sc)) { - if (ImportsEncodedNamespace (sc)) - soapSchemas.Add (sc); - else - defaultList.Add (sc); - } - } - } - - void AddMessageSchema (XmlSchemas schemas, MessageBinding mb, Message msg) - { - foreach (MessagePart part in msg.Parts) - { - if (part.Element != XmlQualifiedName.Empty) - AddIncludingSchema (schemas, part.Element.Namespace); - else if (part.Type != XmlQualifiedName.Empty) - AddIncludingSchema (schemas, part.Type.Namespace); - } - SoapBodyBinding sbb = mb.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding; - if (sbb != null) AddIncludingSchema (schemas, sbb.Namespace); - } - - void AddIncludingSchema (XmlSchemas list, string ns) - { - XmlSchema sc = Schemas [ns]; - if (sc == null || list.Contains (sc)) return; - list.Add (sc); - foreach (XmlSchemaObject ob in sc.Includes) - { - XmlSchemaImport import = ob as XmlSchemaImport; - if (import != null) AddIncludingSchema (list, import.Namespace); - } - } - - SoapBindingUse GetMessageEncoding (MessageBinding mb) - { - SoapBodyBinding sbb = mb.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding; - if (sbb == null) - { - if (mb is InputBinding) return SoapBindingUse.Encoded; - else return SoapBindingUse.Literal; - } - else - if (sbb.Use == SoapBindingUse.Encoded) return SoapBindingUse.Encoded; - else - return SoapBindingUse.Literal; - } - - bool ImportsEncodedNamespace (XmlSchema sc) - { - foreach (XmlSchemaObject ob in sc.Includes) - { - XmlSchemaImport import = ob as XmlSchemaImport; - if (import.Namespace == SoapProtocolReflector.EncodingNamespace) return true; - } - return false; - } - -#if NET_2_0 - - void AddAsyncTypes () - { - foreach (CodeTypeDeclaration type in asyncTypes) - codeNamespace.Types.Add (type); - asyncTypes.Clear (); - } - - void AddAsyncMembers (string messageName, CodeMemberMethod method) - { - CodeThisReferenceExpression ethis = new CodeThisReferenceExpression(); - CodePrimitiveExpression enull = new CodePrimitiveExpression (null); - - CodeMemberField codeField = new CodeMemberField (typeof(System.Threading.SendOrPostCallback), messageName + "OperationCompleted"); - codeField.Attributes = MemberAttributes.Private; - CodeTypeDeclaration.Members.Add (codeField); - - // Event arguments class - - string argsClassName = classNames.AddUnique (messageName + "CompletedEventArgs", null); - CodeTypeDeclaration argsClass = new CodeTypeDeclaration (argsClassName); - argsClass.BaseTypes.Add (new CodeTypeReference ("System.ComponentModel.AsyncCompletedEventArgs")); - - CodeMemberField resultsField = new CodeMemberField (typeof(object[]), "results"); - resultsField.Attributes = MemberAttributes.Private; - argsClass.Members.Add (resultsField); - - CodeConstructor cc = new CodeConstructor (); - cc.Attributes = MemberAttributes.Assembly; - cc.Parameters.Add (new CodeParameterDeclarationExpression (typeof(object[]), "results")); - cc.Parameters.Add (new CodeParameterDeclarationExpression (typeof(System.Exception), "exception")); - cc.Parameters.Add (new CodeParameterDeclarationExpression (typeof(bool), "cancelled")); - cc.Parameters.Add (new CodeParameterDeclarationExpression (typeof(object), "userState")); - cc.BaseConstructorArgs.Add (new CodeVariableReferenceExpression ("exception")); - cc.BaseConstructorArgs.Add (new CodeVariableReferenceExpression ("cancelled")); - cc.BaseConstructorArgs.Add (new CodeVariableReferenceExpression ("userState")); - CodeExpression thisResults = new CodeFieldReferenceExpression (ethis, "results"); - cc.Statements.Add (new CodeAssignStatement (thisResults, new CodeVariableReferenceExpression ("results"))); - argsClass.Members.Add (cc); - - int ind = 0; - - if (method.ReturnType.BaseType != "System.Void") - argsClass.Members.Add (CreateArgsProperty (method.ReturnType, "Result", ind++)); - - foreach (CodeParameterDeclarationExpression par in method.Parameters) - { - if (par.Direction == FieldDirection.Out || par.Direction == FieldDirection.Ref) - argsClass.Members.Add (CreateArgsProperty (par.Type, par.Name, ind++)); - } - - bool needsArgsClass = (ind > 0); - if (needsArgsClass) - asyncTypes.Add (argsClass); - else - argsClassName = "System.ComponentModel.AsyncCompletedEventArgs"; - - // Event delegate type - - CodeTypeDelegate delegateType = new CodeTypeDelegate (messageName + "CompletedEventHandler"); - delegateType.Parameters.Add (new CodeParameterDeclarationExpression (typeof(object), "sender")); - delegateType.Parameters.Add (new CodeParameterDeclarationExpression (argsClassName, "args")); - - // Event member - - CodeMemberEvent codeEvent = new CodeMemberEvent (); - codeEvent.Name = messageName + "Completed"; - codeEvent.Type = new CodeTypeReference (delegateType.Name); - CodeTypeDeclaration.Members.Add (codeEvent); - - // Async method (without user state param) - - CodeMemberMethod am = new CodeMemberMethod (); - am.Attributes = MemberAttributes.Public | MemberAttributes.Final; - am.Name = method.Name + "Async"; - am.ReturnType = new CodeTypeReference (typeof(void)); - CodeMethodInvokeExpression inv; - inv = new CodeMethodInvokeExpression (ethis, am.Name); - am.Statements.Add (inv); - - // On...Completed method - - CodeMemberMethod onCompleted = new CodeMemberMethod (); - onCompleted.Name = "On" + messageName + "Completed"; - onCompleted.Attributes = MemberAttributes.Private | MemberAttributes.Final; - onCompleted.ReturnType = new CodeTypeReference (typeof(void)); - onCompleted.Parameters.Add (new CodeParameterDeclarationExpression (typeof(object), "arg")); - - CodeConditionStatement anIf = new CodeConditionStatement (); - - CodeExpression eventField = new CodeEventReferenceExpression (ethis, codeEvent.Name); - anIf.Condition = new CodeBinaryOperatorExpression (eventField, CodeBinaryOperatorType.IdentityInequality, enull); - CodeExpression castedArg = new CodeCastExpression (typeof(System.Web.Services.Protocols.InvokeCompletedEventArgs), new CodeVariableReferenceExpression ("arg")); - CodeStatement invokeArgs = new CodeVariableDeclarationStatement (typeof(System.Web.Services.Protocols.InvokeCompletedEventArgs), "invokeArgs", castedArg); - anIf.TrueStatements.Add (invokeArgs); - - CodeDelegateInvokeExpression delegateInvoke = new CodeDelegateInvokeExpression (); - delegateInvoke.TargetObject = eventField; - delegateInvoke.Parameters.Add (ethis); - CodeObjectCreateExpression argsInstance = new CodeObjectCreateExpression (argsClassName); - CodeExpression invokeArgsVar = new CodeVariableReferenceExpression ("invokeArgs"); - if (needsArgsClass) argsInstance.Parameters.Add (new CodeFieldReferenceExpression (invokeArgsVar, "Results")); - argsInstance.Parameters.Add (new CodeFieldReferenceExpression (invokeArgsVar, "Error")); - argsInstance.Parameters.Add (new CodeFieldReferenceExpression (invokeArgsVar, "Cancelled")); - argsInstance.Parameters.Add (new CodeFieldReferenceExpression (invokeArgsVar, "UserState")); - delegateInvoke.Parameters.Add (argsInstance); - anIf.TrueStatements.Add (delegateInvoke); - - onCompleted.Statements.Add (anIf); - - // Async method - - CodeMemberMethod asyncMethod = new CodeMemberMethod (); - asyncMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; - asyncMethod.Name = method.Name + "Async"; - asyncMethod.ReturnType = new CodeTypeReference (typeof(void)); - - CodeExpression delegateField = new CodeFieldReferenceExpression (ethis, codeField.Name); - anIf = new CodeConditionStatement (); - anIf.Condition = new CodeBinaryOperatorExpression (delegateField, CodeBinaryOperatorType.IdentityEquality, enull);; - CodeExpression delegateRef = new CodeMethodReferenceExpression (ethis, onCompleted.Name); - CodeExpression newDelegate = new CodeObjectCreateExpression (typeof(System.Threading.SendOrPostCallback), delegateRef); - CodeAssignStatement cas = new CodeAssignStatement (delegateField, newDelegate); - anIf.TrueStatements.Add (cas); - asyncMethod.Statements.Add (anIf); - - CodeArrayCreateExpression paramsArray = new CodeArrayCreateExpression (typeof(object)); - - // Assign parameters - - CodeIdentifiers paramsIds = new CodeIdentifiers (); - - foreach (CodeParameterDeclarationExpression par in method.Parameters) - { - paramsIds.Add (par.Name, null); - if (par.Direction == FieldDirection.In || par.Direction == FieldDirection.Ref) { - CodeParameterDeclarationExpression inpar = new CodeParameterDeclarationExpression (par.Type, par.Name); - am.Parameters.Add (inpar); - asyncMethod.Parameters.Add (inpar); - inv.Parameters.Add (new CodeVariableReferenceExpression (par.Name)); - paramsArray.Initializers.Add (new CodeVariableReferenceExpression (par.Name)); - } - } - - - inv.Parameters.Add (enull); - - string userStateName = paramsIds.AddUnique ("userState", null); - asyncMethod.Parameters.Add (new CodeParameterDeclarationExpression (typeof(object), userStateName)); - - CodeExpression userStateVar = new CodeVariableReferenceExpression (userStateName); - asyncMethod.Statements.Add (BuildInvokeAsync (messageName, paramsArray, delegateField, userStateVar)); - - CodeTypeDeclaration.Members.Add (am); - CodeTypeDeclaration.Members.Add (asyncMethod); - CodeTypeDeclaration.Members.Add (onCompleted); - - asyncTypes.Add (delegateType); - } - - CodeMemberProperty CreateArgsProperty (CodeTypeReference type, string name, int ind) - { - CodeMemberProperty prop = new CodeMemberProperty (); - prop.Attributes = MemberAttributes.Public | MemberAttributes.Final; - prop.HasGet = true; - prop.HasSet = false; - prop.Name = name; - prop.Type = type; - CodeThisReferenceExpression ethis = new CodeThisReferenceExpression(); - CodeExpression thisResults = new CodeFieldReferenceExpression (ethis, "results"); - prop.GetStatements.Add (new CodeMethodInvokeExpression (ethis, "RaiseExceptionIfNecessary")); - CodeArrayIndexerExpression arrValue = new CodeArrayIndexerExpression (thisResults, new CodePrimitiveExpression (ind)); - CodeExpression retval = new CodeCastExpression (type, arrValue); - prop.GetStatements.Add (new CodeMethodReturnStatement (retval)); - return prop; - } - - internal virtual CodeExpression BuildInvokeAsync (string messageName, CodeArrayCreateExpression paramsArray, CodeExpression delegateField, CodeExpression userStateVar) - { - CodeThisReferenceExpression ethis = new CodeThisReferenceExpression(); - CodeMethodInvokeExpression inv2 = new CodeMethodInvokeExpression (ethis, "InvokeAsync"); - inv2.Parameters.Add (new CodePrimitiveExpression (messageName)); - inv2.Parameters.Add (paramsArray); - inv2.Parameters.Add (delegateField); - inv2.Parameters.Add (userStateVar); - return inv2; - } -#endif - - [MonoTODO] - public void AddExtensionWarningComments (CodeCommentStatementCollection comments, ServiceDescriptionFormatExtensionCollection extensions) - { - throw new NotImplementedException (); - } - - protected abstract CodeTypeDeclaration BeginClass (); - - protected virtual void BeginNamespace () - { - } - - protected virtual void EndClass () - { - } - - protected virtual void EndNamespace () - { - } - - protected abstract CodeMemberMethod GenerateMethod (); - protected abstract bool IsBindingSupported (); - protected abstract bool IsOperationFlowSupported (OperationFlow flow); - - [MonoTODO] - public Exception OperationBindingSyntaxException (string text) - { - throw new NotImplementedException (); - } - - [MonoTODO] - public Exception OperationSyntaxException (string text) - { - throw new NotImplementedException (); - } - - public void UnsupportedBindingWarning (string text) - { - warnings |= ServiceDescriptionImportWarnings.UnsupportedBindingsIgnored; - AddGlobalComments ("WARNING: Could not generate proxy for binding " + binding.Name + ". " + text); - } - - public void UnsupportedOperationBindingWarning (string text) - { - warnings |= ServiceDescriptionImportWarnings.UnsupportedOperationsIgnored; - AddGlobalComments ("WARNING: Could not generate operation " + OperationBinding.Name + ". " + text); - } - - public void UnsupportedOperationWarning (string text) - { - warnings |= ServiceDescriptionImportWarnings.UnsupportedOperationsIgnored; - AddGlobalComments ("WARNING: Could not generate operation " + OperationBinding.Name + ". " + text); - } - - void AddGlobalComments (string comments) - { - codeNamespace.Comments.Add (new CodeCommentStatement (comments, false)); - } - - void AddComments (CodeTypeMember member, string comments) - { - if (comments == null || comments == "") member.Comments.Add (new CodeCommentStatement ("", true)); - else member.Comments.Add (new CodeCommentStatement ("\n" + comments + "\n", true)); - } - - void AddCodeType (CodeTypeDeclaration type, string comments) - { - AddComments (type, comments); - codeNamespace.Types.Add (type); - } - - internal void AddCustomAttribute (CodeTypeMember ctm, CodeAttributeDeclaration att, bool addIfNoParams) - { - if (att.Arguments.Count == 0 && !addIfNoParams) return; - - if (ctm.CustomAttributes == null) ctm.CustomAttributes = new CodeAttributeDeclarationCollection (); - ctm.CustomAttributes.Add (att); - } - - internal void AddCustomAttribute (CodeTypeMember ctm, string name, params CodeAttributeArgument[] args) - { - if (ctm.CustomAttributes == null) ctm.CustomAttributes = new CodeAttributeDeclarationCollection (); - ctm.CustomAttributes.Add (new CodeAttributeDeclaration (name, args)); - } - - internal CodeAttributeArgument GetArg (string name, object value) - { - return new CodeAttributeArgument (name, new CodePrimitiveExpression(value)); - } - - internal CodeAttributeArgument GetEnumArg (string name, string enumType, string enumValue) - { - return new CodeAttributeArgument (name, new CodeFieldReferenceExpression (new CodeTypeReferenceExpression(enumType), enumValue)); - } - - internal CodeAttributeArgument GetArg (object value) - { - return new CodeAttributeArgument (new CodePrimitiveExpression(value)); - } - - internal CodeAttributeArgument GetTypeArg (string name, string typeName) - { - return new CodeAttributeArgument (name, new CodeTypeOfExpression(typeName)); - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ProtocolReflector.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ProtocolReflector.cs deleted file mode 100644 index 692d4a19461..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ProtocolReflector.cs +++ /dev/null @@ -1,415 +0,0 @@ -// -// System.Web.Services.Description.ProtocolReflector.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Xml.Serialization; -using System.Xml; -using System.Xml.Schema; -using System.Collections; - -namespace System.Web.Services.Description { - public abstract class ProtocolReflector { - - #region Fields - - Binding binding; - string defaultNamespace; - MessageCollection headerMessages; - Message inputMessage; - LogicalMethodInfo[] methods; - Operation operation; - OperationBinding operationBinding; - Message outputMessage; - Port port; - PortType portType; - string protocolName; - XmlSchemaExporter schemaExporter; - Service service; - ServiceDescription serviceDescription; - Type serviceType; - string serviceUrl; - SoapSchemaExporter soapSchemaExporter; - MethodStubInfo methodStubInfo; - TypeStubInfo typeInfo; - ArrayList extensionReflectors; - ServiceDescriptionReflector serviceReflector; - - XmlReflectionImporter reflectionImporter; - SoapReflectionImporter soapReflectionImporter; - - CodeIdentifiers portNames; - - #endregion // Fields - - #region Constructors - - protected ProtocolReflector () - { - defaultNamespace = WebServiceAttribute.DefaultNamespace; - extensionReflectors = ExtensionManager.BuildExtensionReflectors (); - } - - #endregion // Constructors - - #region Properties - - public Binding Binding { - get { return binding; } - } - - public string DefaultNamespace { - get { return defaultNamespace; } - } - - public MessageCollection HeaderMessages { - get { return headerMessages; } // TODO: set - } - - public Message InputMessage { - get { return inputMessage; } - } - - public LogicalMethodInfo Method { - get { return methodStubInfo.MethodInfo; } - } - - public WebMethodAttribute MethodAttribute { - get { return methodStubInfo.MethodAttribute; } - } - - public LogicalMethodInfo[] Methods { - get { return typeInfo.LogicalType.LogicalMethods; } - } - - public Operation Operation { - get { return operation; } - } - - public OperationBinding OperationBinding { - get { return operationBinding; } - } - - public Message OutputMessage { - get { return outputMessage; } - } - - public Port Port { - get { return port; } - } - - public PortType PortType { - get { return portType; } - } - - public abstract string ProtocolName { - get; - } - - public XmlReflectionImporter ReflectionImporter - { - get - { - if (reflectionImporter == null) { - reflectionImporter = typeInfo.XmlImporter; - if (reflectionImporter == null) - reflectionImporter = new XmlReflectionImporter(); - } - return reflectionImporter; - } - } - - internal SoapReflectionImporter SoapReflectionImporter - { - get - { - if (soapReflectionImporter == null) { - soapReflectionImporter = typeInfo.SoapImporter; - if (soapReflectionImporter == null) - soapReflectionImporter = new SoapReflectionImporter(); - } - return soapReflectionImporter; - } - } - - public XmlSchemaExporter SchemaExporter { - get { return schemaExporter; } - } - - internal SoapSchemaExporter SoapSchemaExporter { - get { return soapSchemaExporter; } - } - - public XmlSchemas Schemas { - get { return serviceReflector.Schemas; } - } - - public Service Service { - get { return service; } - } - - public ServiceDescription ServiceDescription { - get { return serviceDescription; } - } - - public ServiceDescriptionCollection ServiceDescriptions { - get { return serviceReflector.ServiceDescriptions; } - } - - public Type ServiceType { - get { return serviceType; } - } - - public string ServiceUrl { - get { return serviceUrl; } - } - - internal MethodStubInfo MethodStubInfo { - get { return methodStubInfo; } - } - - internal TypeStubInfo TypeInfo { - get { return typeInfo; } - } - - - #endregion // Properties - - #region Methods - - internal void Reflect (ServiceDescriptionReflector serviceReflector, Type type, string url, XmlSchemaExporter xxporter, SoapSchemaExporter sxporter) - { - portNames = new CodeIdentifiers (); - this.serviceReflector = serviceReflector; - serviceUrl = url; - serviceType = type; - - schemaExporter = xxporter; - soapSchemaExporter = sxporter; - - typeInfo = TypeStubManager.GetTypeStub (type, ProtocolName); - - ServiceDescription desc = ServiceDescriptions [typeInfo.LogicalType.WebServiceNamespace]; - - if (desc == null) - { - desc = new ServiceDescription (); - desc.TargetNamespace = typeInfo.LogicalType.WebServiceNamespace; - desc.Name = typeInfo.LogicalType.WebServiceName; - ServiceDescriptions.Add (desc); - } - - ImportService (desc, typeInfo, url); - } - - void ImportService (ServiceDescription desc, TypeStubInfo typeInfo, string url) - { - service = desc.Services [typeInfo.LogicalType.WebServiceName]; - if (service == null) - { - service = new Service (); - service.Name = typeInfo.LogicalType.WebServiceName; - service.Documentation = typeInfo.LogicalType.Description; - desc.Services.Add (service); - } - - foreach (BindingInfo binfo in typeInfo.Bindings) - ImportBinding (desc, service, typeInfo, url, binfo); - } - - void ImportBinding (ServiceDescription desc, Service service, TypeStubInfo typeInfo, string url, BindingInfo binfo) - { - port = new Port (); - port.Name = portNames.AddUnique (binfo.Name, port); - bool bindingFull = true; - - if (binfo.Namespace != desc.TargetNamespace) - { - if (binfo.Location == null || binfo.Location == string.Empty) - { - ServiceDescription newDesc = new ServiceDescription(); - newDesc.TargetNamespace = binfo.Namespace; - newDesc.Name = binfo.Name; - bindingFull = ImportBindingContent (newDesc, typeInfo, url, binfo); - if (bindingFull) { - int id = ServiceDescriptions.Add (newDesc); - AddImport (desc, binfo.Namespace, GetWsdlUrl (url,id)); - } - } - else { - AddImport (desc, binfo.Namespace, binfo.Location); - bindingFull = true; - } - } - else - bindingFull = ImportBindingContent (desc, typeInfo, url, binfo); - - if (bindingFull) - { - port.Binding = new XmlQualifiedName (binding.Name, binfo.Namespace); - service.Ports.Add (port); - } - } - - bool ImportBindingContent (ServiceDescription desc, TypeStubInfo typeInfo, string url, BindingInfo binfo) - { - serviceDescription = desc; - - // Look for an unused name - - int n=0; - string name = binfo.Name; - bool found; - do - { - found = false; - foreach (Binding bi in desc.Bindings) - if (bi.Name == name) { found = true; n++; name = binfo.Name+n; break; } - } - while (found); - - // Create the binding - - binding = new Binding (); - binding.Name = name; - binding.Type = new XmlQualifiedName (binding.Name, binfo.Namespace); - - portType = new PortType (); - portType.Name = binding.Name; - - BeginClass (); - - foreach (MethodStubInfo method in typeInfo.Methods) - { - methodStubInfo = method; - - string metBinding = ReflectMethodBinding (); - if (typeInfo.GetBinding (metBinding) != binfo) continue; - - operation = new Operation (); - operation.Name = method.OperationName; - operation.Documentation = method.MethodAttribute.Description; - - inputMessage = new Message (); - inputMessage.Name = method.Name + ProtocolName + "In"; - ServiceDescription.Messages.Add (inputMessage); - - outputMessage = new Message (); - outputMessage.Name = method.Name + ProtocolName + "Out"; - ServiceDescription.Messages.Add (outputMessage); - - OperationInput inOp = new OperationInput (); - if (method.Name != method.OperationName) inOp.Name = method.Name; - Operation.Messages.Add (inOp); - inOp.Message = new XmlQualifiedName (inputMessage.Name, ServiceDescription.TargetNamespace); - - OperationOutput outOp = new OperationOutput (); - if (method.Name != method.OperationName) outOp.Name = method.Name; - Operation.Messages.Add (outOp); - outOp.Message = new XmlQualifiedName (outputMessage.Name, ServiceDescription.TargetNamespace); - - portType.Operations.Add (operation); - ImportOperationBinding (); - - ReflectMethod (); - - foreach (SoapExtensionReflector reflector in extensionReflectors) - { - reflector.ReflectionContext = this; - reflector.ReflectMethod (); - } - } - - EndClass (); - - if (portType.Operations.Count > 0) - { - desc.Bindings.Add (binding); - desc.PortTypes.Add (portType); - return true; - } - else - return false; - } - - void ImportOperationBinding () - { - operationBinding = new OperationBinding (); - operationBinding.Name = methodStubInfo.OperationName; - - InputBinding inOp = new InputBinding (); - operationBinding.Input = inOp; - - OutputBinding outOp = new OutputBinding (); - operationBinding.Output = outOp; - - if (methodStubInfo.OperationName != methodStubInfo.Name) - inOp.Name = outOp.Name = methodStubInfo.Name; - - binding.Operations.Add (operationBinding); - } - - internal static void AddImport (ServiceDescription desc, string ns, string location) - { - Import im = new Import(); - im.Namespace = ns; - im.Location = location; - desc.Imports.Add (im); - } - - string GetWsdlUrl (string baseUrl, int id) - { - return baseUrl + "?wsdl=" + id; - } - - protected virtual void BeginClass () - { - } - - protected virtual void EndClass () - { - } - - public ServiceDescription GetServiceDescription (string ns) - { - return ServiceDescriptions [ns]; - } - - protected abstract bool ReflectMethod (); - - protected virtual string ReflectMethodBinding () - { - return null; - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/Service.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/Service.cs deleted file mode 100644 index 52bccf08549..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/Service.cs +++ /dev/null @@ -1,103 +0,0 @@ -// -// System.Web.Services.Description.Service.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - public sealed class Service : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - #region Fields - - ServiceDescriptionFormatExtensionCollection extensions; -#if !NET_2_0 - string name; -#endif - PortCollection ports; - ServiceDescription serviceDescription; - - #endregion // Fields - - #region Constructors - - public Service () - { - extensions = new ServiceDescriptionFormatExtensionCollection (this); -#if !NET_2_0 - name = String.Empty; -#endif - ports = new PortCollection (this); - serviceDescription = null; - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public ServiceDescriptionFormatExtensionCollection Extensions { - get { return extensions; } - } - -#if !NET_2_0 - [XmlAttribute ("name", DataType = "NCName")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - - [XmlElement ("port")] - public PortCollection Ports { - get { return ports; } - } - -// [XmlIgnore] - public ServiceDescription ServiceDescription { - get { return serviceDescription; } - } - - #endregion // Properties - - #region Methods - - internal void SetParent (ServiceDescription serviceDescription) - { - this.serviceDescription = serviceDescription; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceCollection.cs deleted file mode 100644 index 996011ac826..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceCollection.cs +++ /dev/null @@ -1,116 +0,0 @@ -// -// System.Web.Services.Description.ServiceCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; - -namespace System.Web.Services.Description { - public sealed class ServiceCollection : ServiceDescriptionBaseCollection { - - #region Constructors - - internal ServiceCollection (ServiceDescription serviceDescription) - : base (serviceDescription) - { - } - - #endregion // Constructors - - #region Properties - - public Service this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - - return (Service) List[index]; - } - set { List [index] = value; } - } - - public Service this [string name] { - get { - int index = IndexOf ((Service) Table[name]); - if (index >= 0) - return this[index]; - return null; - } - } - - #endregion // Properties - - #region Methods - - public int Add (Service service) - { - Insert (Count, service); - return (Count - 1); - } - - public bool Contains (Service service) - { - return List.Contains (service); - } - - public void CopyTo (Service[] array, int index) - { - List.CopyTo (array, index); - } - - protected override string GetKey (object value) - { - if (!(value is Service)) - throw new InvalidCastException (); - - return ((Service) value).Name; - } - - public int IndexOf (Service service) - { - return List.IndexOf (service); - } - - public void Insert (int index, Service service) - { - List.Insert (index, service); - } - - public void Remove (Service service) - { - List.Remove (service); - } - - protected override void SetParent (object value, object parent) - { - ((Service) value).SetParent ((ServiceDescription) parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescription.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescription.cs deleted file mode 100644 index 66729c338ab..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescription.cs +++ /dev/null @@ -1,339 +0,0 @@ -// -// System.Web.Services.Description.ServiceDescription.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Collections; -using System.Reflection; -using System.Web.Services; -using System.Web.Services.Configuration; -using System.Xml; -using System.Xml.Schema; -using System.Xml.Serialization; - -namespace System.Web.Services.Description -{ - [XmlFormatExtensionPoint ("Extensions")] - [XmlRoot ("definitions", Namespace = "http://schemas.xmlsoap.org/wsdl/")] - public sealed class ServiceDescription : -#if NET_2_0 - NamedItem -#else - DocumentableItem -#endif - { - #region Fields - - public const string Namespace = "http://schemas.xmlsoap.org/wsdl/"; - - BindingCollection bindings; - ServiceDescriptionFormatExtensionCollection extensions; - ImportCollection imports; - MessageCollection messages; -#if !NET_2_0 - string name; -#endif - PortTypeCollection portTypes; - string retrievalUrl; - ServiceDescriptionCollection serviceDescriptions; - ServiceCollection services; - string targetNamespace; - Types types; - static ServiceDescriptionSerializer serializer; - - #endregion // Fields - - #region Constructors - - static ServiceDescription () - { - serializer = new ServiceDescriptionSerializer (); - } - - public ServiceDescription () - { - bindings = new BindingCollection (this); - extensions = new ServiceDescriptionFormatExtensionCollection (this); - imports = new ImportCollection (this); - messages = new MessageCollection (this); -#if !NET_2_0 - name = String.Empty; -#endif - portTypes = new PortTypeCollection (this); - - serviceDescriptions = null; - services = new ServiceCollection (this); - targetNamespace = String.Empty; - types = null; - } - - #endregion // Constructors - - #region Properties - - [XmlElement ("import")] - public ImportCollection Imports { - get { return imports; } - } - - [XmlElement ("types")] - public Types Types { - get { return types; } - set { types = value; } - } - - [XmlElement ("message")] - public MessageCollection Messages { - get { return messages; } - } - - [XmlElement ("portType")] - public PortTypeCollection PortTypes { - get { return portTypes; } - } - - [XmlElement ("binding")] - public BindingCollection Bindings { - get { return bindings; } - } - - [XmlIgnore] - public ServiceDescriptionFormatExtensionCollection Extensions { - get { return extensions; } - } - -#if !NET_2_0 - [XmlAttribute ("name", DataType = "NMTOKEN")] - public string Name { - get { return name; } - set { name = value; } - } -#endif - - [XmlIgnore] - public string RetrievalUrl { - get { return retrievalUrl; } - set { retrievalUrl = value; } - } - - [XmlIgnore] - public static XmlSerializer Serializer { - get { return serializer; } - } - - [XmlIgnore] - public ServiceDescriptionCollection ServiceDescriptions { - get { - if (serviceDescriptions == null) - throw new NullReferenceException (); - return serviceDescriptions; - } - } - - [XmlElement ("service")] - public ServiceCollection Services { - get { return services; } - } - - [XmlAttribute ("targetNamespace")] - public string TargetNamespace { - get { return targetNamespace; } - set { targetNamespace = value; } - } - - #endregion // Properties - - #region Methods - - public static bool CanRead (XmlReader reader) - { - reader.MoveToContent (); - return reader.LocalName == "definitions" && - reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/"; - } - - public static ServiceDescription Read (Stream stream) - { - return (ServiceDescription) serializer.Deserialize (stream); - } - - public static ServiceDescription Read (string fileName) - { - return Read (new FileStream (fileName, FileMode.Open)); - } - - public static ServiceDescription Read (TextReader textReader) - { - return (ServiceDescription) serializer.Deserialize (textReader); - } - - public static ServiceDescription Read (XmlReader reader) - { - return (ServiceDescription) serializer.Deserialize (reader); - } - - public void Write (Stream stream) - { - serializer.Serialize (stream, this, GetNamespaceList ()); - } - - public void Write (string fileName) - { - Write (new FileStream (fileName, FileMode.Create)); - } - - public void Write (TextWriter writer) - { - serializer.Serialize (writer, this, GetNamespaceList ()); - } - - public void Write (XmlWriter writer) - { - serializer.Serialize (writer, this, GetNamespaceList ()); - } - - internal void SetParent (ServiceDescriptionCollection serviceDescriptions) - { - this.serviceDescriptions = serviceDescriptions; - } - - XmlSerializerNamespaces GetNamespaceList () - { - XmlSerializerNamespaces ns; - ns = new XmlSerializerNamespaces (); - ns.Add ("soap", SoapBinding.Namespace); - ns.Add ("soapenc", "http://schemas.xmlsoap.org/soap/encoding/"); - ns.Add ("s", XmlSchema.Namespace); - ns.Add ("http", HttpBinding.Namespace); - ns.Add ("mime", MimeContentBinding.Namespace); - ns.Add ("tm", MimeTextBinding.Namespace); - ns.Add ("s0", TargetNamespace); - - AddExtensionNamespaces (ns, Extensions); - - if (Types != null) AddExtensionNamespaces (ns, Types.Extensions); - - foreach (Service ser in Services) - foreach (Port port in ser.Ports) - AddExtensionNamespaces (ns, port.Extensions); - - foreach (Binding bin in Bindings) - { - AddExtensionNamespaces (ns, bin.Extensions); - foreach (OperationBinding op in bin.Operations) - { - AddExtensionNamespaces (ns, op.Extensions); - if (op.Input != null) AddExtensionNamespaces (ns, op.Input.Extensions); - if (op.Output != null) AddExtensionNamespaces (ns, op.Output.Extensions); - } - } - return ns; - } - - void AddExtensionNamespaces (XmlSerializerNamespaces ns, ServiceDescriptionFormatExtensionCollection extensions) - { - foreach (ServiceDescriptionFormatExtension ext in extensions) - { - ExtensionInfo einf = ExtensionManager.GetFormatExtensionInfo (ext.GetType ()); - foreach (XmlQualifiedName qname in einf.NamespaceDeclarations) - ns.Add (qname.Name, qname.Namespace); - } - } - - internal static void WriteExtensions (XmlWriter writer, object ob) - { - ServiceDescriptionFormatExtensionCollection extensions = ExtensionManager.GetExtensionPoint (ob); - if (extensions != null) - { - foreach (ServiceDescriptionFormatExtension ext in extensions) - WriteExtension (writer, ext); - } - } - - static void WriteExtension (XmlWriter writer, ServiceDescriptionFormatExtension ext) - { - Type type = ext.GetType (); - ExtensionInfo info = ExtensionManager.GetFormatExtensionInfo (type); - -// if (prefix != null && prefix != "") -// Writer.WriteStartElement (prefix, info.ElementName, info.Namespace); -// else -// WriteStartElement (info.ElementName, info.Namespace, false); - - XmlSerializerNamespaces ns = new XmlSerializerNamespaces (); - ns.Add ("",""); - info.Serializer.Serialize (writer, ext, ns); - } - - internal static void ReadExtension (XmlReader reader, object ob) - { - ServiceDescriptionFormatExtensionCollection extensions = ExtensionManager.GetExtensionPoint (ob); - if (extensions != null) - { - ExtensionInfo info = ExtensionManager.GetFormatExtensionInfo (reader.LocalName, reader.NamespaceURI); - if (info != null) - { - object extension = info.Serializer.Deserialize (reader); - extensions.Add ((ServiceDescriptionFormatExtension)extension); - return; - } - } - reader.Skip (); - } - - - #endregion - - internal class ServiceDescriptionSerializer : XmlSerializer - { - protected override void Serialize (object o, XmlSerializationWriter writer) - { - ServiceDescriptionWriterBase xsWriter = writer as ServiceDescriptionWriterBase; - xsWriter.WriteTree ((ServiceDescription)o); - } - - protected override object Deserialize (XmlSerializationReader reader) - { - ServiceDescriptionReaderBase xsReader = reader as ServiceDescriptionReaderBase; - return xsReader.ReadTree (); - } - - protected override XmlSerializationWriter CreateWriter () - { - return new ServiceDescriptionWriterBase (); - } - - protected override XmlSerializationReader CreateReader () - { - return new ServiceDescriptionReaderBase (); - } - } - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionBaseCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionBaseCollection.cs deleted file mode 100644 index ebc2e7b416a..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionBaseCollection.cs +++ /dev/null @@ -1,101 +0,0 @@ -// -// System.Web.Services.Description.ServiceDescriptionBaseCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.Web.Services; - -namespace System.Web.Services.Description { - public abstract class ServiceDescriptionBaseCollection : CollectionBase { - - #region Fields - - Hashtable table = new Hashtable (); - object parent; - - #endregion // Fields - - #region Constructors - - internal ServiceDescriptionBaseCollection (object parent) - { - this.parent = parent; - } - - #endregion // Constructors - - #region Properties - - protected virtual IDictionary Table { - get { return table; } - } - - #endregion // Properties - - #region Methods - - protected virtual string GetKey (object value) - { - return null; - } - - protected override void OnClear () - { - Table.Clear (); - } - - protected override void OnInsertComplete (int index, object value) - { - if (GetKey (value) != null) - Table [GetKey (value)] = value; - SetParent (value, parent); - } - - protected override void OnRemove (int index, object value) - { - if (GetKey (value) != null) - Table.Remove (GetKey (value)); - } - - protected override void OnSet (int index, object oldValue, object newValue) - { - if (GetKey (oldValue) != null) - Table.Remove (GetKey (oldValue)); - if (GetKey (newValue) != null) - Table [GetKey (newValue)] = newValue; - SetParent (newValue, parent); - } - - protected virtual void SetParent (object value, object parent) - { - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionCollection.cs deleted file mode 100644 index bae64506d7d..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionCollection.cs +++ /dev/null @@ -1,168 +0,0 @@ -// -// System.Web.Services.Description.ServiceDescriptionCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Xml; - -namespace System.Web.Services.Description { - public sealed class ServiceDescriptionCollection : ServiceDescriptionBaseCollection { - - ServiceDescriptionImporter importer; - - #region Constructors - - public ServiceDescriptionCollection () - : base (null) - { - } - - #endregion // Constructors - - #region Properties - - public ServiceDescription this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - - return (ServiceDescription) List[index]; - } - set { List [index] = value; } - } - - public ServiceDescription this [string ns] { - get { - return (ServiceDescription) Table[ns]; - } - } - - #endregion // Properties - - #region Methods - - internal void SetImporter (ServiceDescriptionImporter i) - { - importer = i; - } - - public int Add (ServiceDescription serviceDescription) - { - if (importer != null) - importer.OnServiceDescriptionAdded (serviceDescription, null, null); - Insert (Count, serviceDescription); - return (Count - 1); - } - - internal int Add (ServiceDescription serviceDescription, string appSettingUrlKey, string appSettingBaseUrl) - { - if (importer != null) - importer.OnServiceDescriptionAdded (serviceDescription, appSettingUrlKey, appSettingBaseUrl); - Insert (Count, serviceDescription); - return (Count - 1); - } - - public bool Contains (ServiceDescription serviceDescription) - { - return List.Contains (serviceDescription); - } - - public void CopyTo (ServiceDescription[] array, int index) - { - List.CopyTo (array, index); - } - - public Binding GetBinding (XmlQualifiedName name) - { - ServiceDescription desc = (ServiceDescription) Table[name.Namespace]; - if (desc != null) { - foreach (Binding binding in desc.Bindings) - if (binding.Name == name.Name) - return binding; - } - throw new InvalidOperationException ("Binding '" + name + "' not found"); - } - - protected override string GetKey (object value) - { - return ((ServiceDescription) value).TargetNamespace; - } - - public Message GetMessage (XmlQualifiedName name) - { - ServiceDescription desc = (ServiceDescription) Table[name.Namespace]; - if (desc != null) { - foreach (Message message in desc.Messages) - if (message.Name == name.Name) - return message; - } - throw new InvalidOperationException ("Message '" + name + "' not found"); - } - - public PortType GetPortType (XmlQualifiedName name) - { - ServiceDescription desc = (ServiceDescription) Table[name.Namespace]; - if (desc != null) { - foreach (PortType portType in desc.PortTypes) - if (portType.Name == name.Name) - return portType; - } - throw new InvalidOperationException ("Port type '" + name + "' not found"); - } - - public Service GetService (XmlQualifiedName name) - { - ServiceDescription desc = (ServiceDescription) Table[name.Namespace]; - if (desc != null) { - foreach (Service service in desc.Services) - if (service.Name == name.Name) - return service; - } - throw new InvalidOperationException ("Service '" + name + "' not found"); - } - - public int IndexOf (ServiceDescription serviceDescription) - { - return List.IndexOf (serviceDescription); - } - - public void Insert (int index, ServiceDescription serviceDescription) - { - List.Insert (index, serviceDescription); - } - - public void Remove (ServiceDescription serviceDescription) - { - List.Remove (serviceDescription); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionFormatExtension.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionFormatExtension.cs deleted file mode 100644 index 2781b33c055..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionFormatExtension.cs +++ /dev/null @@ -1,89 +0,0 @@ -// -// System.Web.Services.Description.ServiceDescriptionFormatExtension.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Xml.Serialization; - -namespace System.Web.Services.Description { - public abstract class ServiceDescriptionFormatExtension { - - #region Fields - - bool handled; - object parent; - bool required; - - #endregion // Fields - - #region Constructors - - protected ServiceDescriptionFormatExtension () - { - handled = false; - parent = null; - required = false; - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public bool Handled { - get { return handled; } - set { handled = value; } - } - -#if !NET_2_0 - [XmlIgnore] -#endif - public object Parent { - get { return parent; } - } - - [DefaultValue (false)] - [XmlAttribute ("required", Namespace = "http://schemas.xmlsoap.org/wsdl/")] - public bool Required { - get { return required; } - set { required = value; } - } - - #endregion // Properties - - #region Methods - - internal void SetParent (object value) - { - parent = value; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionFormatExtensionCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionFormatExtensionCollection.cs deleted file mode 100644 index 83d762c4f98..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionFormatExtensionCollection.cs +++ /dev/null @@ -1,175 +0,0 @@ -// -// System.Web.Services.Description.ServiceDescriptionFormatExtensionCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.Web.Services; -using System.Xml; - -namespace System.Web.Services.Description { - public sealed class ServiceDescriptionFormatExtensionCollection : ServiceDescriptionBaseCollection { - - #region Constructors - - public ServiceDescriptionFormatExtensionCollection (object parent) - : base (parent) - { - } - - #endregion // Constructors - - #region Properties - - public object this [int index] { - get { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - - return List[index]; - } - set { List[index] = value; } - } - - #endregion // Properties - - #region Methods - - public int Add (object extension) - { - Insert (Count, extension); - return (Count - 1); - } - - public bool Contains (object extension) - { - return List.Contains (extension); - } - - public void CopyTo (object[] array, int index) - { - List.CopyTo (array, index); - } - - public object Find (Type type) - { - foreach (object value in List) - if (type.IsAssignableFrom (value.GetType ())) - return value; - return null; - } - - public XmlElement Find (string name, string ns) - { - XmlElement xmlElement; - foreach (object value in List) - if (value is XmlElement) { - xmlElement = (value as XmlElement); - if (xmlElement.Name == name && xmlElement.NamespaceURI == ns) - return xmlElement; - } - return null; - } - - public object[] FindAll (Type type) - { - ArrayList searchResults = new ArrayList (); - foreach (object value in List) - if (value.GetType () == type) - searchResults.Add (value); - object[] returnValue = new object [searchResults.Count]; - - if (searchResults.Count > 0) - searchResults.CopyTo (returnValue); - - return returnValue; - } - - public XmlElement[] FindAll (string name, string ns) - { - ArrayList searchResults = new ArrayList (); - XmlElement xmlElement; - - foreach (object value in List) - if (value is XmlElement) { - xmlElement = (value as XmlElement); - if (xmlElement.Name == name && xmlElement.NamespaceURI == ns) - searchResults.Add (xmlElement); - } - - XmlElement[] returnValue = new XmlElement [searchResults.Count]; - - if (searchResults.Count > 0) - searchResults.CopyTo (returnValue); - - return returnValue; - } - - public int IndexOf (object extension) - { - return List.IndexOf (extension); - } - - public void Insert (int index, object extension) - { - List.Insert (index, extension); - } - - [MonoTODO] - public bool IsHandled (object item) - { - throw new NotImplementedException (); - } - - [MonoTODO] - public bool IsRequired (object item) - { - throw new NotImplementedException (); - } - - protected override void OnValidate (object value) - { - if (value == null) - throw new ArgumentNullException (); - if (!(value is XmlElement || value is ServiceDescriptionFormatExtension)) - throw new ArgumentException (); - } - - public void Remove (object extension) - { - List.Remove (extension); - } - - protected override void SetParent (object value, object parent) - { - ((ServiceDescriptionFormatExtension) value).SetParent (parent); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImportStyle.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImportStyle.cs deleted file mode 100644 index 71085eadef1..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImportStyle.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// System.Web.Services.Description.ServiceDescriptionImportStyle.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description { - public enum ServiceDescriptionImportStyle { - Client, - Server - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImportWarnings.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImportWarnings.cs deleted file mode 100644 index e37a943143f..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImportWarnings.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// System.Web.Services.Description.ServiceDescriptionImportWarnings.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Description -{ -#if NET_2_0 - [Flags] -#endif - [Serializable] - public enum ServiceDescriptionImportWarnings { - NoCodeGenerated = 0x1, - NoMethodsGenerated = 0x20, - OptionalExtensionsIgnored = 0x2, - RequiredExtensionsIgnored = 0x4, - UnsupportedBindingsIgnored = 0x10, - UnsupportedOperationsIgnored = 0x8, - [Obsolete] OperationConformanceClaimIgnored = 0x100, - SchemaValidation = 0x40, - WsiConformance = 0x80 - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImporter.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImporter.cs deleted file mode 100644 index 6224b198fd9..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionImporter.cs +++ /dev/null @@ -1,291 +0,0 @@ -// -// System.Web.Services.Description.ServiceDescriptionImporter.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.CodeDom; -using System.CodeDom.Compiler; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Web.Services.Description; -using System.Xml.Serialization; -using System.Xml; -using System.Xml.Schema; -using System.Collections; -using System.Collections.Specialized; -using System.Configuration; - -namespace System.Web.Services.Description { - public class ServiceDescriptionImporter { - - #region Fields - - string protocolName; - XmlSchemas schemas; - ServiceDescriptionCollection serviceDescriptions; - ServiceDescriptionImportStyle style; - -#if NET_2_0 - CodeGenerationOptions options; - ICodeGenerator codeGenerator; - ImportContext context; -#endif - - ArrayList importInfo = new ArrayList (); - - - #endregion // Fields - - #region Constructors - - public ServiceDescriptionImporter () - { - protocolName = String.Empty; - schemas = new XmlSchemas (); - serviceDescriptions = new ServiceDescriptionCollection (); - serviceDescriptions.SetImporter (this); - style = ServiceDescriptionImportStyle.Client; - } - - #endregion // Constructors - - #region Properties - - public string ProtocolName { - get { return protocolName; } - set { protocolName = value; } - } - - public XmlSchemas Schemas { - get { return schemas; } - } - - public ServiceDescriptionCollection ServiceDescriptions { - get { return serviceDescriptions; } - } - - public ServiceDescriptionImportStyle Style { - get { return style; } - set { style = value; } - } - -#if NET_2_0 - [System.Runtime.InteropServices.ComVisible(false)] - public CodeGenerationOptions CodeGenerationOptions { - get { return options; } - set { options = value; } - } - - [System.Runtime.InteropServices.ComVisible(false)] - public ICodeGenerator CodeGenerator { - get { return codeGenerator; } - set { codeGenerator = value; } - } - - - internal ImportContext Context { - get { return context; } - set { context = value; } - } -#endif - - #endregion // Properties - - #region Methods - - public void AddServiceDescription (ServiceDescription serviceDescription, string appSettingUrlKey, string appSettingBaseUrl) - { - if (appSettingUrlKey != null && appSettingUrlKey == string.Empty && style == ServiceDescriptionImportStyle.Server) - throw new InvalidOperationException ("Cannot set appSettingUrlKey if Style is Server"); - - serviceDescriptions.Add (serviceDescription, appSettingUrlKey, appSettingBaseUrl); - } - - internal void OnServiceDescriptionAdded (ServiceDescription serviceDescription, string appSettingUrlKey, string appSettingBaseUrl) - { - ImportInfo info = new ImportInfo (serviceDescription, appSettingUrlKey, appSettingBaseUrl); - importInfo.Add (info); - - if (serviceDescription.Types != null) - schemas.Add (serviceDescription.Types.Schemas); - } - - public ServiceDescriptionImportWarnings Import (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit) - { - ProtocolImporter importer = GetImporter (); - - if (!importer.Import (this, codeNamespace, codeCompileUnit, importInfo)) - throw new Exception ("None of the supported bindings was found"); - - return importer.Warnings; - } - - ProtocolImporter GetImporter () - { - ArrayList importers = GetSupportedImporters (); - if (protocolName == null || protocolName == "") protocolName = "Soap"; - foreach (ProtocolImporter importer in importers) { - if (importer.ProtocolName == protocolName) - return importer; - } - - throw new Exception ("Protocol " + protocolName + " not supported"); - } - - ArrayList GetSupportedImporters () - { - ArrayList list = new ArrayList (); - list.Add (new SoapProtocolImporter ()); - list.Add (new HttpGetProtocolImporter ()); - list.Add (new HttpPostProtocolImporter ()); - return list; - } - -#if NET_2_0 - - public static StringCollection GenerateWebReferences ( - WebReferenceCollection webReferences, - CodeGenerationOptions options, - ServiceDescriptionImportStyle style, - ICodeGenerator codeGenerator) - { - CodeCompileUnit codeCompileUnit = new CodeCompileUnit (); - return GenerateWebReferences (webReferences, options, style, codeGenerator, codeCompileUnit, false); - } - - [MonoTODO ("verbose?")] - public static StringCollection GenerateWebReferences ( - WebReferenceCollection webReferences, - CodeGenerationOptions options, - ServiceDescriptionImportStyle style, - ICodeGenerator codeGenerator, - CodeCompileUnit codeCompileUnit, - bool verbose) - { - StringCollection allWarnings = new StringCollection (); - ImportContext context = new ImportContext (new CodeIdentifiers(), true); - - foreach (WebReference reference in webReferences) - { - ServiceDescriptionImporter importer = new ServiceDescriptionImporter (); - importer.CodeGenerator = codeGenerator; - importer.CodeGenerationOptions = options; - importer.Context = context; - importer.Style = style; - importer.ProtocolName = reference.ProtocolName; - - importer.AddReference (reference); - - reference.Warnings = importer.Import (reference.ProxyCode, codeCompileUnit); - reference.SetValidationWarnings (context.Warnings); - foreach (string s in context.Warnings) - allWarnings.Add (s); - - context.Warnings.Clear (); - } - - return allWarnings; - } - - internal void AddReference (WebReference reference) - { - foreach (object doc in reference.Documents.Values) - { - if (doc is ServiceDescription) { - ServiceDescription service = (ServiceDescription) doc; - ImportInfo info = new ImportInfo (service, reference); - importInfo.Add (info); - serviceDescriptions.Add (service); - - if (service.Types != null) - schemas.Add (service.Types.Schemas); - } - else if (doc is XmlSchema) { - schemas.Add ((XmlSchema) doc); - } - } - } - -#endif - -#endregion - } - - internal class ImportInfo - { - string _appSettingUrlKey; - string _appSettingBaseUrl; - ServiceDescription _serviceDescription; - - public WebReference _reference; - - public ImportInfo (ServiceDescription serviceDescription, string appSettingUrlKey, string appSettingBaseUrl) - { - _serviceDescription = serviceDescription; - _appSettingUrlKey = appSettingUrlKey; - _appSettingBaseUrl = appSettingBaseUrl; - } - - public ImportInfo (ServiceDescription serviceDescription, WebReference reference) - { - _reference = reference; - _serviceDescription = serviceDescription; - } - - public WebReference Reference { - get { return _reference; } - } - - public ServiceDescription ServiceDescription { - get { return _serviceDescription; } - } - - public string AppSettingUrlKey { - get { - if (_reference != null) return _reference.AppSettingUrlKey; - else return _appSettingUrlKey; - } - set { - _appSettingUrlKey = value; - } - } - - public string AppSettingBaseUrl { - get { - if (_reference != null) return _reference.AppSettingBaseUrl; - else return _appSettingBaseUrl; - } - set { - _appSettingBaseUrl = value; - } - } - } - -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionReflector.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionReflector.cs deleted file mode 100644 index 14d2a9c6595..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/ServiceDescriptionReflector.cs +++ /dev/null @@ -1,110 +0,0 @@ -// -// System.Web.Services.Description.ServiceDescriptionReflector.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Xml.Serialization; -using System.Xml; -using System.Xml.Schema; -using System.Web.Services.Protocols; -using System.Web.Services.Configuration; - -namespace System.Web.Services.Description { - public class ServiceDescriptionReflector - { - ServiceDescriptionCollection serviceDescriptions; - Types types; - - #region Constructors - - public ServiceDescriptionReflector () - { - types = new Types (); - serviceDescriptions = new ServiceDescriptionCollection (); - } - - #endregion // Constructors - - #region Properties - - public XmlSchemas Schemas { - get { return types.Schemas; } - } - - public ServiceDescriptionCollection ServiceDescriptions { - get { return serviceDescriptions; } - } - - - #endregion // Properties - - #region Methods - - public void Reflect (Type type, string url) - { - XmlSchemaExporter schemaExporter = new XmlSchemaExporter (Schemas); - SoapSchemaExporter soapSchemaExporter = new SoapSchemaExporter (Schemas); - - new SoapProtocolReflector ().Reflect (this, type, url, schemaExporter, soapSchemaExporter); - - if (WSConfig.IsSupported (WSProtocol.HttpGet)) - new HttpGetProtocolReflector ().Reflect (this, type, url, schemaExporter, soapSchemaExporter); - - if (WSConfig.IsSupported (WSProtocol.HttpPost)) - new HttpPostProtocolReflector ().Reflect (this, type, url, schemaExporter, soapSchemaExporter); - - int i=0; - while (i < types.Schemas.Count) { - if (types.Schemas[i].Items.Count == 0) types.Schemas.RemoveAt (i); - else i++; - } - - if (serviceDescriptions.Count == 1) - serviceDescriptions[0].Types = types; - else - { - foreach (ServiceDescription d in serviceDescriptions) - { - d.Types = new Types(); - for (int n=0; n 0 || soapExporter.IncludeMetadata.Count > 0) - { - if (CodeTypeDeclaration.CustomAttributes == null) - CodeTypeDeclaration.CustomAttributes = new CodeAttributeDeclarationCollection (); - CodeTypeDeclaration.CustomAttributes.AddRange (xmlExporter.IncludeMetadata); - CodeTypeDeclaration.CustomAttributes.AddRange (soapExporter.IncludeMetadata); - } - } - - protected override void EndNamespace () - { - } - - protected override bool IsBindingSupported () - { - return Binding.Extensions.Find (typeof(SoapBinding)) != null; - } - - [MonoTODO] - protected override bool IsOperationFlowSupported (OperationFlow flow) - { - throw new NotImplementedException (); - } - - [MonoTODO] - protected virtual bool IsSoapEncodingPresent (string uriList) - { - throw new NotImplementedException (); - } - - protected override CodeMemberMethod GenerateMethod () - { - try - { - SoapOperationBinding soapOper = OperationBinding.Extensions.Find (typeof (SoapOperationBinding)) as SoapOperationBinding; - if (soapOper == null) throw new InvalidOperationException ("Soap operation binding not found"); - - SoapBindingStyle style = soapOper.Style != SoapBindingStyle.Default ? soapOper.Style : soapBinding.Style; - - SoapBodyBinding isbb = null; - XmlMembersMapping inputMembers = null; - - isbb = OperationBinding.Input.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding; - if (isbb == null) throw new InvalidOperationException ("Soap body binding not found"); - - inputMembers = ImportMembersMapping (InputMessage, isbb, style, false); - if (inputMembers == null) throw new InvalidOperationException ("Input message not declared"); - - // If OperationBinding.Output is null, it is an OneWay operation - - SoapBodyBinding osbb = null; - XmlMembersMapping outputMembers = null; - - if (OperationBinding.Output != null) { - osbb = OperationBinding.Output.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding; - if (osbb == null) throw new InvalidOperationException ("Soap body binding not found"); - - outputMembers = ImportMembersMapping (OutputMessage, osbb, style, true); - if (outputMembers == null) throw new InvalidOperationException ("Output message not declared"); - } - - CodeMemberMethod met = GenerateMethod (memberIds, soapOper, isbb, inputMembers, outputMembers); - - if (isbb.Use == SoapBindingUse.Literal) - xmlExporter.ExportMembersMapping (inputMembers); - else - soapExporter.ExportMembersMapping (inputMembers); - - if (osbb != null) { - if (osbb.Use == SoapBindingUse.Literal) - xmlExporter.ExportMembersMapping (outputMembers); - else - soapExporter.ExportMembersMapping (outputMembers); - } - - foreach (SoapExtensionImporter eximporter in extensionImporters) - { - eximporter.ImportContext = this; - eximporter.ImportMethod (met.CustomAttributes); - } - - return met; - } - catch (InvalidOperationException ex) - { - UnsupportedOperationBindingWarning (ex.Message); - return null; - } - } - - XmlMembersMapping ImportMembersMapping (Message msg, SoapBodyBinding sbb, SoapBindingStyle style, bool output) - { - string elemName = Operation.Name; - if (output) elemName += "Response"; - - if (msg.Parts.Count == 1 && msg.Parts[0].Name == "parameters") - { - // Wrapped parameter style - - MessagePart part = msg.Parts[0]; - if (sbb.Use == SoapBindingUse.Encoded) - { - SoapSchemaMember ssm = new SoapSchemaMember (); - ssm.MemberName = part.Name; - ssm.MemberType = part.Type; - return soapImporter.ImportMembersMapping (elemName, part.Type.Namespace, ssm); - } - else - return xmlImporter.ImportMembersMapping (part.Element); - } - else - { - if (sbb.Use == SoapBindingUse.Encoded) - { - SoapSchemaMember[] mems = new SoapSchemaMember [msg.Parts.Count]; - for (int n=0; n 0) - methodParams = new CodeArrayCreateExpression (typeof(object), paramArray); - else - methodParams = new CodeArrayCreateExpression (typeof(object), 0); - - // Assignment of output parameters - - CodeStatementCollection outAssign = new CodeStatementCollection (); - CodeVariableReferenceExpression arrVar = new CodeVariableReferenceExpression (varResults); - for (int n=0; n 0) - { - dec = new CodeVariableDeclarationStatement (typeof(object[]), varResults, inv); - method.Statements.Add (dec); - method.Statements.AddRange (outAssign); - } - else - method.Statements.Add (inv); - - // Begin Invoke Call - - CodeExpression expCallb = new CodeVariableReferenceExpression (varCallback); - CodeExpression expAsyncs = new CodeVariableReferenceExpression (varAsyncState); - inv = new CodeMethodInvokeExpression (ethis, "BeginInvoke", varMsgName, methodParams, expCallb, expAsyncs); - methodBegin.Statements.Add (new CodeMethodReturnStatement (inv)); - - // End Invoke call - - CodeExpression varAsyncr = new CodeVariableReferenceExpression (varAsyncResult); - inv = new CodeMethodInvokeExpression (ethis, "EndInvoke", varAsyncr); - if (outputMembers != null && outputMembers.Count > 0) - { - dec = new CodeVariableDeclarationStatement (typeof(object[]), varResults, inv); - methodEnd.Statements.Add (dec); - methodEnd.Statements.AddRange (outAssign); - } - else - methodEnd.Statements.Add (inv); - } - else { - method.Attributes = MemberAttributes.Public | MemberAttributes.Abstract; - } - - // Attributes - - ImportHeaders (method); - - CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Web.Services.WebMethodAttribute"); - if (messageName != method.Name) att.Arguments.Add (GetArg ("MessageName",messageName)); - AddCustomAttribute (method, att, (Style == ServiceDescriptionImportStyle.Server)); - - if (style == SoapBindingStyle.Rpc) - { - att = new CodeAttributeDeclaration ("System.Web.Services.Protocols.SoapRpcMethodAttribute"); - att.Arguments.Add (GetArg (soapOper.SoapAction)); - if (inputMembers.ElementName != method.Name) att.Arguments.Add (GetArg ("RequestElementName", inputMembers.ElementName)); - if (outputMembers != null && outputMembers.ElementName != (method.Name + "Response")) att.Arguments.Add (GetArg ("ResponseElementName", outputMembers.ElementName)); - att.Arguments.Add (GetArg ("RequestNamespace", inputMembers.Namespace)); - if (outputMembers != null) att.Arguments.Add (GetArg ("ResponseNamespace", outputMembers.Namespace)); - if (outputMembers == null) att.Arguments.Add (GetArg ("OneWay", true)); - } - else - { - if (outputMembers != null && (inputMembers.ElementName == "" && outputMembers.ElementName != "" || - inputMembers.ElementName != "" && outputMembers.ElementName == "")) - throw new InvalidOperationException ("Parameter style is not the same for the input message and output message"); - - att = new CodeAttributeDeclaration ("System.Web.Services.Protocols.SoapDocumentMethodAttribute"); - att.Arguments.Add (GetArg (soapOper.SoapAction)); - if (inputMembers.ElementName != "") { - if (inputMembers.ElementName != method.Name) att.Arguments.Add (GetArg ("RequestElementName", inputMembers.ElementName)); - if (outputMembers != null && outputMembers.ElementName != (method.Name + "Response")) att.Arguments.Add (GetArg ("ResponseElementName", outputMembers.ElementName)); - att.Arguments.Add (GetArg ("RequestNamespace", inputMembers.Namespace)); - if (outputMembers != null) att.Arguments.Add (GetArg ("ResponseNamespace", outputMembers.Namespace)); - att.Arguments.Add (GetEnumArg ("ParameterStyle", "System.Web.Services.Protocols.SoapParameterStyle", "Wrapped")); - } - else - att.Arguments.Add (GetEnumArg ("ParameterStyle", "System.Web.Services.Protocols.SoapParameterStyle", "Bare")); - - if (outputMembers == null) att.Arguments.Add (GetArg ("OneWay", true)); - - att.Arguments.Add (GetEnumArg ("Use", "System.Web.Services.Description.SoapBindingUse", bodyBinding.Use.ToString())); - } - - AddCustomAttribute (method, att, true); - - CodeTypeDeclaration.Members.Add (method); - - if (Style == ServiceDescriptionImportStyle.Client) { - CodeTypeDeclaration.Members.Add (methodBegin); - CodeTypeDeclaration.Members.Add (methodEnd); - } - - return method; - } - - CodeParameterDeclarationExpression GenerateParameter (XmlMemberMapping member, FieldDirection dir) - { - CodeParameterDeclarationExpression par = new CodeParameterDeclarationExpression (member.TypeFullName, member.MemberName); - par.Direction = dir; - return par; - } - - void GenerateMemberAttributes (XmlMembersMapping members, XmlMemberMapping member, SoapBindingUse use, CodeParameterDeclarationExpression param) - { - if (use == SoapBindingUse.Literal) - xmlExporter.AddMappingMetadata (param.CustomAttributes, member, members.Namespace); - else - soapExporter.AddMappingMetadata (param.CustomAttributes, member); - } - - void GenerateReturnAttributes (XmlMembersMapping members, XmlMemberMapping member, SoapBindingUse use, CodeMemberMethod method) - { - if (use == SoapBindingUse.Literal) - xmlExporter.AddMappingMetadata (method.ReturnTypeCustomAttributes, member, members.Namespace, (member.ElementName != method.Name + "Result")); - else - soapExporter.AddMappingMetadata (method.ReturnTypeCustomAttributes, member, (member.ElementName != method.Name + "Result")); - } - - void ImportHeaders (CodeMemberMethod method) - { - foreach (object ob in OperationBinding.Input.Extensions) - { - SoapHeaderBinding hb = ob as SoapHeaderBinding; - if (hb == null) continue; - if (HasHeader (OperationBinding.Output, hb)) - ImportHeader (method, hb, SoapHeaderDirection.In | SoapHeaderDirection.Out); - else - ImportHeader (method, hb, SoapHeaderDirection.In); - } - - if (OperationBinding.Output == null) return; - - foreach (object ob in OperationBinding.Output.Extensions) - { - SoapHeaderBinding hb = ob as SoapHeaderBinding; - if (hb == null) continue; - if (!HasHeader (OperationBinding.Input, hb)) - ImportHeader (method, hb, SoapHeaderDirection.Out); - } - } - - bool HasHeader (MessageBinding msg, SoapHeaderBinding hb) - { - if (msg == null) return false; - - foreach (object ob in msg.Extensions) - { - SoapHeaderBinding mhb = ob as SoapHeaderBinding; - if ((mhb != null) && (mhb.Message == hb.Message) && (mhb.Part == hb.Part)) - return true; - } - return false; - } - - void ImportHeader (CodeMemberMethod method, SoapHeaderBinding hb, SoapHeaderDirection direction) - { - Message msg = ServiceDescriptions.GetMessage (hb.Message); - if (msg == null) throw new InvalidOperationException ("Message " + hb.Message + " not found"); - MessagePart part = msg.Parts [hb.Part]; - if (part == null) throw new InvalidOperationException ("Message part " + hb.Part + " not found in message " + hb.Message); - - XmlTypeMapping map; - if (hb.Use == SoapBindingUse.Literal) - { - map = xmlImporter.ImportDerivedTypeMapping (part.Element, typeof (SoapHeader)); - xmlExporter.ExportTypeMapping (map); - } - else - { - map = soapImporter.ImportDerivedTypeMapping (part.Type, typeof (SoapHeader), true); - soapExporter.ExportTypeMapping (map); - } - - bool required = false; - - string varName = headerVariables [map] as string; - if (varName == null) - { - varName = memberIds.AddUnique(CodeIdentifier.MakeValid (map.TypeName + "Value"),hb); - headerVariables.Add (map, varName); - CodeMemberField codeField = new CodeMemberField (map.TypeFullName, varName); - codeField.Attributes = MemberAttributes.Public; - CodeTypeDeclaration.Members.Add (codeField); - } - - CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Web.Services.Protocols.SoapHeaderAttribute"); - att.Arguments.Add (GetArg (varName)); - att.Arguments.Add (GetArg ("Required", required)); - if (direction != SoapHeaderDirection.In) att.Arguments.Add (GetEnumArg ("Direction", "System.Web.Services.Protocols.SoapHeaderDirection", direction.ToString ())); - AddCustomAttribute (method, att, true); - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Description/SoapProtocolReflector.cs b/mcs/class/System.Web.Services/System.Web.Services.Description/SoapProtocolReflector.cs deleted file mode 100644 index c4d07b77c18..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Description/SoapProtocolReflector.cs +++ /dev/null @@ -1,212 +0,0 @@ -// -// System.Web.Services.Description.SoapProtocolReflector.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Xml.Serialization; -using System.Xml.Schema; -using System.Xml; - -namespace System.Web.Services.Description { - - internal class SoapProtocolReflector : ProtocolReflector - { - #region Fields - - internal const string EncodingNamespace = "http://schemas.xmlsoap.org/soap/encoding/"; - SoapBinding soapBinding; - - #endregion // Fields - - #region Constructors - - public SoapProtocolReflector () - { - } - - #endregion // Constructors - - #region Properties - - public override string ProtocolName { - get { return "Soap"; } - } - - #endregion // Properties - - #region Methods - - protected override void BeginClass () - { - SoapBinding sb = new SoapBinding (); - sb.Transport = SoapBinding.HttpTransport; - sb.Style = ((SoapTypeStubInfo)TypeInfo).SoapBindingStyle; - Binding.Extensions.Add (sb); - - SoapAddressBinding abind = new SoapAddressBinding (); - abind.Location = ServiceUrl; - Port.Extensions.Add (abind); - } - - protected override void EndClass () - { - } - - protected override bool ReflectMethod () - { - SoapOperationBinding sob = new SoapOperationBinding(); - SoapMethodStubInfo method = (SoapMethodStubInfo) MethodStubInfo; - - sob.SoapAction = method.Action; - sob.Style = method.SoapBindingStyle; - OperationBinding.Extensions.Add (sob); - - ImportMessage (method.InputMembersMapping, InputMessage); - ImportMessage (method.OutputMembersMapping, OutputMessage); - - AddOperationMsgBindings (method, OperationBinding.Input); - AddOperationMsgBindings (method, OperationBinding.Output); - - foreach (HeaderInfo hf in method.Headers) - { - if (hf.IsUnknownHeader) continue; - - Message msg = new Message (); - msg.Name = Operation.Name + hf.HeaderType.Name; - MessagePart part = new MessagePart (); - part.Name = hf.HeaderType.Name; - msg.Parts.Add (part); - ServiceDescription.Messages.Add (msg); - - SoapHeaderBinding hb = new SoapHeaderBinding (); - hb.Message = new XmlQualifiedName (msg.Name, ServiceDescription.TargetNamespace); - hb.Part = part.Name; - hb.Use = method.Use; - - if (method.Use == SoapBindingUse.Literal) - { - // MS.NET reflects header classes in a weird way. The root element - // name is the CLR class name unless it is specified in an XmlRootAttribute. - // The usual is to use the xml type name by default, but not in this case. - - XmlRootAttribute root; - XmlAttributes ats = new XmlAttributes (hf.HeaderType); - if (ats.XmlRoot != null) root = ats.XmlRoot; - else root = new XmlRootAttribute (hf.HeaderType.Name); - - if (root.Namespace == null) root.Namespace = TypeInfo.LogicalType.GetWebServiceLiteralNamespace (ServiceDescription.TargetNamespace); - if (root.ElementName == null) root.ElementName = hf.HeaderType.Name; - - XmlTypeMapping mapping = ReflectionImporter.ImportTypeMapping (hf.HeaderType, root); - part.Element = new XmlQualifiedName (mapping.ElementName, mapping.Namespace); - SchemaExporter.ExportTypeMapping (mapping); - } - else - { - XmlTypeMapping mapping = SoapReflectionImporter.ImportTypeMapping (hf.HeaderType, TypeInfo.LogicalType.GetWebServiceEncodedNamespace (ServiceDescription.TargetNamespace)); - part.Type = new XmlQualifiedName (mapping.ElementName, mapping.Namespace); - SoapSchemaExporter.ExportTypeMapping (mapping); - hb.Encoding = EncodingNamespace; - } - - if ((hf.Direction & SoapHeaderDirection.Out) != 0) - OperationBinding.Output.Extensions.Add (hb); - if ((hf.Direction & SoapHeaderDirection.In) != 0) - OperationBinding.Input.Extensions.Add (hb); - } - - return true; - } - - void AddOperationMsgBindings (SoapMethodStubInfo method, MessageBinding msg) - { - SoapBodyBinding sbbo = new SoapBodyBinding(); - msg.Extensions.Add (sbbo); - sbbo.Use = method.Use; - if (method.Use == SoapBindingUse.Encoded) - { - sbbo.Namespace = ServiceDescription.TargetNamespace; - sbbo.Encoding = EncodingNamespace; - } - } - - void ImportMessage (XmlMembersMapping members, Message msg) - { - SoapMethodStubInfo method = (SoapMethodStubInfo) MethodStubInfo; - bool needsEnclosingElement = (method.ParameterStyle == SoapParameterStyle.Wrapped && - method.SoapBindingStyle == SoapBindingStyle.Document); - - if (needsEnclosingElement) - { - MessagePart part = new MessagePart (); - part.Name = "parameters"; - XmlQualifiedName qname = new XmlQualifiedName (members.ElementName, members.Namespace); - if (method.Use == SoapBindingUse.Literal) part.Element = qname; - else part.Type = qname; - msg.Parts.Add (part); - } - else - { - for (int n=0; n - - ServiceDescriptionReaderBase - ServiceDescriptionWriterBase - System.Web.Services.Description - ServiceDescriptionSerializerBase.cs - - - - ServiceDescription.ReadExtension (Reader, $OBJECT); - - - - $OBJECT = System.Xml.Schema.XmlSchema.Read (Reader, null); - - - - - - ServiceDescription.WriteExtensions (Writer, $OBJECT); - - - - $OBJECT.Write (Writer); - - - - diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/ChangeLog b/mcs/class/System.Web.Services/System.Web.Services.Discovery/ChangeLog deleted file mode 100755 index a6078da3288..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/ChangeLog +++ /dev/null @@ -1,162 +0,0 @@ -2004-09-01 Lluis Sanchez Gual - - * DiscoveryClientProtocol.cs: Added support for "file://" urls. - -2004-08-24 Lluis Sanchez Gual - - * ContractReference.cs, DiscoveryClientProtocol.cs: Set the url from which - documents are being read. - -2004-06-13 Gert Driesen - - * SchemaReference.cs: corrected namespace - * SoapBinding.cs: corrected namespace - -2004-06-10 Lluis Sanchez Gual - - * DiscoveryClientProtocol.cs: In DiscoverAny, catch expection of type - DiscoveryException and rethrow the included Exception instead. - * DiscoveryReference.cs: Added BaseUri property, that returns an uri - for the reference, supporting file uris. - * ContractReference.cs: Use the new property BaseUri to build the import - uri. - -2004-06-01 Gert Driesen - - * DiscoveryReference.cs: Added missing XmlIgnore attribute. - -2004-05-24 Lluis Sanchez Gual - - * ContractReference.cs: convert relative import uris to absolute uris. - * DiscoveryClientProtocol.cs: Before resolving a reference, always - set the Url property. - -2004-03-10 Lluis Sanchez Gual - - * ContractReference.cs, DiscoveryDocumentReference.cs: Delegate handling - of errors to the base class. - * ContractSearchPattern.cs, DiscoveryDocumentLinksPattern.cs, - DiscoveryDocumentSearchPattern.cs, XmlSchemaSearchPattern.cs: Implemented. - * DiscoveryClientProtocol.cs: Do not throw exceptions in ResolveAll method, - rather add them to the errors list. - * DiscoveryReference.cs: Generate DiscoveryException where needed, so - DiscoveryClientProtocol can get the url for which an exception was thrown. - * DiscoveryExceptionDictionary.cs: Implemented. - -2004-03-10 Lluis Sanchez Gual - - * DiscoveryClientProtocol.cs: Read additional information (such as soap - bindings) from the discovery documents. - * DiscoveryDocument.cs: Added support for additional discovery information. - * DiscoveryDocumentSerializer.cs: Updated serializer, added support for - soap bindings. - -2004-03-02 Lluis Sanchez Gual - - * DiscoveryClientProtocol.cs: Now it can get alternate urls from HTML pages - that include a link tag. Added support for loading files from a the - file system. - -2004-01-24 Lluis Sanchez Gual - - * ContractReference.cs, DiscoveryClientProtocol.cs, - DiscoveryDocumentReference.cs: When resolving a wsdl document, recursively - resolve the documents it imports. - -2003-12-19 Lluis Sanchez Gual - - * DiscoveryDocument.cs: Set namespace for ContractReference references. - Write() methods: Added namespace declaration in serializer. - * DiscoveryDocumentSerializer.cs: Fixed namespace for ContractReference. - * DiscoveryRequestHandler.cs: Implemented. - * DynamicDiscoveryDocument.cs: Implemented. - * ExcludePathInfo.cs, SoapBinding.cs: Removed some TODOs - -2003-12-12 Lluis Sanchez Gual - - * DiscoveryReference.cs: In FilenameFromUrl(), improved name generation - for some common cases. - -2003-11-11 Lluis Sanchez Gual - - * DiscoveryDocumentSerializer.cs: The class must be internal. - -2003-10-21 Lluis Sanchez Gual - - * DiscoveryClientProtocol.cs: Fixed little bug in DiscoverAny. - -2003-10-13 Lluis Sanchez Gual - - * ContractReference.cs, DiscoveryDocumentReference.cs, SchemaReference.cs: - Little fixes. - * DiscoveryClientProtocol.cs: WriteAll(): Write files to the provided - directory. - * DiscoveryReference.cs: Improved method FilenameFromUrl(). - -2003-10-10 Lluis Sanchez Gual - - * ContractReference.cs, DiscoveryClientProtocol.cs, - DiscoveryClientResult.cs, DiscoveryDocument.cs, - DiscoveryDocumentReference.cs, DiscoveryExceptionDictionary.cs, - DiscoveryReference.cs, SchemaReference.cs: Implemented initial support - for discovery documents (.disco). - -2002-08-19 Tim Coleman - * DiscoveryClientProtocol.cs: - Added ResolveAll () stub. - * DiscoveryDocument.cs: - Added XmlRoot attribute to class. - * DiscoveryClientDocumentCollection.cs: - * DiscoveryClientReferenceCollection.cs: - * DiscoveryClientResultCollection.cs: - * DiscoveryReferenceCollection.cs: - Implementation of these classes. - -2002-08-04 Dave Bettin - * ContractSearchPattern.cs - * DiscoveryClientDocumentCollection.cs - * DiscoveryClientProtocol.cs - * DiscoveryClientResult.cs - * DiscoveryDocument.cs - * DiscoveryDocumentLinksPattern.cs - * DiscoveryDocumentReference.cs - * DiscoveryDocumentSearchPattern.cs - * DiscoveryReference.cs - * DiscoveryRequestHandler.cs - * DiscoverySearchPattern.cs - * DynamicDiscoveryDocument.cs - * SchemaReference.cs - * SoapBinding.cs - * XmlSchemaSearchPattern.cs - [ Added attributes and some basic implementation] - -2002-08-03 Tim Coleman - * DiscoveryDocument.cs: - Added XmlIgnore attribute to References property - * DiscoveryDocumentReference.cs: - Implemented Ref/Url properties and added XmlIgnore - attributes. - -2002-07-28 Dave Bettin - * ContractReference.cs - * ContractSearchPattern.cs - * DiscoveryClientDocumentCollection.cs - * DiscoveryClientProtocol.cs - * DiscoveryClientReferenceCollection.cs - * DiscoveryClientResultCollection.cs - * DiscoveryClientResult.cs - * DiscoveryDocument.cs - * DiscoveryDocumentLinksPattern.cs - * DiscoveryDocumentReference.cs - * DiscoveryDocumentSearchPattern.cs - * DiscoveryExceptionDictionary.cs - * DiscoveryReferenceCollection.cs - * DiscoveryReference.cs - * DiscoveryRequestHandler.cs - * DiscoverySearchPattern.cs - * DynamicDiscoveryDocument.cs - * ExcludePathInfo.cs - * SchemaReference.cs - * SoapBinding.cs - * XmlSchemaSearchPattern.cs - [ Added stubs] diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/ContractReference.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/ContractReference.cs deleted file mode 100755 index 75fb86b5685..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/ContractReference.cs +++ /dev/null @@ -1,191 +0,0 @@ -// -// System.Web.Services.Discovery.ContractReference.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Web.Services.Description; -using System.Xml.Serialization; -using System.Xml; -using System.Xml.Schema; - -namespace System.Web.Services.Discovery { - - [XmlRootAttribute("contractRef", Namespace="http://schemas.xmlsoap.org/disco/scl/", IsNullable=true)] - public class ContractReference : DiscoveryReference { - - #region Fields - - public const string Namespace = "http://schemas.xmlsoap.org/disco/scl/"; - - private ServiceDescription contract; - private string defaultFilename; - private string docRef; - private string href; - - #endregion // Fields - - #region Constructors - - public ContractReference () - { - } - - public ContractReference (string href) : this() - { - this.href = href; - } - - public ContractReference (string href, string docRef) - { - this.href = href; - this.docRef = docRef; - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public ServiceDescription Contract { - get { - if (ClientProtocol == null) - throw new InvalidOperationException ("The ClientProtocol property is a null reference"); - - ServiceDescription desc = ClientProtocol.Documents [Url] as ServiceDescription; - if (desc == null) - throw new Exception ("The Documents property of ClientProtocol does not contain a WSDL document with the url " + Url); - - return desc; - } - } - - [XmlIgnore] - public override string DefaultFilename { - get { return FilenameFromUrl (Url) + ".wsdl"; } - } - - [XmlAttribute("docRef")] - public string DocRef { - get { return docRef; } - set { docRef = value; } - } - - [XmlAttribute("ref")] - public string Ref { - get { return href; } - set { href = value; } - } - - [XmlIgnore] - public override string Url { - get { return href;} - set { href = value; } - } - - #endregion // Properties - - #region Methods - - public override object ReadDocument (Stream stream) - { - return ServiceDescription.Read (stream); - } - - protected internal override void Resolve (string contentType, Stream stream) - { - ServiceDescription wsdl = ServiceDescription.Read (stream); - - if (!ClientProtocol.References.Contains (Url)) - ClientProtocol.References.Add (this); - - ClientProtocol.Documents.Add (Url, wsdl); - ResolveInternal (ClientProtocol, wsdl); - } - - internal void ResolveInternal (DiscoveryClientProtocol prot, ServiceDescription wsdl) - { - if (wsdl.Imports == null) return; - - foreach (Import import in wsdl.Imports) - { - // Make relative uris to absoulte - - Uri uri = new Uri (BaseUri, import.Location); - string url = uri.ToString (); - - if (prot.Documents.Contains (url)) // Already resolved - continue; - - try - { - string contentType = null; - Stream stream = prot.Download (ref url, ref contentType); - XmlTextReader reader = new XmlTextReader (url, stream); - reader.MoveToContent (); - - DiscoveryReference refe; - if (ServiceDescription.CanRead (reader)) - { - ServiceDescription refWsdl = ServiceDescription.Read (reader); - refe = new ContractReference (); - refe.ClientProtocol = prot; - refe.Url = url; - ((ContractReference)refe).ResolveInternal (prot, refWsdl); - prot.Documents.Add (url, refWsdl); - } - else - { - XmlSchema schema = XmlSchema.Read (reader, null); - refe = new SchemaReference (); - refe.ClientProtocol = prot; - refe.Url = url; - prot.Documents.Add (url, schema); - } - - if (!prot.References.Contains (url)) - prot.References.Add (refe); - - reader.Close (); - } - catch (Exception ex) - { - ReportError (url, ex); - } - } - } - - public override void WriteDocument (object document, Stream stream) - { - ((ServiceDescription)document).Write (stream); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/ContractSearchPattern.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/ContractSearchPattern.cs deleted file mode 100755 index d5dd6d100be..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/ContractSearchPattern.cs +++ /dev/null @@ -1,70 +0,0 @@ -// -// System.Web.Services.Protocols.ContractSearchPattern.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Discovery { - public sealed class ContractSearchPattern : DiscoverySearchPattern { - - #region Fields - - private string pattern = "*.asmx"; - - #endregion // Fields - - #region Constructors - - public ContractSearchPattern () - { - } - - #endregion // Constructors - - #region Properties - - public override string Pattern { - get { return pattern; } - } - - #endregion // Properties - - #region Methods - - public override DiscoveryReference GetDiscoveryReference (string filename) - { - ContractReference refe = new ContractReference (); - refe.Url = filename; - refe.Ref = filename; - refe.DocRef = filename; - return refe; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientDocumentCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientDocumentCollection.cs deleted file mode 100755 index 21e25bdab03..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientDocumentCollection.cs +++ /dev/null @@ -1,87 +0,0 @@ -// -// System.Web.Services.Discovery.DiscoveryClientDocumentCollection.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Dave Bettin, 2002 -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; - -namespace System.Web.Services.Discovery { - public sealed class DiscoveryClientDocumentCollection : DictionaryBase { - - #region Constructors - - public DiscoveryClientDocumentCollection () - : base () - { - } - - #endregion // Constructors - - #region Properties - - public object this [string url] { - get { return InnerHashtable [url]; } - set { - if (url == null) - throw new ArgumentNullException (); - InnerHashtable [url] = value; - } - } - - public ICollection Keys { - get { return InnerHashtable.Keys; } - } - - public ICollection Values { - get { return InnerHashtable.Values; } - } - - #endregion // Properties - - #region Methods - - public void Add (string url, object value) - { - InnerHashtable [url] = value; - } - - public bool Contains (string url) - { - return InnerHashtable.Contains (url); - } - - public void Remove (string url) - { - InnerHashtable.Remove (url); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientProtocol.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientProtocol.cs deleted file mode 100755 index c24e50b0b68..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientProtocol.cs +++ /dev/null @@ -1,367 +0,0 @@ -// -// System.Web.Services.Protocols.DiscoveryClientProtocol.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.IO; -using System.Web.Services.Protocols; -using System.Web.Services.Description; -using System.Xml; -using System.Xml.Schema; -using System.Xml.Serialization; -using System.Net; -using System.Text.RegularExpressions; - -namespace System.Web.Services.Discovery { - public class DiscoveryClientProtocol : HttpWebClientProtocol { - - #region Fields - - private IList additionalInformation = new ArrayList (); - private DiscoveryClientDocumentCollection documents = new DiscoveryClientDocumentCollection(); - private DiscoveryExceptionDictionary errors = new DiscoveryExceptionDictionary(); - private DiscoveryClientReferenceCollection references = new DiscoveryClientReferenceCollection(); - - #endregion // Fields - - #region Constructors - - public DiscoveryClientProtocol () - { - } - - #endregion // Constructors - - #region Properties - - public IList AdditionalInformation { - get { return additionalInformation; } - } - - public DiscoveryClientDocumentCollection Documents { - get { return documents; } - } - - public DiscoveryExceptionDictionary Errors { - get { return errors; } - } - - public DiscoveryClientReferenceCollection References { - get { return references; } - } - - #endregion // Properties - - #region Methods - - public DiscoveryDocument Discover (string url) - { - Stream stream = Download (ref url); - XmlTextReader reader = new XmlTextReader (url, stream); - if (!DiscoveryDocument.CanRead (reader)) - throw new InvalidOperationException ("The url '" + url + "' does not point to a valid discovery document"); - - DiscoveryDocument doc = DiscoveryDocument.Read (reader); - reader.Close (); - documents.Add (url, doc); - AddDiscoReferences (doc); - return doc; - } - - public DiscoveryDocument DiscoverAny (string url) - { - try - { - string contentType = null; - Stream stream = Download (ref url, ref contentType); - - if (contentType.IndexOf ("text/html") != -1) - { - // Look for an alternate url - - StreamReader sr = new StreamReader (stream); - string str = sr.ReadToEnd (); - - string rex = "link\\s*rel\\s*=\\s*[\"']?alternate[\"']?\\s*"; - rex += "type\\s*=\\s*[\"']?text/xml[\"']?\\s*href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|'(?<1>[^']*)'|(?<1>\\S+))"; - Regex rob = new Regex (rex, RegexOptions.IgnoreCase); - Match m = rob.Match (str); - if (!m.Success) - throw new InvalidOperationException ("The HTML document does not contain Web service discovery information"); - - if (url.StartsWith ("/")) - { - Uri uri = new Uri (url); - url = uri.GetLeftPart (UriPartial.Authority) + m.Groups[1]; - } - else - { - int i = url.LastIndexOf ('/'); - if (i == -1) - throw new InvalidOperationException ("The HTML document does not contain Web service discovery information"); - url = url.Substring (0,i+1) + m.Groups[1]; - } - stream = Download (ref url); - } - - XmlTextReader reader = new XmlTextReader (url, stream); - reader.MoveToContent (); - DiscoveryDocument doc; - DiscoveryReference refe = null; - - if (DiscoveryDocument.CanRead (reader)) - { - doc = DiscoveryDocument.Read (reader); - documents.Add (url, doc); - refe = new DiscoveryDocumentReference (); - AddDiscoReferences (doc); - } - else if (ServiceDescription.CanRead (reader)) - { - ServiceDescription wsdl = ServiceDescription.Read (reader); - documents.Add (url, wsdl); - doc = new DiscoveryDocument (); - refe = new ContractReference (); - doc.References.Add (refe); - refe.Url = url; - ((ContractReference)refe).ResolveInternal (this, wsdl); - } - else - { - XmlSchema schema = XmlSchema.Read (reader, null); - documents.Add (url, schema); - doc = new DiscoveryDocument (); - refe = new SchemaReference (); - doc.References.Add (refe); - } - - refe.ClientProtocol = this; - refe.Url = url; - references.Add (url, refe); - - reader.Close (); - return doc; - } - catch (DiscoveryException ex) { - throw ex.Exception; - } - } - - void AddDiscoReferences (DiscoveryDocument doc) - { - foreach (DiscoveryReference re in doc.References) - { - re.ClientProtocol = this; - references.Add (re.Url, re); - } - - if (doc.AdditionalInfo != null) { - foreach (object info in doc.AdditionalInfo) - additionalInformation.Add (info); - } - } - - public Stream Download (ref string url) - { - string contentType = null; - return Download (ref url, ref contentType); - } - - public Stream Download (ref string url, ref string contentType) - { - if (url.StartsWith ("http://") || url.StartsWith ("https://")) - { - WebRequest request = GetWebRequest (new Uri(url)); - WebResponse resp = request.GetResponse (); - contentType = resp.ContentType; - return resp.GetResponseStream (); - } - else if (url.StartsWith ("file://")) - { - WebRequest request = WebRequest.Create (new Uri (url)); - WebResponse resp = request.GetResponse (); - contentType = resp.ContentType; - return resp.GetResponseStream (); - } - else - { - string ext = Path.GetExtension (url).ToLower(); - if (ext == ".wsdl" || ext == ".xsd") - { - contentType = "text/xml"; - return new FileStream (url, FileMode.Open, FileAccess.Read); - } - else - throw new InvalidOperationException ("Unrecognized file type '" + url + "'. Extension must be one of .wsdl or .xsd"); - } - } - - public DiscoveryClientResultCollection ReadAll (string topLevelFilename) - { - StreamReader sr = new StreamReader (topLevelFilename); - XmlSerializer ser = new XmlSerializer (typeof (DiscoveryClientResultsFile)); - DiscoveryClientResultsFile resfile = (DiscoveryClientResultsFile) ser.Deserialize (sr); - sr.Close (); - - foreach (DiscoveryClientResult dcr in resfile.Results) - { - Type type = Type.GetType (dcr.ReferenceTypeName); - DiscoveryReference dr = (DiscoveryReference) Activator.CreateInstance (type); - dr.Url = dcr.Url; - FileStream fs = new FileStream (dcr.Filename, FileMode.Open, FileAccess.Read); - Documents.Add (dr.Url, dr.ReadDocument (fs)); - fs.Close (); - References.Add (dr.Url, dr); - } - return resfile.Results; - } - - public void ResolveAll () - { - ArrayList list = new ArrayList (References.Values); - foreach (DiscoveryReference re in list) - { - try - { - if (re is DiscoveryDocumentReference) - ((DiscoveryDocumentReference)re).ResolveAll (); - else - re.Resolve (); - } - catch (DiscoveryException ex) - { - Errors [ex.Url] = ex.Exception; - } - catch (Exception ex) - { - Errors [re.Url] = ex; - } - } - } - - public void ResolveOneLevel () - { - ArrayList list = new ArrayList (References.Values); - foreach (DiscoveryReference re in list) - re.Resolve (); - } - - public DiscoveryClientResultCollection WriteAll (string directory, string topLevelFilename) - { - DiscoveryClientResultsFile resfile = new DiscoveryClientResultsFile(); - - foreach (DiscoveryReference re in References.Values) - { - object doc = Documents [re.Url]; - if (doc == null) continue; - - string fileName = FindValidName (resfile, re.DefaultFilename); - resfile.Results.Add (new DiscoveryClientResult (re.GetType(), re.Url, fileName)); - - string filepath = Path.Combine (directory, fileName); - FileStream fs = new FileStream (filepath, FileMode.Create, FileAccess.Write); - re.WriteDocument (doc, fs); - fs.Close (); - } - - StreamWriter sw = new StreamWriter (Path.Combine (directory, topLevelFilename)); - XmlSerializer ser = new XmlSerializer (typeof (DiscoveryClientResultsFile)); - ser.Serialize (sw, resfile); - sw.Close (); - return resfile.Results; - } - - string FindValidName (DiscoveryClientResultsFile resfile, string baseName) - { - string name = baseName; - int id = 0; - bool found; - do - { - found = false; - foreach (DiscoveryClientResult res in resfile.Results) - { - if (name == res.Filename) { - found = true; break; - } - } - if (found) - name = Path.GetFileNameWithoutExtension (baseName) + (++id) + Path.GetExtension (baseName); - } - while (found); - - return name; - } - - #endregion // Methods - - #region Classes - - public sealed class DiscoveryClientResultsFile { - - #region Fields - - private DiscoveryClientResultCollection results; - - #endregion // Fields - - #region Contructors - - public DiscoveryClientResultsFile () - { - results = new DiscoveryClientResultCollection (); - } - - #endregion // Constructors - - #region Properties - - public DiscoveryClientResultCollection Results { - get { return results; } - } - - #endregion // Properties - } - - #endregion // Classes - } - - internal class DiscoveryException : Exception - { - public string Url; - public Exception Exception; - - public DiscoveryException (string url, Exception origin) - { - Url = url; - Exception = origin; - } - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientReferenceCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientReferenceCollection.cs deleted file mode 100755 index 130ce28e28c..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientReferenceCollection.cs +++ /dev/null @@ -1,88 +0,0 @@ -// -// System.Web.Services.Protocols.DiscoveryClientReferenceCollection.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Dave Bettin, 2002 -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; - -namespace System.Web.Services.Discovery { - public sealed class DiscoveryClientReferenceCollection : DictionaryBase { - - #region Constructors - - public DiscoveryClientReferenceCollection () - : base () - { - } - - #endregion // Constructors - - #region Properties - - public DiscoveryReference this [string url] { - get { return (DiscoveryReference) InnerHashtable [url]; } - set { InnerHashtable [url] = value; } - } - - public ICollection Keys { - get { return InnerHashtable.Keys; } - } - - public ICollection Values { - get { return InnerHashtable.Values; } - } - - #endregion // Properties - - #region Methods - - public void Add (DiscoveryReference value) - { - Add (value.Url, value); - } - - public void Add (string url, DiscoveryReference value) - { - InnerHashtable [url] = value; - } - - public bool Contains (string url) - { - return InnerHashtable.Contains (url); - } - - public void Remove (string url) - { - InnerHashtable.Remove (url); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientResult.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientResult.cs deleted file mode 100755 index 930b0845758..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientResult.cs +++ /dev/null @@ -1,83 +0,0 @@ -// -// System.Web.Services.Disocvery.DiscoveryClientResult.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System.Xml.Serialization; - -namespace System.Web.Services.Discovery { - public sealed class DiscoveryClientResult { - - #region Fields - - private string filename; - private string referenceTypeName; - private string url; - - #endregion // Fields - - #region Constructors - - public DiscoveryClientResult () - { - } - - public DiscoveryClientResult (Type referenceType, string url, string filename) : this() - { - this.filename = filename; - this.url = url; - this.referenceTypeName = referenceType.FullName; - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute("filename")] - public string Filename { - get { return filename; } - set { filename = value; } - } - - [XmlAttribute("referenceType")] - public string ReferenceTypeName { - get { return referenceTypeName; } - set { referenceTypeName = value; } - } - - [XmlAttribute("url")] - public string Url { - get { return url; } - set { url = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientResultCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientResultCollection.cs deleted file mode 100755 index d48f6368047..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryClientResultCollection.cs +++ /dev/null @@ -1,83 +0,0 @@ -// -// System.Web.Services.Protocols.DiscoveryClientResultCollection.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Dave Bettin, 2002 -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; - -namespace System.Web.Services.Discovery { - public sealed class DiscoveryClientResultCollection : CollectionBase { - - #region Constructors - - public DiscoveryClientResultCollection () - : base () - { - } - - #endregion // Constructors - - #region Properties - - public DiscoveryClientResult this [int i] { - get { - if (i < 0 || i >= Count) - throw new ArgumentOutOfRangeException (); - return (DiscoveryClientResult) InnerList [i]; - } - set { - if (i < 0 || i >= Count) - throw new ArgumentOutOfRangeException (); - InnerList [i] = value; - } - } - - #endregion // Properties - - #region Methods - - public int Add (DiscoveryClientResult value) - { - return InnerList.Add (value); - } - - public bool Contains (DiscoveryClientResult value) - { - return InnerList.Contains (value); - } - - public void Remove (DiscoveryClientResult value) - { - InnerList.Remove (value); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocument.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocument.cs deleted file mode 100755 index 6e54d1eb6fd..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocument.cs +++ /dev/null @@ -1,157 +0,0 @@ -// -// System.Web.Services.Protocols.DiscoveryDocument.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.IO; -using System.Xml; -using System.Xml.Serialization; - -namespace System.Web.Services.Discovery { - [XmlRoot ("discovery", Namespace = "http://schemas.xmlsoap.org/disco/")] - public sealed class DiscoveryDocument { - - #region Fields - - public const string Namespace = "http://schemas.xmlsoap.org/disco/"; - - [XmlElement(typeof(ContractReference), Namespace="http://schemas.xmlsoap.org/disco/scl/")] - [XmlElement(typeof(DiscoveryDocumentReference))] - [XmlElement(typeof(SchemaReference))] - internal ArrayList references = new ArrayList(); - - [XmlElement(typeof(SoapBinding), ElementName="soap", Namespace="http://schemas/xmlsoap.org/disco/schema/soap/")] - internal ArrayList additionalInfo = new ArrayList(); - - #endregion // Fields - - #region Constructors - - public DiscoveryDocument () - { - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public IList References { - get { return references; } - } - - [XmlIgnore] - internal IList AdditionalInfo { - get { return additionalInfo; } - } - - #endregion // Properties - - #region Methods - - public static bool CanRead (XmlReader xmlReader) - { - xmlReader.MoveToContent (); - return xmlReader.NodeType == XmlNodeType.Element && - xmlReader.LocalName == "discovery" && - xmlReader.NamespaceURI == Namespace; - } - - public static DiscoveryDocument Read (Stream stream) - { - return Read (new XmlTextReader (stream)); - } - - public static DiscoveryDocument Read (TextReader textReader) - { - return Read (new XmlTextReader (textReader)); - } - - public static DiscoveryDocument Read (XmlReader xmlReader) - { - DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer(); - return (DiscoveryDocument) ser.Deserialize (xmlReader); - } - - public void Write (Stream stream) - { - DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer(); - ser.Serialize (stream, this, GetNamespaceList()); - } - - public void Write (TextWriter textWriter) - { - DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer(); - ser.Serialize (textWriter, this, GetNamespaceList()); - } - - public void Write (XmlWriter xmlWriter) - { - DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer(); - ser.Serialize (xmlWriter, this, GetNamespaceList()); - } - - XmlSerializerNamespaces GetNamespaceList () - { - XmlSerializerNamespaces ns = new XmlSerializerNamespaces (); - ns.Add ("scl", ContractReference.Namespace); - return ns; - } - - #endregion // Methods - } - - internal class DiscoveryDocumentSerializer : XmlSerializer - { - protected override void Serialize (object o, XmlSerializationWriter writer) - { - DiscoveryDocumentWriter xsWriter = writer as DiscoveryDocumentWriter; - xsWriter.WriteRoot_DiscoveryDocument (o); - } - - protected override object Deserialize (XmlSerializationReader reader) - { - DiscoveryDocumentReader xsReader = reader as DiscoveryDocumentReader; - return xsReader.ReadRoot_DiscoveryDocument (); - } - - protected override XmlSerializationWriter CreateWriter () - { - return new DiscoveryDocumentWriter (); - } - - protected override XmlSerializationReader CreateReader () - { - return new DiscoveryDocumentReader (); - } - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentLinksPattern.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentLinksPattern.cs deleted file mode 100755 index 59208e1e31e..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentLinksPattern.cs +++ /dev/null @@ -1,69 +0,0 @@ -// -// System.Web.Services.Protocols.DiscoveryDocumentLinksPattern.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Discovery { - public class DiscoveryDocumentLinksPattern : DiscoverySearchPattern { - - #region Fields - - private string pattern = "*.disco"; - - #endregion // Fields - - #region Constructors - - public DiscoveryDocumentLinksPattern () - { - } - - #endregion // Constructors - - #region Properties - - public override string Pattern { - get { return pattern; } - } - - #endregion // Properties - - #region Methods - - public override DiscoveryReference GetDiscoveryReference (string filename) - { - DiscoveryDocumentReference refe = new DiscoveryDocumentReference (); - refe.Url = filename; - refe.Ref = filename; - return refe; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentReference.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentReference.cs deleted file mode 100755 index 599e7d4eaef..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentReference.cs +++ /dev/null @@ -1,151 +0,0 @@ -// -// System.Web.Services.Discovery.DiscoveryDocumentReference.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Web.Services.Description; -using System.Xml.Serialization; - -namespace System.Web.Services.Discovery { - - [XmlRootAttribute("discoveryRef", Namespace="http://schemas.xmlsoap.org/disco/", IsNullable=true)] - public sealed class DiscoveryDocumentReference : DiscoveryReference { - - #region Fields - - private DiscoveryDocument document; - private string defaultFilename; - private string href; - - #endregion // Fields - - #region Constructors - - public DiscoveryDocumentReference () - { - href = String.Empty; - } - - public DiscoveryDocumentReference (string href) - { - this.href = href; - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public DiscoveryDocument Document { - get { - if (ClientProtocol == null) - throw new InvalidOperationException ("The ClientProtocol property is a null reference"); - - DiscoveryDocument doc = ClientProtocol.Documents [Url] as DiscoveryDocument; - if (doc == null) - throw new Exception ("The Documents property of ClientProtocol does not contain a discovery document with the url " + Url); - - return doc; - } - } - - [XmlIgnore] - public override string DefaultFilename { - get { return FilenameFromUrl (Url) + ".disco"; } - } - - [XmlAttribute("ref")] - public string Ref { - get { return href; } - set { href = value; } - } - - [XmlIgnore] - public override string Url { - get { return href; } - set { href = value; } - } - - #endregion // Properties - - #region Methods - - public override object ReadDocument (Stream stream) - { - return DiscoveryDocument.Read (stream); - } - - protected internal override void Resolve (string contentType, Stream stream) - { - DiscoveryDocument doc = DiscoveryDocument.Read (stream); - ClientProtocol.Documents.Add (Url, doc); - if (!ClientProtocol.References.Contains (Url)) - ClientProtocol.References.Add (this); - - foreach (DiscoveryReference re in doc.References) - { - re.ClientProtocol = ClientProtocol; - ClientProtocol.References.Add (re.Url, re); - } - } - - public void ResolveAll () - { - if (ClientProtocol.Documents.Contains (Url)) // Already resolved - return; - - Resolve (); - DiscoveryDocument doc = document; - foreach (DiscoveryReference re in doc.References) - { - try - { - if (re is DiscoveryDocumentReference) - ((DiscoveryDocumentReference)re).ResolveAll (); - else - re.Resolve (); - } - catch (Exception ex) - { - ReportError (re.Url, ex); - } - } - } - - public override void WriteDocument (object document, Stream stream) - { - ((DiscoveryDocument)document).Write (stream); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentSearchPattern.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentSearchPattern.cs deleted file mode 100755 index 697682d8b31..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentSearchPattern.cs +++ /dev/null @@ -1,69 +0,0 @@ -// -// System.Web.Services.Discovery.DiscoveryDocumentSearchPattern.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Discovery { - public sealed class DiscoveryDocumentSearchPattern : DiscoverySearchPattern { - - #region Fields - - private string pattern = "*.vsdisco"; - - #endregion // Fields - - #region Constructors - - public DiscoveryDocumentSearchPattern () - { - } - - #endregion // Constructors - - #region Properties - - public override string Pattern { - get { return pattern; } - } - - #endregion // Properties - - #region Methods - - public override DiscoveryReference GetDiscoveryReference (string filename) - { - DiscoveryDocumentReference refe = new DiscoveryDocumentReference (); - refe.Url = filename; - refe.Ref = filename; - return refe; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentSerializer.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentSerializer.cs deleted file mode 100644 index e2cfc3f9cb8..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryDocumentSerializer.cs +++ /dev/null @@ -1,527 +0,0 @@ -// -// System.Web.Services.Protocols.DiscoveryDocumentSerializer.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Ximian,Inc., 2003 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Xml; -using System.Xml.Schema; -using System.Xml.Serialization; -using System.Text; -using System.Collections; -using System.Globalization; - -namespace System.Web.Services.Discovery -{ - internal class DiscoveryDocumentReader : XmlSerializationReader - { - public object ReadRoot_DiscoveryDocument () - { - Reader.MoveToContent(); - if (Reader.LocalName != "discovery" || Reader.NamespaceURI != "http://schemas.xmlsoap.org/disco/") - throw CreateUnknownNodeException(); - return ReadObject_DiscoveryDocument (true, true); - } - - public System.Web.Services.Discovery.DiscoveryDocument ReadObject_DiscoveryDocument (bool isNullable, bool checkType) - { - System.Web.Services.Discovery.DiscoveryDocument ob = null; - if (isNullable && ReadNull()) return null; - - if (checkType) - { - System.Xml.XmlQualifiedName t = GetXsiType(); - if (t != null) - { - if (t.Name != "DiscoveryDocument" || t.Namespace != "http://schemas.xmlsoap.org/disco/") - throw CreateUnknownTypeException(t); - } - } - - ob = new System.Web.Services.Discovery.DiscoveryDocument (); - - Reader.MoveToElement(); - - while (Reader.MoveToNextAttribute()) - { - if (IsXmlnsAttribute (Reader.Name)) { - } - else { - UnknownNode (ob); - } - } - - Reader.MoveToElement(); - if (Reader.IsEmptyElement) { - Reader.Skip (); - return ob; - } - - Reader.ReadStartElement(); - Reader.MoveToContent(); - - bool b0=false, b1=false; - - System.Collections.ArrayList o3 = null; - System.Collections.ArrayList o5 = null; - int n2=0, n4=0; - - while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) - { - if (Reader.NodeType == System.Xml.XmlNodeType.Element) - { - if (Reader.LocalName == "discoveryRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/" && !b0) { - if (o3 == null) - o3 = new System.Collections.ArrayList(); - o3.Add (ReadObject_DiscoveryDocumentReference (false, true)); - n2++; - } - else if (Reader.LocalName == "soap" && Reader.NamespaceURI == "http://schemas/xmlsoap.org/disco/schema/soap/" && !b1) { - if (o5 == null) - o5 = new System.Collections.ArrayList(); - o5.Add (ReadObject_SoapBinding (false, true)); - n4++; - } - else if (Reader.LocalName == "contractRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/scl/" && !b0) { - if (o3 == null) - o3 = new System.Collections.ArrayList(); - o3.Add (ReadObject_ContractReference (false, true)); - n2++; - } - else if (Reader.LocalName == "schemaRef" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/disco/" && !b0) { - if (o3 == null) - o3 = new System.Collections.ArrayList(); - o3.Add (ReadObject_SchemaReference (false, true)); - n2++; - } - else { - UnknownNode (ob); - } - } - else - UnknownNode(ob); - - Reader.MoveToContent(); - } - - ob.@references = o3; - ob.@additionalInfo = o5; - - ReadEndElement(); - - return ob; - } - - public System.Web.Services.Discovery.DiscoveryDocumentReference ReadObject_DiscoveryDocumentReference (bool isNullable, bool checkType) - { - System.Web.Services.Discovery.DiscoveryDocumentReference ob = null; - if (isNullable && ReadNull()) return null; - - if (checkType) - { - System.Xml.XmlQualifiedName t = GetXsiType(); - if (t != null) - { - if (t.Name != "DiscoveryDocumentReference" || t.Namespace != "http://schemas.xmlsoap.org/disco/") - throw CreateUnknownTypeException(t); - } - } - - ob = new System.Web.Services.Discovery.DiscoveryDocumentReference (); - - Reader.MoveToElement(); - - while (Reader.MoveToNextAttribute()) - { - if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") { - ob.@Ref = Reader.Value; - } - else if (IsXmlnsAttribute (Reader.Name)) { - } - else { - UnknownNode (ob); - } - } - - Reader.MoveToElement(); - if (Reader.IsEmptyElement) { - Reader.Skip (); - return ob; - } - - Reader.ReadStartElement(); - Reader.MoveToContent(); - - while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) - { - if (Reader.NodeType == System.Xml.XmlNodeType.Element) - { - UnknownNode (ob); - } - else - UnknownNode(ob); - - Reader.MoveToContent(); - } - - ReadEndElement(); - - return ob; - } - - public System.Web.Services.Discovery.SoapBinding ReadObject_SoapBinding (bool isNullable, bool checkType) - { - System.Web.Services.Discovery.SoapBinding ob = null; - if (isNullable && ReadNull()) return null; - - if (checkType) - { - System.Xml.XmlQualifiedName t = GetXsiType(); - if (t != null) - { - if (t.Name != "SoapBinding" || t.Namespace != "http://schemas/xmlsoap.org/disco/schema/soap/") - throw CreateUnknownTypeException(t); - } - } - - ob = new System.Web.Services.Discovery.SoapBinding (); - - Reader.MoveToElement(); - - while (Reader.MoveToNextAttribute()) - { - if (Reader.LocalName == "binding" && Reader.NamespaceURI == "") { - ob.@Binding = ToXmlQualifiedName (Reader.Value); - } - else if (Reader.LocalName == "address" && Reader.NamespaceURI == "") { - ob.@Address = Reader.Value; - } - else if (IsXmlnsAttribute (Reader.Name)) { - } - else { - UnknownNode (ob); - } - } - - Reader.MoveToElement(); - if (Reader.IsEmptyElement) { - Reader.Skip (); - return ob; - } - - Reader.ReadStartElement(); - Reader.MoveToContent(); - - while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) - { - if (Reader.NodeType == System.Xml.XmlNodeType.Element) - { - UnknownNode (ob); - } - else - UnknownNode(ob); - - Reader.MoveToContent(); - } - - ReadEndElement(); - - return ob; - } - - public System.Web.Services.Discovery.ContractReference ReadObject_ContractReference (bool isNullable, bool checkType) - { - System.Web.Services.Discovery.ContractReference ob = null; - if (isNullable && ReadNull()) return null; - - if (checkType) - { - System.Xml.XmlQualifiedName t = GetXsiType(); - if (t != null) - { - if (t.Name != "ContractReference" || t.Namespace != "http://schemas.xmlsoap.org/disco/scl/") - throw CreateUnknownTypeException(t); - } - } - - ob = new System.Web.Services.Discovery.ContractReference (); - - Reader.MoveToElement(); - - while (Reader.MoveToNextAttribute()) - { - if (Reader.LocalName == "docRef" && Reader.NamespaceURI == "") { - ob.@DocRef = Reader.Value; - } - else if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") { - ob.@Ref = Reader.Value; - } - else if (IsXmlnsAttribute (Reader.Name)) { - } - else { - UnknownNode (ob); - } - } - - Reader.MoveToElement(); - if (Reader.IsEmptyElement) { - Reader.Skip (); - return ob; - } - - Reader.ReadStartElement(); - Reader.MoveToContent(); - - while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) - { - if (Reader.NodeType == System.Xml.XmlNodeType.Element) - { - UnknownNode (ob); - } - else - UnknownNode(ob); - - Reader.MoveToContent(); - } - - ReadEndElement(); - - return ob; - } - - public System.Web.Services.Discovery.SchemaReference ReadObject_SchemaReference (bool isNullable, bool checkType) - { - System.Web.Services.Discovery.SchemaReference ob = null; - if (isNullable && ReadNull()) return null; - - if (checkType) - { - System.Xml.XmlQualifiedName t = GetXsiType(); - if (t != null) - { - if (t.Name != "SchemaReference" || t.Namespace != "http://schemas/xmlsoap.org/disco/schema/") - throw CreateUnknownTypeException(t); - } - } - - ob = new System.Web.Services.Discovery.SchemaReference (); - - Reader.MoveToElement(); - - while (Reader.MoveToNextAttribute()) - { - if (Reader.LocalName == "targetNamespace" && Reader.NamespaceURI == "") { - ob.@TargetNamespace = Reader.Value; - } - else if (Reader.LocalName == "ref" && Reader.NamespaceURI == "") { - ob.@Ref = Reader.Value; - } - else if (IsXmlnsAttribute (Reader.Name)) { - } - else { - UnknownNode (ob); - } - } - - Reader.MoveToElement(); - if (Reader.IsEmptyElement) { - Reader.Skip (); - return ob; - } - - Reader.ReadStartElement(); - Reader.MoveToContent(); - - while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) - { - if (Reader.NodeType == System.Xml.XmlNodeType.Element) - { - UnknownNode (ob); - } - else - UnknownNode(ob); - - Reader.MoveToContent(); - } - - ReadEndElement(); - - return ob; - } - - protected override void InitCallbacks () - { - } - - protected override void InitIDs () - { - } - - } - - internal class DiscoveryDocumentWriter : XmlSerializationWriter - { - public void WriteRoot_DiscoveryDocument (object o) - { - WriteStartDocument (); - System.Web.Services.Discovery.DiscoveryDocument ob = (System.Web.Services.Discovery.DiscoveryDocument) o; - TopLevelElement (); - WriteObject_DiscoveryDocument (ob, "discovery", "http://schemas.xmlsoap.org/disco/", true, false, true); - } - - void WriteObject_DiscoveryDocument (System.Web.Services.Discovery.DiscoveryDocument ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem) - { - if (ob == null) - { - if (isNullable) - WriteNullTagLiteral(element, namesp); - return; - } - - if (writeWrappingElem) { - WriteStartElement (element, namesp, ob); - } - - if (needType) WriteXsiType("DiscoveryDocument", "http://schemas.xmlsoap.org/disco/"); - - if (ob.@references != null) { - for (int n6 = 0; n6 < ob.@references.Count; n6++) { - if (ob.@references[n6] == null) { } - else if (ob.@references[n6].GetType() == typeof(System.Web.Services.Discovery.SchemaReference)) { - WriteObject_SchemaReference (((System.Web.Services.Discovery.SchemaReference) ob.@references[n6]), "schemaRef", "http://schemas.xmlsoap.org/disco/", false, false, true); - } - else if (ob.@references[n6].GetType() == typeof(System.Web.Services.Discovery.DiscoveryDocumentReference)) { - WriteObject_DiscoveryDocumentReference (((System.Web.Services.Discovery.DiscoveryDocumentReference) ob.@references[n6]), "discoveryRef", "http://schemas.xmlsoap.org/disco/", false, false, true); - } - else if (ob.@references[n6].GetType() == typeof(System.Web.Services.Discovery.ContractReference)) { - WriteObject_ContractReference (((System.Web.Services.Discovery.ContractReference) ob.@references[n6]), "contractRef", "http://schemas.xmlsoap.org/disco/scl/", false, false, true); - } - else throw CreateUnknownTypeException (ob.@references[n6]); - } - } - if (ob.@additionalInfo != null) { - for (int n7 = 0; n7 < ob.@additionalInfo.Count; n7++) { - WriteObject_SoapBinding (((System.Web.Services.Discovery.SoapBinding) ob.@additionalInfo[n7]), "soap", "http://schemas/xmlsoap.org/disco/schema/soap/", false, false, true); - } - } - if (writeWrappingElem) WriteEndElement (ob); - } - - void WriteObject_SchemaReference (System.Web.Services.Discovery.SchemaReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem) - { - if (ob == null) - { - if (isNullable) - WriteNullTagLiteral(element, namesp); - return; - } - - if (writeWrappingElem) { - WriteStartElement (element, namesp, ob); - } - - if (needType) WriteXsiType("SchemaReference", "http://schemas/xmlsoap.org/disco/schema/"); - - if (ob.@TargetNamespace != "") { - WriteAttribute ("targetNamespace", "", ob.@TargetNamespace); - } - WriteAttribute ("ref", "", ob.@Ref); - - if (writeWrappingElem) WriteEndElement (ob); - } - - void WriteObject_DiscoveryDocumentReference (System.Web.Services.Discovery.DiscoveryDocumentReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem) - { - if (ob == null) - { - if (isNullable) - WriteNullTagLiteral(element, namesp); - return; - } - - if (writeWrappingElem) { - WriteStartElement (element, namesp, ob); - } - - if (needType) WriteXsiType("DiscoveryDocumentReference", "http://schemas.xmlsoap.org/disco/"); - - WriteAttribute ("ref", "", ob.@Ref); - - if (writeWrappingElem) WriteEndElement (ob); - } - - void WriteObject_ContractReference (System.Web.Services.Discovery.ContractReference ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem) - { - if (ob == null) - { - if (isNullable) - WriteNullTagLiteral(element, namesp); - return; - } - - if (writeWrappingElem) { - WriteStartElement (element, namesp, ob); - } - - if (needType) WriteXsiType("ContractReference", "http://schemas.xmlsoap.org/disco/scl/"); - - WriteAttribute ("docRef", "", ob.@DocRef); - WriteAttribute ("ref", "", ob.@Ref); - - if (writeWrappingElem) WriteEndElement (ob); - } - - void WriteObject_SoapBinding (System.Web.Services.Discovery.SoapBinding ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem) - { - if (ob == null) - { - if (isNullable) - WriteNullTagLiteral(element, namesp); - return; - } - - if (writeWrappingElem) { - WriteStartElement (element, namesp, ob); - } - - if (needType) WriteXsiType("SoapBinding", "http://schemas/xmlsoap.org/disco/schema/soap/"); - - WriteAttribute ("binding", "", FromXmlQualifiedName (ob.@Binding)); - WriteAttribute ("address", "", ob.@Address); - - if (writeWrappingElem) WriteEndElement (ob); - } - - protected override void InitCallbacks () - { - } - - } - -} - diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryExceptionDictionary.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryExceptionDictionary.cs deleted file mode 100755 index 198b2effe55..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryExceptionDictionary.cs +++ /dev/null @@ -1,86 +0,0 @@ -// -// System.Web.Services.Protocols.DiscoveryExceptionDictionary.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; - -namespace System.Web.Services.Discovery -{ - public sealed class DiscoveryExceptionDictionary : DictionaryBase - { - #region Constructors - - public DiscoveryExceptionDictionary () - { - } - - #endregion // Constructors - - #region Properties - - public Exception this[string url] { - get { return (Exception) InnerHashtable [url]; } - set { - if (url == null) - throw new ArgumentNullException (); - InnerHashtable [url] = value; - } - } - - public ICollection Keys { - get { return InnerHashtable.Keys; } - } - - public ICollection Values { - get { return InnerHashtable.Values; } - } - - #endregion // Properties - - #region Methods - - public void Add (string url, Exception value) - { - InnerHashtable.Add (url, value); - } - - public bool Contains (string url) - { - return InnerHashtable.Contains (url); - } - - public void Remove (string url) - { - InnerHashtable.Remove (url); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryReference.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryReference.cs deleted file mode 100755 index 1512fd155bf..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryReference.cs +++ /dev/null @@ -1,148 +0,0 @@ -// -// System.Web.Services.Discovery.DiscoveryReference.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Xml.Serialization; - -namespace System.Web.Services.Discovery { - public abstract class DiscoveryReference { - - #region Fields - - private string defaultFilename; - private DiscoveryClientProtocol clientProtocol; - - #endregion // Fields - - #region Constructors - - protected DiscoveryReference () - { - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public DiscoveryClientProtocol ClientProtocol { - get { return clientProtocol; } - set { clientProtocol = value; } - - } - - [XmlIgnore] - public virtual string DefaultFilename { - get { return FilenameFromUrl (Url); } - } - - [XmlIgnore] - public abstract string Url { - get; - set; - } - - internal Uri BaseUri - { - get - { - int i = Url.IndexOf ("://"); - if (i == -1 || !Uri.CheckSchemeName (Url.Substring (0,i))) - return new Uri ("file://" + Url); - else - return new Uri (Url); - } - } - - #endregion // Properties - - #region Methods - - protected static string FilenameFromUrl (string url) - { - if (url.ToLower().EndsWith ("/wsdl")) - url = url.Substring (0,url.Length-5); - else if (url.ToLower().EndsWith ("/soap")) - url = url.Substring (0,url.Length-5); - else if (url.ToLower().EndsWith ("/wsdl.jsp")) - url = url.Substring (0,url.Length-9); - else if (url.ToLower().EndsWith ("/soap.wsdl")) - url = url.Substring (0,url.Length-10); - - int i = url.LastIndexOf ("/"); - if (i != -1) url = url.Substring (i+1); - - i = url.IndexOfAny (new char[] {'.','?','\\'}); - if (i != -1) url = url.Substring (0,i); - - System.Text.StringBuilder sb = new System.Text.StringBuilder (); - for (int n=0; n= Count) - throw new ArgumentOutOfRangeException (); - return (DiscoveryReference) InnerList [i]; - } - set { - if (i < 0 || i >= Count) - throw new ArgumentOutOfRangeException (); - InnerList [i] = value; - } - } - - #endregion // Properties - - #region Methods - - public int Add (DiscoveryReference value) - { - return InnerList.Add (value); - } - - public bool Contains (DiscoveryReference value) - { - return InnerList.Contains (value); - } - - public void Remove (DiscoveryReference value) - { - InnerList.Remove (value); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryRequestHandler.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryRequestHandler.cs deleted file mode 100755 index 394bf7f5a91..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoveryRequestHandler.cs +++ /dev/null @@ -1,110 +0,0 @@ -// -// System.Web.Services.Discovery.DiscoveryRequestHandler.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web; -using System.IO; -using System.Web.Services.Discovery; - -namespace System.Web.Services.Discovery { - public sealed class DiscoveryRequestHandler : IHttpHandler { - - #region Constructors - - public DiscoveryRequestHandler () - { - } - - #endregion // Constructors - - #region Properties - - public bool IsReusable { - get { return true; } - } - - #endregion // Properties - - #region Methods - - public void ProcessRequest (HttpContext context) - { - string path = context.Request.PhysicalPath; - FileStream fs = new FileStream (path, FileMode.Open); - DynamicDiscoveryDocument ddoc = DynamicDiscoveryDocument.Load (fs); - fs.Close (); - - string url = context.Request.Url.ToString(); - int i = url.LastIndexOf ('/'); - if (i != -1) url = url.Substring (0,i+1); - - DiscoveryDocument doc = new DiscoveryDocument (); - GetFiles (url, "", Path.GetDirectoryName(path), doc, ddoc); - - context.Response.ContentType = "text/xml; charset=utf-8"; - doc.Write (context.Response.OutputStream); - } - - void GetFiles (string baseUrl, string relPath, string path, DiscoveryDocument doc, DynamicDiscoveryDocument ddoc) - { - string url = baseUrl + relPath; - if (!url.EndsWith ("/")) url += "/"; - - string[] files = Directory.GetFiles (path); - foreach (string file in files) - { - string ext = Path.GetExtension (file).ToLower(); - if (ext == ".asmx") - { - ContractReference cref = new ContractReference (); - cref.DocRef = url + Path.GetFileName (file); - cref.Ref = cref.DocRef + "?wsdl"; - doc.References.Add (cref); - } - else if (ext == ".disco") - { - DiscoveryDocumentReference dref = new DiscoveryDocumentReference (); - dref.Ref = url + Path.GetFileName (file); - doc.References.Add (dref); - } - } - string[] dirs = Directory.GetDirectories (path); - - foreach (string dir in dirs) - { - string rel = Path.Combine (relPath, Path.GetFileName(dir)); - if (!ddoc.IsExcluded (rel)) - GetFiles (baseUrl, rel, Path.Combine (path, dir), doc, ddoc); - } - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoverySearchPattern.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoverySearchPattern.cs deleted file mode 100755 index 9a101b0a7b4..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DiscoverySearchPattern.cs +++ /dev/null @@ -1,54 +0,0 @@ -// -// System.Web.Services.Discovery.DiscoverySearchPattern.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Discovery { - public abstract class DiscoverySearchPattern { - - #region Constructors - - protected DiscoverySearchPattern () {} - - #endregion // Constructors - - #region Properties - - public abstract string Pattern { - get; - } - - #endregion // Properties - - #region Methods - - public abstract DiscoveryReference GetDiscoveryReference (string filename); - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DynamicDiscoveryDocument.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/DynamicDiscoveryDocument.cs deleted file mode 100755 index f61e53200f9..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/DynamicDiscoveryDocument.cs +++ /dev/null @@ -1,92 +0,0 @@ -// -// System.Web.Services.Discovery.DynamicDiscoveryDocument.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Xml.Serialization; - -namespace System.Web.Services.Discovery { - - [XmlRootAttribute("dynamicDiscovery", Namespace="urn:schemas-dynamicdiscovery:disco.2000-03-17", IsNullable=true)] - public sealed class DynamicDiscoveryDocument { - - #region Fields - - public const string Namespace = "urn:schemas-dynamicdiscovery:disco.2000-03-17"; - - ExcludePathInfo[] excludes; - - #endregion // Fields - - #region Constructors - - public DynamicDiscoveryDocument () - { - } - - #endregion // Constructors - - #region Properties - - [XmlElement("exclude", typeof(ExcludePathInfo))] - public ExcludePathInfo[] ExcludePaths { - get { return excludes; } - set { excludes = value; } - } - - #endregion // Properties - - #region Methods - - public static DynamicDiscoveryDocument Load (Stream stream) - { - XmlSerializer ser = new XmlSerializer (typeof(DynamicDiscoveryDocument)); - return (DynamicDiscoveryDocument) ser.Deserialize (stream); - } - - public void Write (Stream stream) - { - XmlSerializer ser = new XmlSerializer (typeof(DynamicDiscoveryDocument)); - ser.Serialize (stream, this); - } - - internal bool IsExcluded (string path) - { - if (excludes == null) return false; - - foreach (ExcludePathInfo ex in excludes) - if (ex.Path == path) return true; - - return false; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/ExcludePathInfo.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/ExcludePathInfo.cs deleted file mode 100755 index d759682b8c0..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/ExcludePathInfo.cs +++ /dev/null @@ -1,65 +0,0 @@ -// -// System.Web.Services.Discovery.ExcludePathInfo.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Xml.Serialization; - -namespace System.Web.Services.Discovery { - public sealed class ExcludePathInfo { - - #region Fields - - private string path; - - #endregion // Fields - - #region Constructors - - public ExcludePathInfo () - { - } - - public ExcludePathInfo (string path) - { - this.path = path; - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute("path")] - public string Path { - get { return path; } - set { path = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/SchemaReference.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/SchemaReference.cs deleted file mode 100755 index dab5d5f9486..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/SchemaReference.cs +++ /dev/null @@ -1,132 +0,0 @@ -// -// System.Web.Services.Discovery.SchemaReference.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System.ComponentModel; -using System.IO; -using System.Xml.Schema; -using System.Xml.Serialization; - -namespace System.Web.Services.Discovery { - - [XmlRootAttribute("schemaRef", Namespace="http://schemas.xmlsoap.org/disco/schema/", IsNullable=true)] - public sealed class SchemaReference : DiscoveryReference { - - #region Fields - - public const string Namespace = "http://schemas.xmlsoap.org/disco/schema/"; - - private string defaultFilename; - private string href; - private string targetNamespace; - private XmlSchema schema; - - #endregion // Fields - - #region Constructors - - public SchemaReference () - { - } - - public SchemaReference (string href) : this() - { - this.href = href; - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public override string DefaultFilename { - get { return FilenameFromUrl (Url) + ".xsd"; } - } - - [XmlAttribute("ref")] - public string Ref { - get { return href; } - set { href = value; } - } - - [XmlIgnore] - public override string Url { - get { return href; } - set { href = value; } - } - - [DefaultValue("")] - [XmlAttribute("targetNamespace")] - public string TargetNamespace { - get { return targetNamespace; } - set { targetNamespace = targetNamespace; } - } - - [XmlIgnore] - public XmlSchema Schema { - get { - if (ClientProtocol == null) - throw new InvalidOperationException ("The ClientProtocol property is a null reference"); - - XmlSchema doc = ClientProtocol.Documents [Url] as XmlSchema; - if (doc == null) - throw new Exception ("The Documents property of ClientProtocol does not contain a schema with the url " + Url); - - return doc; - } - - } - - #endregion // Properties - - #region Methods - - public override object ReadDocument (Stream stream) - { - return XmlSchema.Read (stream, null); - } - - protected internal override void Resolve (string contentType, Stream stream) - { - XmlSchema doc = XmlSchema.Read (stream, null); - ClientProtocol.Documents.Add (Url, doc); - if (!ClientProtocol.References.Contains (Url)) - ClientProtocol.References.Add (this); - } - - public override void WriteDocument (object document, Stream stream) - { - ((XmlSchema)document).Write (stream); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/SoapBinding.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/SoapBinding.cs deleted file mode 100755 index 3ba6f903b58..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/SoapBinding.cs +++ /dev/null @@ -1,73 +0,0 @@ -// -// System.Web.Services.Discovery.SoapBinding.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Xml; -using System.Xml.Serialization; - -namespace System.Web.Services.Discovery { - - [XmlRootAttribute("soap", Namespace="http://schemas.xmlsoap.org/disco/soap/", IsNullable=true)] - public sealed class SoapBinding { - - #region Fields - - public const string Namespace = "http://schemas.xmlsoap.org/disco/soap/"; - - private string address; - private XmlQualifiedName binding; - - #endregion // Fields - - #region Constructors - - public SoapBinding () - { - } - - #endregion // Constructors - - #region Properties - - [XmlAttribute("address")] - public string Address { - get { return address; } - set { address = value; } - } - - [XmlAttribute("binding")] - public XmlQualifiedName Binding { - get { return binding; } - set { binding = value; } - } - - #endregion // Properties - - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Discovery/XmlSchemaSearchPattern.cs b/mcs/class/System.Web.Services/System.Web.Services.Discovery/XmlSchemaSearchPattern.cs deleted file mode 100755 index 4a190b1d6b7..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Discovery/XmlSchemaSearchPattern.cs +++ /dev/null @@ -1,69 +0,0 @@ -// -// System.Web.Services.Discovery.XmlSchemaSearchPattern.cs -// -// Author: -// Dave Bettin (javabettin@yahoo.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Dave Bettin, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Discovery { - public sealed class XmlSchemaSearchPattern : DiscoverySearchPattern { - - #region Fields - - private string pattern = "*.xsd"; - - #endregion // Fields - - #region Constructors - - public XmlSchemaSearchPattern () - { - } - - #endregion // Constructors - - #region Properties - - public override string Pattern { - get { return pattern; } - } - - #endregion // Properties - - #region Methods - - public override DiscoveryReference GetDiscoveryReference (string filename) - { - SchemaReference refe = new SchemaReference (); - refe.Url = filename; - refe.Ref = filename; - return refe; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/AnyReturnReader.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/AnyReturnReader.cs deleted file mode 100644 index e5fec4a0e81..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/AnyReturnReader.cs +++ /dev/null @@ -1,70 +0,0 @@ -// -// System.Web.Services.Protocols.AnyReturnReader.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Net; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public class AnyReturnReader : MimeReturnReader { - - #region Constructors - - [MonoTODO] - public AnyReturnReader () - { - throw new NotImplementedException (); - } - - #endregion // Constructors - - #region Methods - - [MonoTODO] - public override object GetInitializer (LogicalMethodInfo methodInfo) - { - throw new NotImplementedException (); - } - - [MonoTODO] - public override void Initialize (object o) - { - throw new NotImplementedException (); - } - - [MonoTODO] - public override object Read (WebResponse response, Stream responseStream) - { - throw new NotImplementedException (); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/ChangeLog b/mcs/class/System.Web.Services/System.Web.Services.Protocols/ChangeLog deleted file mode 100644 index 6449e8cfe28..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/ChangeLog +++ /dev/null @@ -1,886 +0,0 @@ -2005-02-07 Lluis Sanchez Gual - - * XmlReturnWriter.cs, SoapDocumentationHandler.cs: Use utf-8 encoding - when generating xml responses, wsdl documents and schemas. This fixes - bug #72202. - -2004-12-09 Lluis Sanchez Gual - - * ValueCollectionParameterReader.cs: Parse parameters in the correct - way, Convert.ChangeType is not enough. This fixes bug #70266. - Removed some types that are not supported as parameters. - * MimeFormatter.cs: Added methods for xml <-> object conversion. - * UrlEncodedParameterWriter.cs: Use a more elaborate method for converting - from object to string, ToString() is not enough. - -2004-12-09 Lluis Sanchez Gual - - * TypeStubManager.cs: Removed redundat hastable access. - * SoapHttpClientProtocol.cs: Accept responses with ContentLength==0. - This fixes bug #70310. - -2004-12-03 Gonzalo Paniagua Javier - - * SoapHttpClientProtocol.cs: dispose the StreamReader that wraps the - response stream. - -2004-09-15 Lluis Sanchez Gual - - * Methods.cs: Use the service namespace as the base for the soap action. - This fixes bug #60379. - -2004-08-25 Lluis Sanchez Gual - - * HttpSoapWebServiceHandler.cs, WebServiceHandler.cs: Do not assign the - context to the service. It already gets it from HttpContext.Current. - -2004-07-27 Lluis Sanchez Gual - - * HttpSimpleClientProtocol.cs, HttpWebClientProtocol.cs, - SoapHttpClientProtocol.cs: Implemented support for the new async model. - * InvokeCompletedEventArgs.cs: Implemented. - -2004-07-20 Lluis Sanchez Gual - - * HttpWebClientProtocol.cs: Add received cookies to cookieContainer when - getting the response, do not wait for the next request to do it. - -2004-07-13 Lluis Sanchez Gual - - * HttpWebClientProtocol.cs, Soap12FaultCodes.cs, SoapClientMessage.cs, - SoapException.cs, SoapHeader.cs, SoapHeaderException.cs, - SoapHttpClientProtocol.cs, SoapMessage.cs, SoapRpcMethodAttribute.cs, - SoapRpcServiceAttribute.cs, SoapServerMessage.cs: Api fixage (mainly - missing attributes). - -2004-07-10 Lluis Sanchez Gual - - * HttpSimpleClientProtocol.cs, HttpWebClientProtocol.cs, - SoapClientMessage.cs, SoapHttpClientProtocol.cs, SoapServerMessage.cs: - Added 2.0 stubs. - * SoapException.cs, SoapHeader.cs, SoapHeaderException.cs, SoapMessage.cs, - SoapRpcMethodAttribute.cs, SoapRpcServiceAttribute.cs: Implemented some - new methods and properties. - * WebClientProtocol.cs: uri field must be internal. - -2004-07-05 Lluis Sanchez Gual - - * Methods.cs: When using RPC, ignore RequestElementName and MessageName, - and always uses the method name (MS.NET seems to do this). - -2004-07-02 Lluis Sanchez Gual - - * XmlReturnWriter.cs: Add XmlIncludes to the reflection importer when - reflecting the return type. - -2004-07-01 Lluis Sanchez Gual - - * Methods.cs: Check for null when looking for a header serializer, since - unknown headers don't have a serializer. - * SoapHeader.cs: Check for empty string before setting - EncodedMustUnderstand. - -2004-07-01 Lluis Sanchez Gual - - * Methods.cs, SoapMessage.cs: Added support for unknown headers. - * SoapHeader.cs, SoapUnknownHeader.cs: Added new constructor that takes an - XmlElement with header info. - * WebServiceHelper.cs: Write the encodingStyle attribute when using the - encoded format. Added support for unknown headers. - -2004-06-22 Lluis Sanchez Gual - - * XmlReturnReader.cs, XmlReturnWriter.cs: Generate the serializer with - the root attribute taken from the method attributes. - -2004-06-10 Lluis Sanchez Gual - - * TypeStubManager.cs: Improved locking in GetLogicalTypeInfo(). - * WebServiceHandler.cs: Removed unneded methods. - -2004-06-02 Lluis Sanchez Gual - - * LogicalMethodInfo.cs: Don't crash in GetCustomAttribute if the requested - attribute is not found. - -2004-06-01 Gert Driesen - - * HttpSoapWebServiceHandler.cs: Removed unused variables. - * SoapHeaderAttribute.cs: Added Obsolete attribute. - -2004-05-24 Lluis Sanchez Gual - - * SoapClientMessage.cs: Get the MethodInfo from the corresponding - SoapMethodStubInfo. - -2004-05-18 Gonzalo Paniagua Javier - - * SoapHttpClientProtocol.cs: when the response has a not acceptable - status code, the WebException we throw has a status of ProtocolError. - Fixes bug #58564. - -2004-05-12 Lluis Sanchez Gual - - * LogicalMethodInfo.cs: Made EnableSession property internal. - -2004-05-12 Lluis Sanchez Gual - - * HttpSimpleWebServiceHandler.cs: Added GetRequestMethod(), which is used - by the handler factory to check if the target method needs session or not. - Also factorized error handling in WriteError(). - * HttpSoapWebServiceHandler.cs: Added GetRequestMethod(), for the same - reason. Assign the context to the WebService just before invoking the - method. - * SoapHttpClientProtocol.cs: Use helper method to create the xml writer. - * WebServiceHandler.cs: Added virtual GetRequestMethod(). - * WebServiceHandlerFactory.cs: Use an http handler wrapper when the target - method requires session support. - * WebServiceHelper.cs: Added some helper methods. - -2004-05-11 Gonzalo Paniagua Javier - - * SoapDocumentationHandler.cs: added internal property to get the page - handler when available. - - * WebServiceHandlerFactory.cs: wrap the documentation handler in a class - that implements IRequiresSessionState and, if requested, - IReadOnlySessionState, so that we can use Sesion object in the default - WSDL help generator. - -2004-05-10 Gonzalo Paniagua Javier - - * HttpSoapWebServiceHandler.cs: finish the request after serializing - the fault message. - -2004-05-05 Gonzalo Paniagua Javier - - * HttpGetWebServiceHandler.cs: - * HttpPostWebServiceHandler.cs: removed. - - * HttpSimpleWebServiceHandler.cs: changed ctor parameters and added - EnableSession property. - - * WebServiceHandler.cs: added EnableSession virtual property. - - * WebServiceHandlerFactory.cs: added a new handler that implements - IRequiresSessionState used for HttpGet and HttpPost. - (GetHandler): for HttpGet and HttpPost check if the method requires to - have a Session object and use the new SimpleSyncSessionHandler in that - case. - - Still missing proper session handler for SOAP requests. - -2004-05-05 Gonzalo Paniagua Javier - - * HttpSimpleWebServiceHandler.cs: - * HttpSoapWebServiceHandler.cs: use the session if the method has - EnableSession set. - - * LogicalMethodInfo.cs: added EnableSession property. - - * WebServiceHandler.cs: set the Session object of the WebService. - -2004-03-25 Lluis Sanchez Gual - - * WebServiceHelper.cs: In GetContentEncoding, chop off the single & double - quotes around the encoding name. Patch by George Kodinov. This fixes - bug #55806. - -2004-03-10 Lluis Sanchez Gual - - * HttpSoapWebServiceHandler.cs: Set the properties ContentType and - ContentEncoding in SoapServerMessage. - * LogicalMethodInfo.cs: Implemented AsyncResultParameter, BeginInvoke and - EndInvoke. Fixed ComputeParameters, so it computes the correct parameters - for async logical methods. - * Methods.cs: Check that client proxies have one and only one - WebServiceBindingAttribute. - * PatternMatcher.cs: Implemented (in fact, just moved code from - TextReturnReader.cs) - * SoapDocumentationHandler.cs: Add soap bindings in the generated - discovery document. - * SoapHttpClientProtocol.cs: Implemented method Discover(). - * SoapMessage.cs: Implemented property ContentEncoding. - * TextReturnReader.cs: Moved code to PatternMatcher.cs. - -2004-02-27 Lluis Sanchez Gual - - * Fault.cs: Moved Fault class from Methods.cd to this file. It also includes - a generated serializer. - * HttpSoapWebServiceHandler.cs, WebServiceHelper.cs: Use the new static Fault serializer. - * Methods.cs: Include types declared with XmlInclude and SoapInclude to the - reflection importer. Moved Fault and its serializer to Fault.cs - * SoapHttpClientProtocol.cs: Removed unused method. - -2004-02-12 Lluis Sanchez Gual - - * WebServiceHelper.cs: When reading a soap request, skip empty headers. - This fixes bug #51846. - -2004-01-27 Lluis Sanchez Gual - - * WebServiceHandler.cs: inheritance from WebService is not mandatory. - -2004-02-05 Alon Gazit - - * HttpMethodAttribute.cs: - * MatchAttribute.cs: - * SoapDocumentMethodAttribute.cs: - * SoapDocumentServiceAttribute.cs: - * SoapHeaderAttribute.cs: - * SoapRpcMethodAttribute.cs: - * SoapRpcServiceAttribute.cs: This attribute is inherited by - derived classes.changed the AttributeUsage attribute. - -2004-02-05 Alon Gazit - - * SoapHeaderAttribute.cs: This attribute is multiuse. - Changed the AttributeUsage attribute. - -2004-01-27 Lluis Sanchez Gual - - * SoapDocumentMethodAttribute.cs: Fixed bug in ResponseNamespace. - -2004-01-24 Lluis Sanchez Gual - - * HttpWebClientProtocol.cs: Added missing property. - * Methods.cs: Default binding for a method must be null. - * SoapHeaderDirection.cs: Added missing enum value. - * SoapMessage.cs: Added missing property. - * TypeStubManager.cs: Removed unneded check from AddBinding. - In GetBinding(), return default binding if name is null. - * ValueCollectionParameterReader.cs: IsPrimitive must be internal. - -2004-01-21 Lluis Sanchez Gual - - * HttpSoapWebServiceHandler.cs, SoapHttpClientProtocol.cs: Do not use - indented format for requests and responses. SOAPAction header value - must be quoted (fix by Yaacov Akiba Slama). - -2004-01-21 Lluis Sanchez Gual - - * Methods.cs: Set the correct namespaces for Fault. This fixes bug #53117. - Based on the fix by Eran Domb. - -2004-01-19 Lluis Sanchez Gual - - * Methods.cs: Get the method namespace from the binding, not from the web - service. - * TypeStubManager.cs: When adding a binding, ignore it if it has already - been added. Changed WebServiceLiteralNamespace by the method - GetWebServiceLiteralNamespace. The literal namespace depends on the binding - namespace, so it has to be provided as parameter. - * XmlReturnReader.cs, XmlReturnWriter.cs: Use GetWebServiceLiteralNamespace - instead of WebServiceLiteralNamespace. - -2004-01-14 Lluis Sanchez Gual - - * Methods.cs: Set the correct element name and namespace for headers (those - are not managed like other data classes). - -2004-01-10 Gonzalo Paniagua Javier - - * HttpSoapWebServiceHandler.cs: - * HttpSimpleWebServiceHandler.cs: set - base.Context property. - - * WebServiceHandler.cs: added set_Context and set the context for the - WebService when creating the instance. - -2003-12-23 Lluis Sanchez Gual - - * SoapDocumentationHandler.cs: Added support for DISCO file generation. - -2003-12-16 Lluis Sanchez Gual - - * HttpSimpleClientProtocol.cs: Do not encode the request url, since it is - already encoded by the MimeParameterWriter. - * MatchAttribute.cs: Set default value for Group to 1. - * TextReturnReader.cs: Implemented. With this it is possible to create an - XML web service that parse the contents of a web page. - -2003-12-15 Lluis Sanchez Gual - - * HttpSoapWebServiceHandler.cs: Added check for valid SOAPAction header. - Fixed bug when routing style is RequestElement. - Removed GetMethodFromAction. This is done now in the type stub. - Other minor fixes. - * Methods.cs, WebServiceHelper.cs: Faults are always serialized using - literal format. Removed unneded code. - -2003-12-12 Lluis Sanchez Gual - - * Methods.cs: Added special handling for RPC format. - -2003-11-27 Lluis Sanchez Gual - - * Methods.cs: Added correct namespace for serialization in Fault class. - * SoapHttpClientProtocol.cs: Changed the method used to check if the - result is a fault. Now the check is done inside - WebServiceHelper.ReadSoapMessage. Removed some debug writelines. - * WebServiceHelper.cs: If the message body is a fault, use the fault - serializer. - -2003-11-24 Lluis Sanchez Gual - - * Methods.cs, TypeStubManager.cs, SoapMessage.cs: Removed TODO comment. - * SoapDocumentationHandler.cs: Check that the documentation page exist. - * SoapHttpClientProtocol.cs: Removed cast from WebResponse to - HttpWebResponse. This fixes bug #51281. - -2003-11-20 Gonzalo Paniagua Javier - - * HttpSoapWebServiceHandler.cs: WebException is ok here for wrong - content encoding... - * SoapHttpClientProtocol.cs: ... but here, we should throw an - InvalidOperationException including the full response. - - * WebServiceHelper.cs: - (GetContentEncoding): now fills an output variable with the name of the - content encoding used. - (InvalidOperation): new method to build the message for - InvalidOperationException. - -2003-11-20 Gonzalo Paniagua Javier - - * SoapHttpClientProtocol.cs: - * WebServiceHelper.cs: throw a WebException instead of an Exception. - Fixes bug #51193. - -2003-10-26 Miguel de Icaza - - * WebServiceHelper.cs: Compute content type and encoding - correctly in the absence of extra options. - -2003-10-22 Lluis Sanchez Gual - - * Methods.cs: Class Fault is now public, so it can be serialized. - -2003-10-15 Lluis Sanchez Gual - - * TypeStubManager.cs: Added OperationName property. - -2003-10-13 Lluis Sanchez Gual - - * HttpGetTypeStubInfo.cs, HttpPostTypeStubInfo.cs, HttpSimpleTypeStubInfo.cs, - HttpSoapWebServiceHandler.cs, Methods.cs, SoapHttpClientProtocol.cs, - TypeStubManager.cs - Added class LogicalTypeInfo, which contains info common to all protocols - through which a web service can be accessed. Also, modified the way - Serializers are created. Instead of creating one by one, they are now - created all at once. This will make serialization creation more efficient - when the serializer code generator is in place. - * SoapRpcMethodAttribute.cs: Set the correct default values for the - properties. - * WebServiceHelper.cs: Removed unused method GetServiceNamespace(). - * XmlReturnReader.cs, XmlReturnWriter.cs: Get the namespace for the return - type from LogicalTypeInfo. - -2003-10-12 Lluis Sanchez Gual - - * SoapHttpClientProtocol.cs: Replaced AsyncInfo by a new - SoapWebClientAsyncResult class derived from WebClientAsyncResult. - * WebClientAsyncResult.cs: Removed unneeded members. - -2003-10-10 Gonzalo Paniagua Javier - - * SoapDocumentationHandler.cs: don't close the response stream here - to allow filtering. - -2003-10-06 Lluis Sanchez Gual - - * HtmlFormParameterWriter.cs: Fixed WriteRequest(). - * HttpGetTypeStubInfo.cs, HttpPostTypeStubInfo.cs: Check that - HttpMethodAttribute is present in proxy's method. - * HttpSimpleClientProtocol.cs: Forgot to call InitializeRequest before - getting the request stream. - * UrlEncodedParameterWriter.cs: in Encode(), take into account that - requestEncoding can be null. - -2003-10-04 Lluis Sanchez Gual - - * SoapDocumentationHandler.cs: Moved here the code from - WebServiceHandlerFactory that generates the documentation page. - * WebServiceHandlerFactory.cs: Moved the code that generates the doc page - to SoapDocumentationHandler.cs. - * HttpGetClientProtocol.cs, HttpGetWebServiceHandler.cs, - HttpPostClientProtocol.cs, HttpPostWebServiceHandler.cs, - HttpSimpleWebServiceHandler.cs, HttpSoapWebServiceHandler.cs, - SoapHttpClientProtocol.cs: Changed parameters of GetTypeStub call. - * HttpGetTypeStubInfo.cs, HttpPostTypeStubInfo.cs: Added ProtocolName - property. Added check for valid parameters. - * HttpSimpleTypeStubInfo.cs: Define return MimeFormatter in constructor. - * Methods.cs: BindingInfo and related properties moved to base TypeStubInfo. - Added properties for XmlImporter and SoapImporter. - * TypeStubManager.cs: Added BindingInfo and related properties. - Changed GetTypeStub method. Now it takes the name of the protocol for - which to get the type stub info. - * ValueCollectionParameterReader.cs: IsSupported should only return true - for input primitive parameters or array of primitives. - -2003-10-03 Gonzalo Paniagua Javier - - * SoapDocumentationHandler.cs: it does not generate the documentation - page any more. GetDescription and GetSchemas are now internal. - - * WebServiceHandlerFactory.cs: generate the documentation page without - doing a Transfer () but instead creating a Page instance from the wsdl - help file. This file is located from the configuration file that - contains the tag. - -2003-10-01 Lluis Sanchez Gual - - * HtmlFormParameterReader.cs, HtmlFormParameterWriter.cs, - HttpGetClientProtocol.cs, HttpPostClientProtocol.cs, - HttpSimpleClientProtocol.cs, MimeFormatter.cs, MimeParameterWriter.cs, - NopReturnReader.cs, UrlEncodedParameterWriter.cs, UrlParameterReader.cs, - UrlParameterWriter.cs, ValueCollectionParameterReader.cs, - WebClientAsyncResult.cs, XmlReturnReader.cs, XmlReturnWriter.cs - : Implemented. - - * HttpSoapWebServiceHandler.cs, SoapClientMessage.cs, SoapServerMessage.cs, - SoapDocumentationHandler.cs, SoapHttpClientProtocol.cs, - WebServiceHelper.cs: Changed due to modifications in TypeStubInfo. - - * Methods.cs: Moved common code to TypeStubInfo.cs. - * WebServiceHandler.cs: Moved invoke code to HttpSoapWebServiceHandler.cs - * ServerProtocol.cs, SoapServerProtocol.cs: Fixed formatting. - * WebServiceHandlerFactory.cs: Added support for HttpGet and HttpPost. - -2003-09-29 Lluis Sanchez Gual - - * Methods.cs: Little fix in binding check. - * SoapExtension.cs: Implemented ChainStream. Changed some methods from - public to internal. - * SoapClientMessage: Implemented EnsureInStage. - * SoapServerMessage: Implemented EnsureInStage, EnsureOutStage. - -2003-09-28 Lluis Sanchez Gual - - * HttpSoapWebServiceHandler.cs: In SerializeResponse method, improved - management of exceptions. Also added support for BufferResponse flag. - * Methods.cs: Added MethodAttribute property in MethodStubInfo. Added - XmlImporter, SoapImporter and Type properties in TypeStubInfo. - * SoapMessage.cs: little fix. - -2003-09-14 Lluis Sanchez Gual - - * SoapDocumentationHandler.cs: Added support for on-the-fly proxy - code generation in documentation pages. - -2003-09-04 Lluis Sanchez Gual - - * Methods.cs: Added support for bare parameter style. Fixed some defaults. - -2003-09-01 Lluis Sanchez Gual - - * Methods.cs: In TypeStubInfo, added Documentation field. - -2003-07-28 Lluis Sanchez Gual - - * HttpSoapWebServiceHandler.cs: - * Methods.cs: Added SoapBindingStyle, SoapBindingUse, InputMembersMapping - and OutputMembersMapping properties in MethodStubInfo. - Use default value defined in TypeStubInfo for RequestNamespace, - ResponseNamespace and other properties. - Added class BindingInfo to store information about class bindings. - In TypeStubInfo added SoapBindingStyle, DefaultBinding, Methods and - Bindings properties. - * SoapRpcMethodAttribute.cs: Use WebServiceAttribute.DefaultNamespace constant - instead of hardcoded namespace name. - * WebServiceHandlerFactory.cs: Create new SoapDocumentationHandler for - documentation requests. - * SoapDocumentationHandler.cs: new handler that generates WS documentation. - -2003-07-22 Lluis Sanchez Gual - - * WebServiceHandler.cs: Fixed Invoke(). ParameterInfo.Position is now - zero-based, like in MS.NET. - -2003-07-16 Lluis Sanchez Gual - - * SoapHttpClientProtocol.cs: Removed debug WriteLine. - -2003-07-10 Lluis Sanchez Gual - - * HttpSoapWebServiceHandler.cs: MS puts the soap action in quotation marks?? - Fix for this case. - * SoapHttpClientProtocol.cs: Implemented support for asynchronous calls - (BeginInvoke and EndInvoke). - -2003-07-09 Lluis Sanchez Gual - - * SoapHttpClientProtocol.cs, HttpSoapWebServiceHandler.cs, Methods.cs: - Added support for soap extensions. Moved some code to - WebServiceHelper. Implemented support for the two types of RoutingStyle. Added support - for In and Out headers. Improved management of exceptions. - * SoapClientMessage.cs: code to retrieve soap headers moved to SoapMessage. - * SoapExtension.cs: Added methods for getting and creating soap extensions. - * SoapMessage.cs: Added methods for getting and assigning headers to an object. - * SoapServerMessage.cs: Added setter for MethodStubInfo. Other minor fixes. - * WebServiceHandler.cs: Added support for In and Out headers. Fixed management of exceptions. - * WebServiceHandlerFactory.cs: Check if the request protocol is supported. - * WebServiceHelper.cs: Added method for reading a soap request. - -2003-07-04 Lluis Sanchez Gual - - * LogicalMethodInfo.cs: Fixed Invoke method. If return type is void, - then the result object array only contain output parameters. - - * Methods.cs: In class MethodStubInfo, added support from some server properties - taken from WebMethodAttribute. Now MethodStubInfo can be created without SoapDocument* - or SoapRpc* attributes, in which case takes default values from TypeStubInfo. - Added method for getting header info. - In class Fault: added constructor for creating a fault from a SoapException. - In class TypeStubInfo: new way to manage serializers for headers. Now it is possible to - get a header using a name and namespace (used when deserializing). - - * SoapHttpClientProtocol.cs: moved WriteSoapEnvelope method to WebServiceHelper (so it can be shared). - Also moved other serialization stuff to WebServiceHelper. - - * SoapMessage.cs: Added some convenient constructors and internal properties. - Implemented GetOutParameterValue and GetReturnValue. - - * SoapServerMessage.cs: Implemented. - - * WebServiceHandler.cs: Implemented method Invoke. - - * WebServiceHandlerFactory.cs: Basic implementation. - - * WebServiceHelper.cs: Added. Has some methods shared between client and server classes. - - * HttpSoapWebServiceHandler.cs: Added. IHttpHandler implementation for HttpSoap requests. - -2003-06-21 Gonzalo Paniagua Javier - - * HttpWebClientProtocol.cs: handle cookies if the request is a - HttpWebRequest. It gets the cookies set in the response and sends them - on subsequent requests. - - * SoapHttpClientProtocol.cs: - (GetWebRequest): just calls the base method. - (SendRequest): set the method here. - (Invoke): call GetWebResponse instead of request.GetResponse. - - * WebClientProtocol.cs: - (GetWebRequest): set some properties of the request. - (GetWebResponse): if we get a WebException containing a response, return - that as the response and ignore the exception. - (GetWebResponse (req, async)): only call EndGetResponse. - -2003-06-14 Lluis Sanchez Gual - - * Methods.cs: Added information about headers in MethodStubInfo. Added cache of serializers - in TypeStubInfo so serializers for headers they can be shared by several methods. - * SoapClientMessage.cs: Headers added in the constructor. - * SoapMessage.cs: Added header list initialization. - * SoapHttpClientProtocol.cs: Added support soap headers. - -2003-06-13 Lluis Sanchez Gual - - * Methods.cs: Added serializer to MethodStubInfo for deserializing faults. - * SoapHttpClientProtocol.cs: Added support for faults. - -2003-06-10 Lluis Sanchez Gual - - * Methods.cs: removed handler for UnknownNode event - -2003-06-05 Lluis Sanchez Gual - - * Methods.cs: added support for encoded format - -2003-06-01 Miguel de Icaza - - * Methods.cs (MethodStubInfo): If creating an RPC call, pass an - optional XmlElementAttribute with the namespace set to null; Use - this on each element of the request and response serializers. - - (MakeRequestSerializer, MakeResponseSerializer): Use the empty - element for the return values. - - * SoapRpcMethodAttribute.cs: Drop the default name on the - SoapRpcMethodAttribute, it was incorrectly given a default name. - -2003-05-30 Miguel de Icaza - - * Methods.cs (MethodStubInfo): Start support for RPC style as well - as Literal style. Take an object instead of a - SoapDocumentMethodAttribute, and allow the value to be also a - SoapRpcMethodAttribute. Pull data from both. - - Kill SoapBindingUse, we only use this during validation. - - Turn out Google uses RPC/Literal, and its a good demo. - - (MakeResponseSerializer): OneWay is not the only - condition to catch; Also void return types are not required to - have a response. - - (MakeRequestSerializer): InParameters *might* be ref parameters, - deal with that here too. - - Add some debugging code for tracking down missing implementation - details in serialization creation. - - (MakeResponseSerializer): DUH. Use the - ResponseName/ResponseNamespace for the member import, not the - RequestName and RequestNamespace. The bugs of cut-and-paste. - -2003-05-29 Miguel de Icaza - - * SoapHttpClientProtocol.cs (CreateMessage): Kill. Move - functionality to Invoke. - - (Invoke): Use new TypeStubInfo/MethodStubInfo instead. - - * SoapClientMessage.cs: Drop old mechanism, use MethodStubInfo instead. - - * Methods.cs: New file. Contains the managed for TypeStubs and - MethodInfoStubs. - - A MethodInfoStub contains the serializers we use for the SOAP - request. - - * SoapClientMessage.cs: Drop parameters from the clientmessage, it - does not belong here. Drop oneway, we canextract that from the - SoapDocumentMethodAttribute class that we pass. - -2003-05-28 Miguel de Icaza - - * LogicalMethodInfo.cs (Create): Implement begin/end method - pairing. - (Name): Implement. - (EndMethodInfo): Always return end_method_info. - -2003-04-30 Miguel de Icaza - - * SoapHttpClientProtocol.cs: Flag the methods in the chain that - gets the caller method as non-inlineable. - -2003-04-29 Miguel de Icaza - - * SoapHttpClientProtocol.cs (CreateMessage): Extract information - from the method to be called. - - * SoapDocumentMethodAttribute.cs: Do not initialize all the fields - on the attribute at bootstrap, for default values, just compute - them when queried. - - * SoapMessage.cs (SetStage): New internal method, used to register - the stage as we move along the soap pipeline. - - * LogicalMethodInfo.cs: Most of this is implemented. Its only - missing a few bits in the Create() method. - - * SoapHttpClientProtocol.cs: Begin implementation of Invoke, which - lead to other dependencies to be implemented. - - * LogicalMethodInfo.cs: Mostly complete. It is only missing the - async features (BeginInvoke/EndInvoke) on a LogicalMethodInfo. - - * WebClientProtocol.cs (GetWebRequest): Track the web request, so - we can abort it later. - (Abort): Call abort on the underlying transport. - -2002-08-24 Tim Coleman - * HttpServerProtocol.cs: - * WebServiceHandler.cs: - Some commented code added, from analysing - an exception trace. - * MimeReturnWriter.cs: - * XmlReturnWriter.cs: - New stubs added. - -2002-08-23 Tim Coleman - * ServerProtocol.cs: - * SoapServerProtocol.cs: - More cleanup, comparison with class status. - * WebServiceHandler.cs: - * HttpServerProtocol.cs: - New stubs added. - -2002-08-15 Tim Coleman - * ServerProtocol.cs: - * SoapServerProtocol.cs: - Some more implementation. - -2002-08-06 Tim Coleman - * ServerProtocol.cs: - Add new class as implied by class statuc page. - SoapServerProtocol is derived from this. - * SoapServerProtocol.cs: - Change base class to ServerProtocol. Add some - properties shown by class status page. - * SoapClientMethod.cs: - This class should not be sealed. Add some - fields shown by the class status page. - -2002-07-25 Tim Coleman - * SoapClientMethod.cs: - * SoapServerProtocol.cs: - Add new internal classes as discovered. - * SoapClientMessage.cs: - * SoapMessage.cs: - * SoapServerMessage.cs: - * WebClientAsyncResult.cs: - Add internal constructor, as found on class - status page; modify some properties. - -2002-07-23 Tim Coleman - * SoapException.cs: modified constructors to - call base class correctly. - * WebClientAsyncResult: some implementation - -2002-07-23 Tim Coleman - * HttpGetClientProtocol.cs: - * HttpPostClientProtocol.cs - Implemented the GetWebRequest method - * HttpSimpleClientProtocol: - Some implementation of the EndInvoke method - * HttpWebClientProtocol.cs: - Set the UserAgent string appropriately - Implemented the GetWebRequest method - Implemented the GetWebResponse methods - * SoapHttpClientProtocol.cs: - Removed unused fields - Implemented the GetWebRequest method - * SoapMessage.cs: - Implemented the EnsureStage method - * WebClientProtocol.cs: - Added a static constructor to construct the cache - Implemented the Abort method - Implemented the AddToCache, GetFromCache methods - Implemented the GetWebRequest method - Implemented the GetWebResponse methods - -2002-07-23 Tim Coleman - * LogicalMethodTypes.cs: - * SoapHeaderDirection.cs: - * SoapMessageStage.cs: - * SoapParameterStyle.cs: - * SoapServiceRoutingStyle.cs: - Explicitly define values in enum to match - .NET. - * SoapMessage.cs: - Removed constructor which should not be present. - * SoapException.cs: - Made protected fields private as they should - be. - * SoapHeaderException.cs: - Modifications to constructors to propertly - call base class constructor - -2002-07-22 Tim Coleman - * SoapHeaderException.cs: - Fixed name error in constructor - * SoapUnknownHeader.cs: - Added reference to System.Xml.Serialization - -2002-07-22 Tim Coleman - * SoapHeaderException.cs: - New file added - -2002-07-22 Tim Coleman - * AnyReturnReader.cs: - * HtmlFormParameterReader.cs : - * HtmlFormParameterWriter.cs : - * HttpGetClientProtocol.cs : - * HttpMethodAttribute.cs : - * HttpPostClientProtocol.cs : - * HttpSimpleClientProtocol.cs : - * HttpWebClientProtocol.cs : - * LogicalMethodInfo.cs : - * LogicalMethodTypes.cs : - * MatchAttribute.cs : - * MimeFormatter.cs : - * MimeParameterReader.cs : - * MimeParameterWriter.cs : - * MimeReturnReader.cs : - * NopReturnReader.cs : - * PatternMatcher.cs : - * SoapClientMessage.cs : - * SoapDocumentMethodAttribute.cs : - * SoapDocumentServiceAttribute.cs : - * SoapException.cs : - * SoapExtension.cs : - * SoapExtensionAttribute.cs : - * SoapHeader.cs : - * SoapHeaderAttribute.cs : - * SoapHeaderCollection.cs : - * SoapHeaderDirection.cs : - * SoapHttpClientProtocol.cs : - * SoapMessage.cs : - * SoapMessageStage.cs : - * SoapParameterStyle.cs : - * SoapRpcMethodAttribute.cs : - * SoapRpcServiceAttribute.cs : - * SoapServerMessage.cs : - * SoapServiceRoutingStyle.cs : - * SoapUnknownHeader.cs : - * TextReturnReader.cs : - * UrlEncodedParameterWriter.cs : - * UrlParameterReader.cs : - * UrlParameterWriter.cs : - * ValueCollectionParameterReader.cs : - * WebClientAsyncResult.cs : - * WebClientProtocol.cs : - * WebServiceHandlerFactory.cs : - * XmlReturnReader.cs : - Add missing methods and attributes to make as few missing - things as possible in this namespace. This is from the - project status page. - -2002-07-20 Tim Coleman - * AnyReturnReader.cs: - * HtmlFormParameterReader.cs: - * HtmlFormParameterWriter.cs: - * HttpGetClientProtocol.cs: - * HttpMethodAttribute.cs: - * HttpPostClientProtocol.cs: - * HttpSimpleClientProtocol.cs: - * HttpWebClientProtocol.cs: - * MatchAttribute.cs: - * MimeFormatter.cs: - * MimeParameterReader.cs: - * MimeParameterWriter.cs: - * MimeReturnReader.cs: - * NopReturnReader.cs: - * PatternMatcher.cs: - * SoapClientMessage.cs: - * SoapDocumentMethodAttribute.cs: - * SoapDocumentServiceAttribute.cs: - * SoapException.cs: - * SoapExtensionAttribute.cs: - * SoapExtension.cs: - * SoapHeaderAttribute.cs: - * SoapHeaderCollection.cs: - * SoapHeader.cs: - * SoapHeaderDirection.cs: - * SoapHttpClientProtocol.cs: - * SoapMessage.cs: - * SoapMessageStage.cs: - * SoapParameterStyle.cs: - * SoapRpcMethodAttribute.cs: - * SoapRpcServiceAttribute.cs: - * SoapServerMessage.cs: - * SoapServiceRoutingStyle.cs: - * SoapUnknownHeader.cs: - * TextReturnReader.cs: - * UrlEncodedParameterWriter.cs: - * UrlParameterReader.cs: - * UrlParameterWriter.cs: - * ValueCollectionParameterReader.cs: - * WebClientAsyncResult.cs: - * WebClientProtocol.cs: - * WebServiceHandlerFactory.cs: - * XmlReturnReader.cs: - Added new stubbs and some implementation - * LogicalMethodTypes.cs: - Added [Serializable] attribute which was missing. - -2002-07-19 Tim Coleman - * ChangeLog: - * LogicalMethodInfo.cs: - * LogicalMethodTypes.cs: - Add required classes to maek System.Web.Services.Description - buildable. diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/Fault.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/Fault.cs deleted file mode 100644 index 18ce1bad750..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/Fault.cs +++ /dev/null @@ -1,233 +0,0 @@ -// -// System.Web.Services.Protocols.Fault.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) 2004 Novell, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Xml; -using System.Xml.Schema; -using System.Xml.Serialization; -using System.Text; -using System.Collections; -using System.Globalization; - -namespace System.Web.Services.Protocols -{ - internal class Fault - { - static XmlSerializer serializer; - - static Fault () - { - serializer = new FaultSerializer (); - } - - public Fault () {} - - public Fault (SoapException ex) - { - faultcode = ex.Code; - faultstring = ex.Message; - faultactor = ex.Actor; - detail = ex.Detail; - } - - [XmlElement (Namespace="")] - public XmlQualifiedName faultcode; - - [XmlElement (Namespace="")] - public string faultstring; - - [XmlElement (Namespace="")] - public string faultactor; - - [SoapIgnore] - public XmlNode detail; - - public static XmlSerializer Serializer - { - get { return serializer; } - } - } - - internal class FaultSerializer : XmlSerializer - { - protected override void Serialize (object o, XmlSerializationWriter writer) - { - FaultWriter xsWriter = writer as FaultWriter; - xsWriter.WriteRoot_Fault (o); - } - - protected override object Deserialize (XmlSerializationReader reader) - { - FaultReader xsReader = reader as FaultReader; - return xsReader.ReadRoot_Fault (); - } - - protected override XmlSerializationWriter CreateWriter () - { - return new FaultWriter (); - } - - protected override XmlSerializationReader CreateReader () - { - return new FaultReader (); - } - } - - internal class FaultReader : XmlSerializationReader - { - public object ReadRoot_Fault () - { - Reader.MoveToContent(); - if (Reader.LocalName != "Fault" || Reader.NamespaceURI != "http://schemas.xmlsoap.org/soap/envelope/") - throw CreateUnknownNodeException(); - return ReadObject_Fault (true, true); - } - - public System.Web.Services.Protocols.Fault ReadObject_Fault (bool isNullable, bool checkType) - { - System.Web.Services.Protocols.Fault ob = null; - if (isNullable && ReadNull()) return null; - - if (checkType) - { - System.Xml.XmlQualifiedName t = GetXsiType(); - if (t != null) - { - if (t.Name != "Fault" || t.Namespace != "http://schemas.xmlsoap.org/soap/envelope/") - throw CreateUnknownTypeException(t); - } - } - - ob = new System.Web.Services.Protocols.Fault (); - - Reader.MoveToElement(); - - while (Reader.MoveToNextAttribute()) - { - if (IsXmlnsAttribute (Reader.Name)) { - } - else { - UnknownNode (ob); - } - } - - Reader.MoveToElement(); - if (Reader.IsEmptyElement) { - Reader.Skip (); - return ob; - } - - Reader.ReadStartElement(); - Reader.MoveToContent(); - - bool b0=false, b1=false, b2=false, b3=false; - - while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) - { - if (Reader.NodeType == System.Xml.XmlNodeType.Element) - { - if (Reader.LocalName == "faultcode" && Reader.NamespaceURI == "" && !b0) { - b0 = true; - ob.@faultcode = ReadElementQualifiedName (); - } - else if (Reader.LocalName == "faultstring" && Reader.NamespaceURI == "" && !b1) { - b1 = true; - ob.@faultstring = Reader.ReadElementString (); - } - else if (Reader.LocalName == "detail" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/soap/envelope/" && !b3) { - b3 = true; - ob.@detail = ReadXmlNode (true); - } - else if (Reader.LocalName == "faultactor" && Reader.NamespaceURI == "" && !b2) { - b2 = true; - ob.@faultactor = Reader.ReadElementString (); - } - else { - UnknownNode (ob); - } - } - else - UnknownNode(ob); - - Reader.MoveToContent(); - } - - ReadEndElement(); - - return ob; - } - - protected override void InitCallbacks () - { - } - - protected override void InitIDs () - { - } - } - - internal class FaultWriter : XmlSerializationWriter - { - public void WriteRoot_Fault (object o) - { - WriteStartDocument (); - System.Web.Services.Protocols.Fault ob = (System.Web.Services.Protocols.Fault) o; - TopLevelElement (); - WriteObject_Fault (ob, "Fault", "http://schemas.xmlsoap.org/soap/envelope/", true, false, true); - } - - void WriteObject_Fault (System.Web.Services.Protocols.Fault ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem) - { - if (ob == null) - { - if (isNullable) - WriteNullTagLiteral(element, namesp); - return; - } - - if (writeWrappingElem) { - WriteStartElement (element, namesp, ob); - } - - if (needType) WriteXsiType("Fault", "http://schemas.xmlsoap.org/soap/envelope/"); - - WriteElementQualifiedName ("faultcode", "", ob.@faultcode); - WriteElementString ("faultstring", "", ob.@faultstring); - WriteElementString ("faultactor", "", ob.@faultactor); - WriteElementLiteral (ob.@detail, "detail", "http://schemas.xmlsoap.org/soap/envelope/", false, false); - if (writeWrappingElem) WriteEndElement (ob); - } - - protected override void InitCallbacks () - { - } - } -} - diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HtmlFormParameterReader.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/HtmlFormParameterReader.cs deleted file mode 100644 index 6237639a0da..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HtmlFormParameterReader.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -// System.Web.Services.Protocols.HtmlFormParameterReader.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public class HtmlFormParameterReader : ValueCollectionParameterReader { - - #region Constructors - - public HtmlFormParameterReader () - { - } - - #endregion // Constructors - - #region Methods - - public override object[] Read (HttpRequest request) - { - return Read (request.Form); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HtmlFormParameterWriter.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/HtmlFormParameterWriter.cs deleted file mode 100644 index 5d28e7d858a..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HtmlFormParameterWriter.cs +++ /dev/null @@ -1,71 +0,0 @@ -// -// System.Web.Services.Protocols.HtmlFormParameterWriter.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Net; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public class HtmlFormParameterWriter : UrlEncodedParameterWriter { - - #region Constructors - - public HtmlFormParameterWriter () - { - } - - #endregion // Constructors - - #region Properties - - public override bool UsesWriteRequest { - get { return true; } - } - - #endregion // Properties - - #region Methods - - public override void InitializeRequest (WebRequest request, object[] values) - { - if (RequestEncoding == null) request.ContentType = "application/x-www-form-urlencoded"; - else request.ContentType = "application/x-www-form-urlencoded; charset=" + RequestEncoding.BodyName; - } - - public override void WriteRequest (Stream requestStream, object[] values) - { - StreamWriter sw = new StreamWriter (requestStream); - Encode (sw, values); - sw.Flush (); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpGetClientProtocol.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpGetClientProtocol.cs deleted file mode 100644 index 7b7ecb90289..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpGetClientProtocol.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -// System.Web.Services.Protocols.HttpGetClientProtocol.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Net; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public class HttpGetClientProtocol : HttpSimpleClientProtocol { - - #region Constructors - - public HttpGetClientProtocol () - { - TypeStub = (HttpSimpleTypeStubInfo) TypeStubManager.GetTypeStub (GetType(), "HttpGet"); - } - - #endregion // Constructors - - #region Methods - - protected override WebRequest GetWebRequest (Uri uri) - { - if (uri == null) - throw new InvalidOperationException ("The uri parameter is null."); - if (uri.ToString () == String.Empty) - throw new InvalidOperationException ("The uri parameter has a length of zero."); - - WebRequest request = WebRequest.Create (uri); - request.Method = "GET"; - return request; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpGetTypeStubInfo.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpGetTypeStubInfo.cs deleted file mode 100644 index 8a411b44f71..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpGetTypeStubInfo.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -// HttpGetTypeStubInfo.cs: Information about a method and its mapping to a SOAP web service. -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols -{ - internal class HttpGetMethodStubInfo : HttpSimpleMethodStubInfo - { - public HttpGetMethodStubInfo (TypeStubInfo parent, LogicalMethodInfo source): base (parent, source) - { - ParameterReaderType = new MimeFormatterInfo (typeof(UrlParameterReader)); - ReturnWriterType = new MimeFormatterInfo (typeof(XmlReturnWriter)); - - if (ParameterWriterType == null) ParameterWriterType = new MimeFormatterInfo (typeof(UrlParameterWriter)); - } - } - - internal class HttpGetTypeStubInfo : HttpSimpleTypeStubInfo - { - public HttpGetTypeStubInfo (LogicalTypeInfo logicalTypeInfo): base (logicalTypeInfo) - { - } - - public override string ProtocolName - { - get { return "HttpGet"; } - } - - protected override MethodStubInfo CreateMethodStubInfo (TypeStubInfo typeInfo, LogicalMethodInfo methodInfo, bool isClientProxy) - { - if (isClientProxy && methodInfo.MethodInfo.GetCustomAttributes (typeof(HttpMethodAttribute),true).Length == 0) return null; - if (!ValueCollectionParameterReader.IsSupported (methodInfo)) return null; - return new HttpGetMethodStubInfo (typeInfo, methodInfo); - } - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpMethodAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpMethodAttribute.cs deleted file mode 100644 index 54b13ae0cd4..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpMethodAttribute.cs +++ /dev/null @@ -1,71 +0,0 @@ -// -// System.Web.Services.Protocols.HttpMethodAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols { - [AttributeUsage (AttributeTargets.Method, Inherited = true)] - public sealed class HttpMethodAttribute : Attribute { - - #region Fields - - Type parameterFormatter; - Type returnFormatter; - - #endregion - - #region Constructors - - public HttpMethodAttribute () - { - } - - public HttpMethodAttribute (Type returnFormatter, Type parameterFormatter) - : this () - { - this.parameterFormatter = parameterFormatter; - this.returnFormatter = returnFormatter; - } - - #endregion // Constructors - - #region Properties - - public Type ParameterFormatter { - get { return parameterFormatter; } - set { parameterFormatter = value; } - } - - public Type ReturnFormatter { - get { return returnFormatter; } - set { returnFormatter = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpPostClientProtocol.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpPostClientProtocol.cs deleted file mode 100644 index d924b15212a..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpPostClientProtocol.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -// System.Web.Services.Protocols.HttpPostClientProtocol.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Net; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public class HttpPostClientProtocol : HttpSimpleClientProtocol { - - #region Constructors - - public HttpPostClientProtocol () - { - TypeStub = (HttpSimpleTypeStubInfo) TypeStubManager.GetTypeStub (GetType(), "HttpPost"); - } - - #endregion // Constructors - - #region Methods - - protected override WebRequest GetWebRequest (Uri uri) - { - if (null == uri) - throw new InvalidOperationException ("The uri parameter is a null reference."); - if (String.Empty == uri.ToString ()) - throw new InvalidOperationException ("The uri parameter has a length of zero."); - - WebRequest request = WebRequest.Create (uri); - request.Method = "POST"; - return request; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpPostTypeStubInfo.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpPostTypeStubInfo.cs deleted file mode 100644 index a66a12c99e5..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpPostTypeStubInfo.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -// HttpPostTypeStubInfo.cs: Information about a method and its mapping to a SOAP web service. -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols -{ - internal class HttpPostMethodStubInfo : HttpSimpleMethodStubInfo - { - public HttpPostMethodStubInfo (TypeStubInfo parent, LogicalMethodInfo source): base (parent, source) - { - ParameterReaderType = new MimeFormatterInfo (typeof(HtmlFormParameterReader)); - ReturnWriterType = new MimeFormatterInfo (typeof(XmlReturnWriter)); - - if (ParameterWriterType == null) ParameterWriterType = new MimeFormatterInfo (typeof(HtmlFormParameterWriter)); - } - } - - internal class HttpPostTypeStubInfo : HttpSimpleTypeStubInfo - { - public HttpPostTypeStubInfo (LogicalTypeInfo logicalTypeInfo): base (logicalTypeInfo) - { - } - - public override string ProtocolName - { - get { return "HttpPost"; } - } - - protected override MethodStubInfo CreateMethodStubInfo (TypeStubInfo typeInfo, LogicalMethodInfo methodInfo, bool isClientProxy) - { - if (isClientProxy && methodInfo.MethodInfo.GetCustomAttributes (typeof(HttpMethodAttribute),true).Length == 0) return null; - if (!ValueCollectionParameterReader.IsSupported (methodInfo)) return null; - return new HttpPostMethodStubInfo (typeInfo, methodInfo); - } - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpServerProtocol.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpServerProtocol.cs deleted file mode 100644 index 92e92979699..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpServerProtocol.cs +++ /dev/null @@ -1,97 +0,0 @@ -// -// System.Web.Services.Protocols.HttpServerProtocol.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - [MonoTODO ("Figure out what this class does.")] - internal abstract class HttpServerProtocol : ServerProtocol { - - #region Constructors - - [MonoTODO ("Is the bool parameter the one way?")] - protected HttpServerProtocol (bool isOneWay) - { - throw new NotImplementedException (); - } - - #endregion // Constructors - - #region Properties - - [MonoTODO] - public override bool IsOneWay { - get { throw new NotImplementedException (); } - } - - [MonoTODO] - public override LogicalMethodInfo MethodInfo { - get { throw new NotImplementedException (); } - } - - #endregion // Properties - - #region Methods - - [MonoTODO] - public static bool AreUrlParametersSupported (LogicalMethodInfo methodInfo) - { - throw new NotImplementedException (); - } - - [MonoTODO] - public override bool Initialize () - { - throw new NotImplementedException (); - } - - [MonoTODO] - public override object[] ReadParameters () - { - throw new NotImplementedException (); - } - - [MonoTODO] - public override bool WriteException (Exception e, Stream outputStream) - { - throw new NotImplementedException (); - } - - [MonoTODO] - public override void WriteReturns (object[] returnValues, Stream outputStream) - { - //xmlReturnWriter.Write (Response, outputStream, returnValue); - throw new NotImplementedException (); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSimpleClientProtocol.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSimpleClientProtocol.cs deleted file mode 100644 index 96f275a4bdb..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSimpleClientProtocol.cs +++ /dev/null @@ -1,214 +0,0 @@ -// -// System.Web.Services.Protocols.HttpSimpleClientProtocol.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Net; -using System.IO; -using System.Threading; - -namespace System.Web.Services.Protocols { - public abstract class HttpSimpleClientProtocol : HttpWebClientProtocol { - - #region Fields - - internal HttpSimpleTypeStubInfo TypeStub; - - #endregion // Fields - - #region Constructors - - protected HttpSimpleClientProtocol () - { - } - - #endregion // Constructors - - #region Methods - - protected IAsyncResult BeginInvoke (string methodName, string requestUrl, object[] parameters, AsyncCallback callback, object asyncState) - { - HttpSimpleMethodStubInfo method = (HttpSimpleMethodStubInfo) TypeStub.GetMethod (methodName); - SimpleWebClientAsyncResult ainfo = null; - - try - { - MimeParameterWriter parameterWriter = (MimeParameterWriter) method.ParameterWriterType.Create (); - string url = parameterWriter.GetRequestUrl (requestUrl, parameters); - WebRequest req = GetWebRequest (new Uri(url)); - - ainfo = new SimpleWebClientAsyncResult (req, callback, asyncState); - ainfo.Parameters = parameters; - ainfo.ParameterWriter = parameterWriter; - ainfo.Method = method; - - ainfo.Request = req; - ainfo.Request.BeginGetRequestStream (new AsyncCallback (AsyncGetRequestStreamDone), ainfo); - } - catch (Exception ex) - { - if (ainfo != null) - ainfo.SetCompleted (null, ex, false); - else - throw ex; - } - - return ainfo; - - } - - void AsyncGetRequestStreamDone (IAsyncResult ar) - { - SimpleWebClientAsyncResult ainfo = (SimpleWebClientAsyncResult) ar.AsyncState; - try - { - if (ainfo.ParameterWriter.UsesWriteRequest) - { - Stream stream = ainfo.Request.GetRequestStream (); - ainfo.ParameterWriter.WriteRequest (stream, ainfo.Parameters); - stream.Close (); - } - - ainfo.Request.BeginGetResponse (new AsyncCallback (AsyncGetResponseDone), ainfo); - } - catch (Exception ex) - { - ainfo.SetCompleted (null, ex, true); - } - } - - void AsyncGetResponseDone (IAsyncResult ar) - { - SimpleWebClientAsyncResult ainfo = (SimpleWebClientAsyncResult) ar.AsyncState; - WebResponse response = null; - - try { - response = GetWebResponse (ainfo.Request, ar); - } - catch (WebException ex) { - response = ex.Response; - HttpWebResponse http_response = response as HttpWebResponse; - if (http_response == null || http_response.StatusCode != HttpStatusCode.InternalServerError) { - ainfo.SetCompleted (null, ex, true); - return; - } - } - catch (Exception ex) { - ainfo.SetCompleted (null, ex, true); - return; - } - - try { - MimeReturnReader returnReader = (MimeReturnReader) ainfo.Method.ReturnReaderType.Create (); - object result = returnReader.Read (response, response.GetResponseStream ()); - ainfo.SetCompleted (result, null, true); - } - catch (Exception ex) { - ainfo.SetCompleted (null, ex, true); - } - } - - - protected object EndInvoke (IAsyncResult asyncResult) - { - if (!(asyncResult is SimpleWebClientAsyncResult)) throw new ArgumentException ("asyncResult is not the return value from BeginInvoke"); - - SimpleWebClientAsyncResult ainfo = (SimpleWebClientAsyncResult) asyncResult; - lock (ainfo) - { - if (!ainfo.IsCompleted) ainfo.WaitForComplete (); - if (ainfo.Exception != null) throw ainfo.Exception; - else return ainfo.Result; - } - } - - protected object Invoke (string methodName, string requestUrl, object[] parameters) - { - HttpSimpleMethodStubInfo method = (HttpSimpleMethodStubInfo) TypeStub.GetMethod (methodName); - MimeParameterWriter parameterWriter = (MimeParameterWriter) method.ParameterWriterType.Create (); - - string url = parameterWriter.GetRequestUrl (requestUrl, parameters); - WebRequest request = GetWebRequest (new Uri(url, true)); - - parameterWriter.InitializeRequest (request, parameters); - - if (parameterWriter.UsesWriteRequest) - { - Stream stream = request.GetRequestStream (); - parameterWriter.WriteRequest (stream, parameters); - stream.Close (); - } - - WebResponse response = GetWebResponse (request); - - MimeReturnReader returnReader = (MimeReturnReader) method.ReturnReaderType.Create (); - return returnReader.Read (response, response.GetResponseStream ()); - } - -#if NET_2_0 - - protected void InvokeAsync (string methodName, string requestUrl, object[] parameters, SendOrPostCallback callback) - { - InvokeAsync (methodName, requestUrl, parameters, callback, null); - } - - protected void InvokeAsync (string methodName, string requestUrl, object[] parameters, SendOrPostCallback callback, object userState) - { - InvokeAsyncInfo info = new InvokeAsyncInfo (callback, userState); - BeginInvoke (methodName, requestUrl, parameters, new AsyncCallback (InvokeAsyncCallback), info); - } - - void InvokeAsyncCallback (IAsyncResult ar) - { - InvokeAsyncInfo info = (InvokeAsyncInfo) ar.AsyncState; - SimpleWebClientAsyncResult sar = (SimpleWebClientAsyncResult) ar; - InvokeCompletedEventArgs args = new InvokeCompletedEventArgs (sar.Exception, false, info.UserState, (object[]) sar.Result); - if (info.Context != null) - info.Context.SendOrPost (info.Callback, args); - else - info.Callback (args); - } -#endif - - #endregion // Methods - } - - internal class SimpleWebClientAsyncResult : WebClientAsyncResult - { - public SimpleWebClientAsyncResult (WebRequest request, AsyncCallback callback, object asyncState) - : base (request, callback, asyncState) - { - } - - public object[] Parameters; - public HttpSimpleMethodStubInfo Method; - public MimeParameterWriter ParameterWriter; - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSimpleTypeStubInfo.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSimpleTypeStubInfo.cs deleted file mode 100644 index 8dc1125601b..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/HttpSimpleTypeStubInfo.cs +++ /dev/null @@ -1,152 +0,0 @@ -// -// HttpSimpleMethodStubInfo.cs: Information about a method and its mapping to a SOAP web service. -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Reflection; -using System.Collections; -using System.Xml; -using System.Xml.Serialization; -using System.Web.Services; -using System.Web.Services.Description; - -namespace System.Web.Services.Protocols -{ - enum FormatterKind - { - ParameterWriter, - ParameterReader, - ReturnReader, - ReturnWriter - } - - internal class HttpSimpleMethodStubInfo : MethodStubInfo - { - public MimeFormatterInfo ParameterWriterType; - public MimeFormatterInfo ParameterReaderType; - public MimeFormatterInfo ReturnReaderType; - public MimeFormatterInfo ReturnWriterType; - - public MimeFormatterInfo GetFormatterInfo (FormatterKind kind) - { - switch (kind) - { - case FormatterKind.ParameterWriter: return ParameterWriterType; - case FormatterKind.ParameterReader: return ParameterReaderType; - case FormatterKind.ReturnReader: return ReturnReaderType; - case FormatterKind.ReturnWriter: return ReturnWriterType; - } - return null; - } - - public HttpSimpleMethodStubInfo (TypeStubInfo parent, LogicalMethodInfo source): base (parent, source) - { - object[] atts = source.CustomAttributeProvider.GetCustomAttributes (typeof(HttpMethodAttribute), true); - if (atts.Length > 0) - { - HttpMethodAttribute at = (HttpMethodAttribute) atts[0]; - ParameterWriterType = new MimeFormatterInfo (at.ParameterFormatter); - ReturnReaderType = new MimeFormatterInfo (at.ReturnFormatter); - } - - if (ReturnReaderType == null) { - if (source.IsVoid) ReturnReaderType = new MimeFormatterInfo (typeof(NopReturnReader)); - else ReturnReaderType = new MimeFormatterInfo (typeof(XmlReturnReader)); - } - } - } - - internal class MimeFormatterInfo - { - public MimeFormatterInfo (Type type) { - Type = type; - } - - public MimeFormatter Create () { - return MimeFormatter.CreateInstance (Type, Initializer); - } - - public Type Type; - public object Initializer; - } - - internal class HttpSimpleTypeStubInfo : TypeStubInfo - { - public HttpSimpleTypeStubInfo (LogicalTypeInfo logicalTypeInfo): base (logicalTypeInfo) - { - } - - protected override void BuildTypeMethods () - { - base.BuildTypeMethods (); - - BuildInitializers (FormatterKind.ParameterWriter); - BuildInitializers (FormatterKind.ParameterReader); - BuildInitializers (FormatterKind.ReturnReader); - BuildInitializers (FormatterKind.ReturnWriter); - } - - void BuildInitializers (FormatterKind formatter) - { - Hashtable types = new Hashtable (); - - foreach (HttpSimpleMethodStubInfo met in Methods) - AddType (types, met.GetFormatterInfo (formatter).Type, met); - - foreach (DictionaryEntry ent in types) - { - Type t = (Type)ent.Key; - ArrayList list = (ArrayList)ent.Value; - LogicalMethodInfo[] mets = new LogicalMethodInfo [list.Count]; - for (int n=0; n 0) - mstream.Write (buffer, 0, len); - mstream.Position = 0; - buffer = mstream.ToArray (); - } - - soapAction = ReadActionFromRequestElement (new MemoryStream (buffer), encoding); - - stream = mstream; - methodInfo = (SoapMethodStubInfo) _typeStubInfo.GetMethod (soapAction); - message.MethodStubInfo = methodInfo; - } - - // Whatever routing style we used, we should now have the method information. - // We can now notify the remaining extensions - - if (methodInfo == null) throw new SoapException ("Method '" + soapAction + "' not defined in the web service '" + _typeStubInfo.LogicalType.WebServiceName + "'", SoapException.ClientFaultCode); - - _extensionChainMedPrio = SoapExtension.CreateExtensionChain (methodInfo.SoapExtensions); - _extensionChainLowPrio = SoapExtension.CreateExtensionChain (_typeStubInfo.SoapExtensions[1]); - - stream = SoapExtension.ExecuteChainStream (_extensionChainMedPrio, stream); - stream = SoapExtension.ExecuteChainStream (_extensionChainLowPrio, stream); - SoapExtension.ExecuteProcessMessage (_extensionChainMedPrio, message, false); - SoapExtension.ExecuteProcessMessage (_extensionChainLowPrio, message, false); - - // Deserialize the request - - StreamReader reader = new StreamReader (stream, encoding, false); - XmlTextReader xmlReader = new XmlTextReader (reader); - - try - { - object content; - SoapHeaderCollection headers; - WebServiceHelper.ReadSoapMessage (xmlReader, _typeStubInfo, methodInfo.Use, methodInfo.RequestSerializer, out content, out headers); - message.InParameters = (object []) content; - message.SetHeaders (headers); - } - catch (Exception ex) - { - throw new SoapException ("Could not deserialize Soap message", SoapException.ClientFaultCode, ex); - } - - // Notify the extensions after deserialization - - message.SetStage (SoapMessageStage.AfterDeserialize); - SoapExtension.ExecuteProcessMessage (_extensionChainHighPrio, message, false); - SoapExtension.ExecuteProcessMessage (_extensionChainMedPrio, message, false); - SoapExtension.ExecuteProcessMessage (_extensionChainLowPrio, message, false); - - xmlReader.Close (); - - return message; - } - } - - string ReadActionFromRequestElement (Stream stream, Encoding encoding) - { - try - { - StreamReader reader = new StreamReader (stream, encoding, false); - XmlTextReader xmlReader = new XmlTextReader (reader); - - xmlReader.MoveToContent (); - xmlReader.ReadStartElement ("Envelope", WebServiceHelper.SoapEnvelopeNamespace); - - while (! (xmlReader.NodeType == XmlNodeType.Element && xmlReader.LocalName == "Body" && xmlReader.NamespaceURI == WebServiceHelper.SoapEnvelopeNamespace)) - xmlReader.Skip (); - - xmlReader.ReadStartElement ("Body", WebServiceHelper.SoapEnvelopeNamespace); - xmlReader.MoveToContent (); - - return xmlReader.LocalName; - } - catch (Exception ex) - { - string errmsg = "The root element for the request could not be determined. "; - errmsg += "When RoutingStyle is set to RequestElement, SoapExtensions configured "; - errmsg += "via an attribute on the method cannot modify the request stream before it is read. "; - errmsg += "The extension must be configured via the SoapExtensionTypes element in web.config "; - errmsg += "or the request must arrive at the server as clear text."; - throw new SoapException (errmsg, SoapException.ServerFaultCode, ex); - } - } - - void SerializeResponse (HttpResponse response, SoapServerMessage message) - { - SoapMethodStubInfo methodInfo = message.MethodStubInfo; - - response.ContentType = "text/xml; charset=utf-8"; - if (message.Exception != null) response.StatusCode = 500; - - long contentLength = 0; - Stream outStream = null; - MemoryStream bufferStream = null; - Stream responseStream = response.OutputStream; - bool bufferResponse = (methodInfo == null || methodInfo.MethodAttribute.BufferResponse); - - if (bufferResponse) - { - bufferStream = new MemoryStream (); - outStream = bufferStream; - } - else - outStream = responseStream; - - try - { - // While serializing, process extensions in reverse order - - if (bufferResponse) - { - outStream = SoapExtension.ExecuteChainStream (_extensionChainHighPrio, outStream); - outStream = SoapExtension.ExecuteChainStream (_extensionChainMedPrio, outStream); - outStream = SoapExtension.ExecuteChainStream (_extensionChainLowPrio, outStream); - - message.SetStage (SoapMessageStage.BeforeSerialize); - SoapExtension.ExecuteProcessMessage (_extensionChainLowPrio, message, true); - SoapExtension.ExecuteProcessMessage (_extensionChainMedPrio, message, true); - SoapExtension.ExecuteProcessMessage (_extensionChainHighPrio, message, true); - } - - XmlTextWriter xtw = WebServiceHelper.CreateXmlWriter (outStream); - - if (message.Exception == null) - WebServiceHelper.WriteSoapMessage (xtw, _typeStubInfo, methodInfo.Use, methodInfo.ResponseSerializer, message.OutParameters, message.Headers); - else - WebServiceHelper.WriteSoapMessage (xtw, _typeStubInfo, SoapBindingUse.Literal, Fault.Serializer, new Fault (message.Exception), null); - - if (bufferResponse) - { - message.SetStage (SoapMessageStage.AfterSerialize); - SoapExtension.ExecuteProcessMessage (_extensionChainLowPrio, message, true); - SoapExtension.ExecuteProcessMessage (_extensionChainMedPrio, message, true); - SoapExtension.ExecuteProcessMessage (_extensionChainHighPrio, message, true); - } - - if (bufferStream != null) contentLength = bufferStream.Length; - xtw.Close (); - } - catch (Exception ex) - { - // If the response is buffered, we can discard the response and - // serialize a new Fault message as response. - if (bufferResponse) throw ex; - - // If it is not buffered, we can't rollback what has been sent, - // so we can only close the connection and return. - responseStream.Close (); - return; - } - - try - { - if (bufferResponse) - responseStream.Write (bufferStream.GetBuffer(), 0, (int) contentLength); - } - catch {} - - responseStream.Close (); - } - - void SerializeFault (HttpContext context, SoapServerMessage requestMessage, Exception ex) - { - SoapException soex = ex as SoapException; - if (soex == null) soex = new SoapException (ex.Message, SoapException.ServerFaultCode, ex); - - SoapServerMessage faultMessage; - if (requestMessage != null) - faultMessage = new SoapServerMessage (context.Request, soex, requestMessage.MethodStubInfo, requestMessage.Server, requestMessage.Stream); - else - faultMessage = new SoapServerMessage (context.Request, soex, null, null, null); - - SerializeResponse (context.Response, faultMessage); - context.Response.End (); - return; - } - - private SoapServerMessage Invoke (HttpContext ctx, SoapServerMessage requestMessage) - { - SoapMethodStubInfo methodInfo = requestMessage.MethodStubInfo; - - // Assign header values to web service members - - requestMessage.UpdateHeaderValues (requestMessage.Server, methodInfo.Headers); - - // Fill an array with the input parameters at the right position - - object[] parameters = new object[methodInfo.MethodInfo.Parameters.Length]; - ParameterInfo[] inParams = methodInfo.MethodInfo.InParameters; - for (int n=0; n 0) - values.CopyTo (pars, 0); - - pars [len] = callback; - pars [len+1] = asyncState; - - return (IAsyncResult) method_info.Invoke (target, pars); - } - - public static LogicalMethodInfo[] Create (MethodInfo[] method_infos) - { - return Create (method_infos, LogicalMethodTypes.Sync | LogicalMethodTypes.Async); - } - - public static LogicalMethodInfo[] Create (MethodInfo[] method_infos, LogicalMethodTypes types) - { - ArrayList sync = ((types & LogicalMethodTypes.Sync) != 0) ? new ArrayList () : null; - ArrayList begin, end; - - if ((types & LogicalMethodTypes.Async) != 0){ - begin = new ArrayList (); - end = new ArrayList (); - } else - begin = end = null; - - foreach (MethodInfo mi in method_infos){ - if (IsBeginMethod (mi) && begin != null) - begin.Add (mi); - else if (IsEndMethod (mi) && end != null) - end.Add (mi); - else if (sync != null) - sync.Add (mi); - } - - int bcount = 0, count = 0; - if (begin != null){ - bcount = count = begin.Count; - if (count != end.Count) - throw new InvalidOperationException ("Imbalance of begin/end methods"); - } - if (sync != null) - count += sync.Count; - - LogicalMethodInfo [] res = new LogicalMethodInfo [count]; - int dest = 0; - if (begin != null){ - foreach (MethodInfo bm in begin){ - string end_name = "End" + bm.Name.Substring (5); - - for (int i = 0; i < bcount; i++){ - MethodInfo em = (MethodInfo) end [i]; - if (em.Name == end_name){ - res [dest++] = new LogicalMethodInfo (bm, em); - break; - } - throw new InvalidOperationException ("Imbalance of begin/end methods"); - } - } - } - - - if (sync != null) - foreach (MethodInfo mi in sync){ - res [dest++] = new LogicalMethodInfo (mi); - } - - return res; - } - - public object[] EndInvoke (object target, IAsyncResult asyncResult) - { - if (parameters == null) - ComputeParameters (); - - object[] values = new object [out_parameters.Length + 1]; - values [values.Length - 1] = asyncResult; - object res = end_method_info.Invoke (target, values); - - int retc = IsVoid ? 0 : 1; - object [] ret = new object [retc + out_parameters.Length]; - - if (retc == 1) ret [0] = res; - - Array.Copy (values, 0, ret, retc, out_parameters.Length); - return ret; - } - - public object GetCustomAttribute (Type type) - { - return Attribute.GetCustomAttribute (method_info, type, true); - } - - public object[] GetCustomAttributes (Type type) - { - return method_info.GetCustomAttributes (type, true); - } - - public object[] Invoke (object target, object[] values) - { - if (parameters == null) - ComputeParameters (); - - int retc = IsVoid ? 0 : 1; - object [] ret = new object [retc + out_parameters.Length]; - object res = method_info.Invoke (target, values); - if (retc == 1) ret [0] = res; - - int j = retc; - for (int i = 0; i < parameters.Length; i++){ - if (parameters [i].ParameterType.IsByRef) - ret [j++] = values [i]; - } - - return ret; - } - - public static bool IsBeginMethod (MethodInfo method_info) - { - if (method_info == null) - throw new ArgumentNullException ("method_info can not be null"); - - if (method_info.ReturnType != typeof (IAsyncResult)) - return false; - - if (method_info.Name.StartsWith ("Begin")) - return true; - - return false; - } - - public static bool IsEndMethod (MethodInfo method_info) - { - if (method_info == null) - throw new ArgumentNullException ("method_info can not be null"); - - ParameterInfo [] parameter_info = method_info.GetParameters (); - if (parameter_info.Length != 1) - return false; - if (parameter_info [0].ParameterType != typeof (IAsyncResult)) - return false; - if (method_info.Name.StartsWith ("End")) - return true; - - return false; - } - - public override string ToString () - { - StringBuilder sb = new StringBuilder (); - if (parameters == null) - ComputeParameters (); - - for (int i = 0; i < parameters.Length; i++){ - sb.Append (parameters [i].ParameterType); - if (parameters [i].ParameterType.IsByRef) - sb.Append (" ByRef"); - - if (i+1 != parameters.Length) - sb.Append (", "); - } - - return String.Format ( - "{0} {1} ({2})", - method_info.ReturnType, method_info.Name, - sb.ToString ()); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/LogicalMethodTypes.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/LogicalMethodTypes.cs deleted file mode 100644 index b61bfa12641..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/LogicalMethodTypes.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.Services.Protocols.LogicalMethodTypes.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols { - [Serializable] - public enum LogicalMethodTypes { - Async = 0x2, - Sync = 0x1 - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/MatchAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/MatchAttribute.cs deleted file mode 100644 index b7fa1ca09d1..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/MatchAttribute.cs +++ /dev/null @@ -1,86 +0,0 @@ -// -// System.Web.Services.Protocols.MatchAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols { - [AttributeUsage (AttributeTargets.All, Inherited = true)] - public sealed class MatchAttribute : Attribute { - - #region Fields - - int capture; - int group; - bool ignoreCase; - int maxRepeats; - string pattern; - - #endregion - - #region Constructors - - public MatchAttribute (string pattern) - { - ignoreCase = false; - maxRepeats = -1; - this.pattern = pattern; - group = 1; - } - - #endregion // Constructors - - #region Properties - - public int Capture { - get { return capture; } - set { capture = value; } - } - - public int Group { - get { return group; } - set { group = value; } - } - - public bool IgnoreCase { - get { return ignoreCase; } - set { ignoreCase = value; } - } - - public int MaxRepeats { - get { return maxRepeats; } - set { maxRepeats = value; } - } - - public string Pattern { - get { return pattern; } - set { pattern = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/Methods.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/Methods.cs deleted file mode 100644 index 0bd7140545b..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/Methods.cs +++ /dev/null @@ -1,512 +0,0 @@ -// -// Methods.cs: Information about a method and its mapping to a SOAP web service. -// -// Author: -// Miguel de Icaza -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Reflection; -using System.Collections; -using System.Xml; -using System.Xml.Serialization; -using System.Web.Services; -using System.Web.Services.Description; - -namespace System.Web.Services.Protocols { - - // - // This class represents all the information we extract from a MethodInfo - // in the SoapHttpClientProtocol derivative stub class - // - internal class SoapMethodStubInfo : MethodStubInfo - { - internal string Action; - internal string Binding; - - // The name/namespace of the request - internal string RequestName; - internal string RequestNamespace; - - // The name/namespace of the response. - internal string ResponseName; - internal string ResponseNamespace; - - internal bool OneWay; - internal SoapParameterStyle ParameterStyle; - internal SoapBindingStyle SoapBindingStyle; - internal SoapBindingUse Use; - - internal HeaderInfo[] Headers; - internal SoapExtensionRuntimeConfig[] SoapExtensions; - - internal XmlMembersMapping InputMembersMapping; - internal XmlMembersMapping OutputMembersMapping; - - private int requestSerializerId; - private int responseSerializerId; - - internal XmlSerializer RequestSerializer - { - get { return TypeStub.GetSerializer (requestSerializerId); } - } - - internal XmlSerializer ResponseSerializer - { - get { return TypeStub.GetSerializer (responseSerializerId); } - } - - // - // Constructor - // - public SoapMethodStubInfo (TypeStubInfo typeStub, LogicalMethodInfo source, object kind, XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter) - : base (typeStub, source) - { - SoapTypeStubInfo parent = (SoapTypeStubInfo) typeStub; - XmlElementAttribute optional_ns = null; - - if (kind == null) { - Use = parent.Use; - RequestName = ""; - RequestNamespace = ""; - ResponseName = ""; - ResponseNamespace = ""; - ParameterStyle = parent.ParameterStyle; - SoapBindingStyle = parent.SoapBindingStyle; - OneWay = false; - } - else if (kind is SoapDocumentMethodAttribute){ - SoapDocumentMethodAttribute dma = (SoapDocumentMethodAttribute) kind; - - Use = dma.Use; - if (Use == SoapBindingUse.Default) { - if (parent.SoapBindingStyle == SoapBindingStyle.Document) - Use = parent.Use; - else - Use = SoapBindingUse.Literal; - } - - Action = dma.Action; - Binding = dma.Binding; - RequestName = dma.RequestElementName; - RequestNamespace = dma.RequestNamespace; - ResponseName = dma.ResponseElementName; - ResponseNamespace = dma.ResponseNamespace; - ParameterStyle = dma.ParameterStyle; - if (ParameterStyle == SoapParameterStyle.Default) - ParameterStyle = parent.ParameterStyle; - OneWay = dma.OneWay; - SoapBindingStyle = SoapBindingStyle.Document; - } else { - SoapRpcMethodAttribute rma = (SoapRpcMethodAttribute) kind; - Use = SoapBindingUse.Encoded; // RPC always use encoded - - Action = rma.Action; - Binding = rma.Binding; - - // When using RPC, MS.NET seems to ignore RequestElementName and - // MessageName, and it always uses the method name - RequestName = source.Name; - ResponseName = source.Name + "Response"; -// RequestName = rma.RequestElementName; -// ResponseName = rma.ResponseElementName; - RequestNamespace = rma.RequestNamespace; - ResponseNamespace = rma.ResponseNamespace; - ParameterStyle = SoapParameterStyle.Wrapped; - OneWay = rma.OneWay; - SoapBindingStyle = SoapBindingStyle.Rpc; - - // For RPC calls, make all arguments be part of the empty namespace - optional_ns = new XmlElementAttribute (); - optional_ns.Namespace = ""; - } - - if (OneWay){ - if (source.ReturnType != typeof (void)) - throw new Exception ("OneWay methods should not have a return value."); - if (source.OutParameters.Length != 0) - throw new Exception ("OneWay methods should not have out/ref parameters."); - } - - BindingInfo binfo = parent.GetBinding (Binding); - if (binfo == null) throw new InvalidOperationException ("Type '" + parent.Type + "' is missing WebServiceBinding attribute that defines a binding named '" + Binding + "'."); - - string serviceNamespace = binfo.Namespace; - - if (RequestNamespace == "") RequestNamespace = parent.LogicalType.GetWebServiceNamespace (serviceNamespace, Use); - if (ResponseNamespace == "") ResponseNamespace = parent.LogicalType.GetWebServiceNamespace (serviceNamespace, Use); - if (RequestName == "") RequestName = Name; - if (ResponseName == "") ResponseName = Name + "Response"; - if (Action == null || Action == "") - Action = serviceNamespace.EndsWith("/") ? (serviceNamespace + Name) : (serviceNamespace + "/" + Name); - - bool hasWrappingElem = (ParameterStyle == SoapParameterStyle.Wrapped); - bool writeAccessors = (SoapBindingStyle == SoapBindingStyle.Rpc); - - XmlReflectionMember [] in_members = BuildRequestReflectionMembers (optional_ns); - XmlReflectionMember [] out_members = BuildResponseReflectionMembers (optional_ns); - - if (Use == SoapBindingUse.Literal) { - xmlImporter.IncludeTypes (source.CustomAttributeProvider); - InputMembersMapping = xmlImporter.ImportMembersMapping (RequestName, RequestNamespace, in_members, hasWrappingElem); - OutputMembersMapping = xmlImporter.ImportMembersMapping (ResponseName, ResponseNamespace, out_members, hasWrappingElem); - } - else { - soapImporter.IncludeTypes (source.CustomAttributeProvider); - InputMembersMapping = soapImporter.ImportMembersMapping (RequestName, RequestNamespace, in_members, hasWrappingElem, writeAccessors); - OutputMembersMapping = soapImporter.ImportMembersMapping (ResponseName, ResponseNamespace, out_members, hasWrappingElem, writeAccessors); - } - - requestSerializerId = parent.RegisterSerializer (InputMembersMapping); - responseSerializerId = parent.RegisterSerializer (OutputMembersMapping); - - object[] o = source.GetCustomAttributes (typeof (SoapHeaderAttribute)); - ArrayList headerList = new ArrayList (o.Length); - - for (int i = 0; i < o.Length; i++) { - SoapHeaderAttribute att = (SoapHeaderAttribute) o[i]; - MemberInfo[] mems = source.DeclaringType.GetMember (att.MemberName); - if (mems.Length == 0) throw new InvalidOperationException ("Member " + att.MemberName + " not found in class " + source.DeclaringType.FullName + "."); - - HeaderInfo header = new HeaderInfo (mems[0], att); - headerList.Add (header); - - if (!header.IsUnknownHeader) - parent.RegisterHeaderType (header.HeaderType, serviceNamespace, Use); - } - Headers = (HeaderInfo[]) headerList.ToArray (typeof(HeaderInfo)); - - SoapExtensions = SoapExtension.GetMethodExtensions (source); - } - - XmlReflectionMember [] BuildRequestReflectionMembers (XmlElementAttribute optional_ns) - { - ParameterInfo [] input = MethodInfo.InParameters; - XmlReflectionMember [] in_members = new XmlReflectionMember [input.Length]; - - for (int i = 0; i < input.Length; i++) - { - XmlReflectionMember m = new XmlReflectionMember (); - m.IsReturnValue = false; - m.MemberName = input [i].Name; - m.MemberType = input [i].ParameterType; - - m.XmlAttributes = new XmlAttributes (input[i]); - m.SoapAttributes = new SoapAttributes (input[i]); - - if (m.MemberType.IsByRef) - m.MemberType = m.MemberType.GetElementType (); - if (optional_ns != null) - m.XmlAttributes.XmlElements.Add (optional_ns); - in_members [i] = m; - } - return in_members; - } - - XmlReflectionMember [] BuildResponseReflectionMembers (XmlElementAttribute optional_ns) - { - ParameterInfo [] output = MethodInfo.OutParameters; - bool has_return_value = !(OneWay || MethodInfo.ReturnType == typeof (void)); - XmlReflectionMember [] out_members = new XmlReflectionMember [(has_return_value ? 1 : 0) + output.Length]; - XmlReflectionMember m; - int idx = 0; - - if (has_return_value) - { - m = new XmlReflectionMember (); - m.IsReturnValue = true; - m.MemberName = RequestName + "Result"; - m.MemberType = MethodInfo.ReturnType; - - m.XmlAttributes = new XmlAttributes (MethodInfo.ReturnTypeCustomAttributeProvider); - m.SoapAttributes = new SoapAttributes (MethodInfo.ReturnTypeCustomAttributeProvider); - - if (optional_ns != null) - m.XmlAttributes.XmlElements.Add (optional_ns); - idx++; - out_members [0] = m; - } - - for (int i = 0; i < output.Length; i++) - { - m = new XmlReflectionMember (); - m.IsReturnValue = false; - m.MemberName = output [i].Name; - m.MemberType = output [i].ParameterType; - m.XmlAttributes = new XmlAttributes (output[i]); - m.SoapAttributes = new SoapAttributes (output[i]); - - if (m.MemberType.IsByRef) - m.MemberType = m.MemberType.GetElementType (); - if (optional_ns != null) - m.XmlAttributes.XmlElements.Add (optional_ns); - out_members [i + idx] = m; - } - return out_members; - } - - public HeaderInfo GetHeaderInfo (Type headerType) - { - foreach (HeaderInfo headerInfo in Headers) - if (headerInfo.HeaderType == headerType) return headerInfo; - return null; - } - } - - internal class HeaderInfo - { - internal MemberInfo Member; - internal SoapHeaderAttribute AttributeInfo; - internal Type HeaderType; - internal bool IsUnknownHeader; - - public HeaderInfo (MemberInfo member, SoapHeaderAttribute attributeInfo) - { - Member = member; - AttributeInfo = attributeInfo; - if (Member is PropertyInfo) HeaderType = ((PropertyInfo)Member).PropertyType; - else HeaderType = ((FieldInfo)Member).FieldType; - - if (HeaderType == typeof(SoapHeader) || HeaderType == typeof(SoapUnknownHeader) || - HeaderType == typeof(SoapHeader[]) || HeaderType == typeof(SoapUnknownHeader[])) - { - IsUnknownHeader = true; - } - else if (!typeof(SoapHeader).IsAssignableFrom (HeaderType)) - throw new InvalidOperationException (string.Format ("Header members type must be a SoapHeader subclass")); - } - - public object GetHeaderValue (object ob) - { - if (Member is PropertyInfo) return ((PropertyInfo)Member).GetValue (ob, null); - else return ((FieldInfo)Member).GetValue (ob); - } - - public void SetHeaderValue (object ob, SoapHeader header) - { - object value = header; - if (IsUnknownHeader && HeaderType.IsArray) - { - SoapUnknownHeader uheader = header as SoapUnknownHeader; - SoapUnknownHeader[] array = (SoapUnknownHeader[]) GetHeaderValue (ob); - if (array == null || array.Length == 0) { - value = new SoapUnknownHeader[] { uheader }; - } - else { - SoapUnknownHeader[] newArray = new SoapUnknownHeader [array.Length+1]; - Array.Copy (array, newArray, array.Length); - newArray [array.Length] = uheader; - value = newArray; - } - } - - if (Member is PropertyInfo) ((PropertyInfo)Member).SetValue (ob, value, null); - else ((FieldInfo)Member).SetValue (ob, value); - } - - public SoapHeaderDirection Direction - { - get { return AttributeInfo.Direction; } - } - } - - - // - // Holds the metadata loaded from the type stub, as well as - // the metadata for all the methods in the type - // - internal class SoapTypeStubInfo : TypeStubInfo - { - Hashtable[] header_serializers = new Hashtable [3]; - Hashtable[] header_serializers_byname = new Hashtable [3]; - Hashtable methods_byaction = new Hashtable (); - - // Precomputed - internal SoapParameterStyle ParameterStyle; - internal SoapServiceRoutingStyle RoutingStyle; - internal SoapBindingUse Use; - internal SoapExtensionRuntimeConfig[][] SoapExtensions; - internal SoapBindingStyle SoapBindingStyle; - internal XmlReflectionImporter xmlImporter; - internal SoapReflectionImporter soapImporter; - - public SoapTypeStubInfo (LogicalTypeInfo logicalTypeInfo) - : base (logicalTypeInfo) - { - xmlImporter = new XmlReflectionImporter (); - soapImporter = new SoapReflectionImporter (); - - object [] o; - - o = Type.GetCustomAttributes (typeof (WebServiceBindingAttribute), false); - - if (typeof (SoapHttpClientProtocol).IsAssignableFrom (Type)) - { - if (o.Length == 0) - throw new InvalidOperationException ("WebServiceBindingAttribute is required on proxy class '" + Type + "'."); - if (o.Length > 1) - throw new InvalidOperationException ("Only one WebServiceBinding attribute may be specified on type '" + Type + "'."); - - // Remove the default binding, it is not needed since there is always - // a binding attribute. - Bindings.Clear (); - } - - foreach (WebServiceBindingAttribute at in o) - AddBinding (new BindingInfo (at, LogicalType.WebServiceNamespace)); - - o = Type.GetCustomAttributes (typeof (SoapDocumentServiceAttribute), false); - if (o.Length == 1){ - SoapDocumentServiceAttribute a = (SoapDocumentServiceAttribute) o [0]; - - ParameterStyle = a.ParameterStyle; - RoutingStyle = a.RoutingStyle; - Use = a.Use; - SoapBindingStyle = SoapBindingStyle.Document; - } else { - o = Type.GetCustomAttributes (typeof (SoapRpcServiceAttribute), false); - if (o.Length == 1){ - SoapRpcServiceAttribute srs = (SoapRpcServiceAttribute) o [0]; - - ParameterStyle = SoapParameterStyle.Wrapped; - RoutingStyle = srs.RoutingStyle; - Use = SoapBindingUse.Encoded; - SoapBindingStyle = SoapBindingStyle.Rpc; - } else { - ParameterStyle = SoapParameterStyle.Wrapped; - RoutingStyle = SoapServiceRoutingStyle.SoapAction; - Use = SoapBindingUse.Literal; - SoapBindingStyle = SoapBindingStyle.Document; - } - } - - if (ParameterStyle == SoapParameterStyle.Default) ParameterStyle = SoapParameterStyle.Wrapped; - if (Use == SoapBindingUse.Default) Use = SoapBindingUse.Literal; - - xmlImporter.IncludeTypes (Type); - soapImporter.IncludeTypes (Type); - - SoapExtensions = SoapExtension.GetTypeExtensions (Type); - } - - public override XmlReflectionImporter XmlImporter - { - get { return xmlImporter; } - } - - public override SoapReflectionImporter SoapImporter - { - get { return soapImporter; } - } - - public override string ProtocolName - { - get { return "Soap"; } - } - - protected override MethodStubInfo CreateMethodStubInfo (TypeStubInfo parent, LogicalMethodInfo lmi, bool isClientProxy) - { - SoapMethodStubInfo res = null; - object [] ats = lmi.GetCustomAttributes (typeof (SoapDocumentMethodAttribute)); - if (ats.Length == 0) ats = lmi.GetCustomAttributes (typeof (SoapRpcMethodAttribute)); - - if (ats.Length == 0 && isClientProxy) - return null; - else if (ats.Length == 0) - res = new SoapMethodStubInfo (parent, lmi, null, xmlImporter, soapImporter); - else - res = new SoapMethodStubInfo (parent, lmi, ats[0], xmlImporter, soapImporter); - - methods_byaction [res.Action] = res; - return res; - } - - internal void RegisterHeaderType (Type type, string serviceNamespace, SoapBindingUse use) - { - Hashtable serializers = header_serializers [(int)use]; - if (serializers == null) { - serializers = new Hashtable (); - header_serializers [(int)use] = serializers; - header_serializers_byname [(int)use] = new Hashtable (); - } - - if (serializers.ContainsKey (type)) - return; - - XmlTypeMapping tm; - if (use == SoapBindingUse.Literal) { - XmlReflectionImporter ri = new XmlReflectionImporter (); - - // MS.NET reflects header classes in a weird way. The root element - // name is the CLR class name unless it is specified in an XmlRootAttribute. - // The usual is to use the xml type name by default, but not in this case. - - XmlRootAttribute root; - XmlAttributes ats = new XmlAttributes (type); - if (ats.XmlRoot != null) root = ats.XmlRoot; - else root = new XmlRootAttribute (type.Name); - - if (root.Namespace == null) root.Namespace = LogicalType.GetWebServiceLiteralNamespace (serviceNamespace); - if (root.ElementName == null) root.ElementName = type.Name; - - tm = ri.ImportTypeMapping (type, root); - } - else { - SoapReflectionImporter ri = new SoapReflectionImporter (); - tm = ri.ImportTypeMapping (type, LogicalType.GetWebServiceEncodedNamespace (serviceNamespace)); - } - - int sid = RegisterSerializer (tm); - - serializers [type] = sid; - header_serializers_byname [(int)use] [new XmlQualifiedName (tm.ElementName, tm.Namespace)] = sid; - } - - internal XmlSerializer GetHeaderSerializer (Type type, SoapBindingUse use) - { - Hashtable table = header_serializers [(int)use]; - if (table == null) return null; - - return GetSerializer ((int) table [type]); - } - - internal XmlSerializer GetHeaderSerializer (XmlQualifiedName qname, SoapBindingUse use) - { - Hashtable table = header_serializers_byname [(int)use]; - if (table == null) return null; - - object serId = table [qname]; - if (serId == null) return null; - - return GetSerializer ((int) serId); - } - - public SoapMethodStubInfo GetMethodForSoapAction (string name) - { - return (SoapMethodStubInfo) methods_byaction [name.Trim ('"',' ')]; - } - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/MimeFormatter.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/MimeFormatter.cs deleted file mode 100644 index 49e635bfa26..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/MimeFormatter.cs +++ /dev/null @@ -1,131 +0,0 @@ -// -// System.Web.Services.Protocols.MimeFormatter.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Xml; - -namespace System.Web.Services.Protocols { - public abstract class MimeFormatter { - - #region Constructors - - protected MimeFormatter () - { - } - - #endregion // Constructors - - #region Methods - - public static MimeFormatter CreateInstance (Type type, object initializer) - { - MimeFormatter ob = (MimeFormatter) Activator.CreateInstance (type); - ob.Initialize (initializer); - return ob; - } - - public abstract object GetInitializer (LogicalMethodInfo methodInfo); - - public static object GetInitializer (Type type, LogicalMethodInfo methodInfo) - { - MimeFormatter ob = (MimeFormatter) Activator.CreateInstance (type); - return ob.GetInitializer (methodInfo); - } - - public virtual object[] GetInitializers (LogicalMethodInfo[] methodInfos) - { - object[] initializers = new object [methodInfos.Length]; - for (int n=0; n - public System.IAsyncResult BeginA1(int a, System.AsyncCallback callback, object asyncState) { - return this.BeginInvoke("A1", new object[] { - a}, callback, asyncState); - } - - /// - public string EndA1(System.IAsyncResult asyncResult) { - object[] results = this.EndInvoke(asyncResult); - return ((string)(results[0])); - } - - - The above is interesting, because it means that the method to - invoke on the target should be pulled from - `RequestElementName', if the value is not found, then we use - the name of the method provided. \ No newline at end of file diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/NopReturnReader.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/NopReturnReader.cs deleted file mode 100644 index 7de344b9f7b..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/NopReturnReader.cs +++ /dev/null @@ -1,65 +0,0 @@ -// -// System.Web.Services.Protocols.NopReturnReader.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Net; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public class NopReturnReader : MimeReturnReader { - - #region Constructors - - public NopReturnReader () - { - } - - #endregion // Constructors - - #region Methods - - public override object GetInitializer (LogicalMethodInfo methodInfo) - { - return this; - } - - public override void Initialize (object initializer) - { - } - - public override object Read (WebResponse response, Stream responseStream) - { - responseStream.Close (); - return null; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/PatternMatcher.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/PatternMatcher.cs deleted file mode 100644 index a1f4e1eb924..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/PatternMatcher.cs +++ /dev/null @@ -1,122 +0,0 @@ -// -// System.Web.Services.Protocols.PatternMatcher.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Reflection; -using System.Text.RegularExpressions; -using System.Collections; - -namespace System.Web.Services.Protocols -{ - public sealed class PatternMatcher - { - Type _returnType; - MatchInfo[] _matchInfos; - - public PatternMatcher (Type type) - { - _returnType = type; - - FieldInfo[] fields = type.GetFields (); - ArrayList matchInfos = new ArrayList (); - - foreach (FieldInfo field in fields) - { - object[] ats = field.GetCustomAttributes (typeof(MatchAttribute), true); - if (ats.Length == 0) continue; - - MatchInfo mi = new MatchInfo (); - mi.Field = field; - mi.Match = (MatchAttribute) ats[0]; - - RegexOptions opts = RegexOptions.Multiline; - if (mi.Match.IgnoreCase) opts |= RegexOptions.IgnoreCase; - mi.Regex = new Regex (mi.Match.Pattern, opts); - - matchInfos.Add (mi); - } - _matchInfos = (MatchInfo[]) matchInfos.ToArray (typeof(MatchInfo)); - } - - public object Match (string text) - { - object ob = Activator.CreateInstance (_returnType); - - foreach (MatchInfo mi in _matchInfos) - { - MatchCollection matches = mi.Regex.Matches (text); - - object res = null; - - if (mi.Field.FieldType.IsArray) - { - int max = mi.Match.MaxRepeats; - if (max == -1) max = matches.Count; - - Type elemType = mi.Field.FieldType.GetElementType(); - Array array = Array.CreateInstance (elemType, max); - for (int n=0; n 0) - res = mi.GetMatchValue (matches[0], mi.Field.FieldType); - - mi.Field.SetValue (ob, res); - } - return ob; - } - - } - - class MatchInfo - { - public FieldInfo Field; - public MatchAttribute Match; - public Regex Regex; - - const string GroupError = "{0} is not a valid group index for match '{1}'. The highest valid group index for this match is {2}"; - const string CaptureError = "{0} is not a valid capture index for match '{1}'. The highest valid capture index for this match is {2}"; - - public object GetMatchValue (Match match, Type castType) - { - if (Match.Group >= match.Groups.Count) - throw new Exception (string.Format (GroupError, Match.Group, Field.Name, match.Groups.Count-1)); - - Group group = match.Groups [Match.Group]; - if (Match.Capture >= group.Captures.Count) - throw new Exception (string.Format (CaptureError, Match.Capture, Field.Name, group.Captures.Count-1)); - - string val = group.Captures [Match.Capture].Value; - return Convert.ChangeType (val, castType); - } - } - -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/ServerProtocol.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/ServerProtocol.cs deleted file mode 100644 index 8bc4e1e3f64..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/ServerProtocol.cs +++ /dev/null @@ -1,136 +0,0 @@ -// -// System.Web.Services.Protocols.ServerProtocol.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Web; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - [MonoTODO ("Figure out what this class does.")] - internal abstract class ServerProtocol { - - HttpContext _context; - - #region Constructors - - internal ServerProtocol (HttpContext context) - { - _context = context; - } - - protected ServerProtocol () - { - throw new NotImplementedException (); - } - - #endregion - - #region Properties - - public HttpContext Context { - get { return _context; } - } - - public abstract bool IsOneWay { - get; - } - - public abstract LogicalMethodInfo MethodInfo { - get; - } - - [MonoTODO] - public virtual Exception OnewayInitException { - get { throw new NotImplementedException (); } - } - - public HttpRequest Request { - get { return _context.Request; } - } - - public HttpResponse Response { - get { return _context.Response; } - } - - #endregion - - #region Methods - - [MonoTODO] - protected void AddToCache (Type t1, Type t2, object o) - { - throw new NotImplementedException (); - } - - [MonoTODO] - public virtual void CreateServerInstance () - { - throw new NotImplementedException (); - } - - [MonoTODO] - public virtual void DisposeServerInstance () - { - throw new NotImplementedException (); - } - - [MonoTODO] - public string GenerateFaultString (Exception exception) - { - throw new NotImplementedException (); - } - - [MonoTODO] - protected object GetFromCache (Type t1, Type t2) - { - throw new NotImplementedException (); - } - - public abstract bool Initialize (); - - public abstract object[] ReadParameters (); - - [MonoTODO] - public virtual bool WriteException (Exception e, Stream outputStream) - { - throw new NotImplementedException (); - } - - [MonoTODO] - public void WriteOneWayResponse () - { - throw new NotImplementedException (); - } - - public abstract void WriteReturns (object[] returnValues, Stream outputStream); - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/Soap12FaultCodes.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/Soap12FaultCodes.cs deleted file mode 100644 index fa231d9637c..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/Soap12FaultCodes.cs +++ /dev/null @@ -1,72 +0,0 @@ -// -// System.Web.Services.Protocols.Soap12FaultCodes.cs -// -// Author: -// Lluis Sanchez (lluis@novell.com) -// -// Copyright (C) Novell, Inc., 2004 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#if NET_2_0 - -using System.Xml; - -namespace System.Web.Services.Protocols -{ - public sealed class Soap12FaultCodes - { - private Soap12FaultCodes () - { - } - - public static readonly XmlQualifiedName DataEncodingUnknownFaultCode - = new XmlQualifiedName ("DataEncodingUnknown", "http://www.w3.org/2003/05/soap-envelope"); - - public static readonly XmlQualifiedName EncodingMissingIDFaultCode - = new XmlQualifiedName ("MissingID", "http://www.w3.org/2003/05/soap-encoding"); - - public static readonly XmlQualifiedName EncodingUntypedValueFaultCode - = new XmlQualifiedName ("UntypedValue", "http://www.w3.org/2003/05/soap-encoding"); - - public static readonly XmlQualifiedName MustUnderstandFaultCode - = new XmlQualifiedName ("MustUnderstand", "http://www.w3.org/2003/05/soap-envelope"); - - public static readonly XmlQualifiedName ReceiverFaultCode - = new XmlQualifiedName ("Receiver", "http://www.w3.org/2003/05/soap-envelope"); - - public static readonly XmlQualifiedName RpcBadArgumentsFaultCode - = new XmlQualifiedName ("BadArguments", "http://www.w3.org/2003/05/soap-rpc"); - - public static readonly XmlQualifiedName RpcProcedureNotPresentFaultCode - = new XmlQualifiedName ("ProcedureNotPresent", "http://www.w3.org/2003/05/soap-rpc"); - - public static readonly XmlQualifiedName SenderFaultCode - = new XmlQualifiedName ("Sender", "http://www.w3.org/2003/05/soap-envelope"); - - public static readonly XmlQualifiedName VersionMismatchFaultCode - = new XmlQualifiedName ("VersionMismatch", "http://www.w3.org/2003/05/soap-envelope"); - } -} - -#endif diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapClientMessage.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapClientMessage.cs deleted file mode 100644 index b1a1d30a9cd..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapClientMessage.cs +++ /dev/null @@ -1,112 +0,0 @@ -// -// System.Web.Services.Protocols.SoapClientMessage.cs -// -// Authors: -// Tim Coleman (tim@timcoleman.com) -// Miguel de Icaza (miguel@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// Copyright (C) Ximian, Inc. 2003 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Web.Services.Protocols; - -namespace System.Web.Services.Protocols { - public sealed class SoapClientMessage : SoapMessage { - - #region Fields - - SoapHttpClientProtocol client; - string url; - internal SoapMethodStubInfo MethodStubInfo; - - // - // Expose this one internally - // - internal object [] Parameters; - #endregion - - #region Constructors - - // - // Constructs the SoapClientMessage - // - internal SoapClientMessage (SoapHttpClientProtocol client, SoapMethodStubInfo msi, string url, object [] parameters) - { - this.MethodStubInfo = msi; - this.client = client; - this.url = url; - Parameters = parameters; - } - - #endregion - - #region Properties - - public override string Action { - get { return MethodStubInfo.Action; } - } - - public SoapHttpClientProtocol Client { - get { return client; } - } - - public override LogicalMethodInfo MethodInfo { - get { return MethodStubInfo.MethodInfo; } - } - - public override bool OneWay { - get { return MethodStubInfo.OneWay; } - } - - public override string Url { - get { return url; } - } - -#if NET_2_0 - [MonoTODO] - [System.Runtime.InteropServices.ComVisible(false)] - public override SoapProtocolVersion SoapVersion { - get { throw new NotImplementedException (); } - } -#endif - - #endregion // Properties - - #region Methods - - protected override void EnsureInStage () - { - EnsureStage (SoapMessageStage.BeforeSerialize); - } - - protected override void EnsureOutStage () - { - EnsureStage (SoapMessageStage.AfterDeserialize); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapClientMethod.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapClientMethod.cs deleted file mode 100644 index dc00073f7f8..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapClientMethod.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// System.Web.Services.Protocols.SoapClientMethod.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.Web.Services.Description; - -namespace System.Web.Services.Protocols { - - internal class SoapClientMethod { - - #region Fields - - public string action; - public LogicalMethodInfo methodInfo; - public bool oneWay; - public bool rpc; - public SoapBindingUse use; - - #endregion // Fields - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentMethodAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentMethodAttribute.cs deleted file mode 100644 index b70fb603467..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentMethodAttribute.cs +++ /dev/null @@ -1,135 +0,0 @@ -// -// System.Web.Services.Protocols.SoapDocumentMethodAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Description; - -namespace System.Web.Services.Protocols { - [AttributeUsage (AttributeTargets.Method, Inherited = true)] - public sealed class SoapDocumentMethodAttribute : Attribute { - - #region Fields - - string action; - string binding; - bool oneWay; - SoapParameterStyle parameterStyle; - string requestElementName; - string requestNamespace; - string responseElementName; - string responseNamespace; - SoapBindingUse use; - - #endregion - - #region Constructors - - public SoapDocumentMethodAttribute () - { - } - - public SoapDocumentMethodAttribute (string action) - : this () - { - this.action = action; - } - - #endregion // Constructors - - #region Properties - - public string Action { - get { return action; } - set { action = value; } - } - - public string Binding { - get { - if (binding != null) - return binding; - return ""; - } - set { binding = value; } - } - - public bool OneWay { - get { return oneWay; } - set { oneWay = value; } - } - - public SoapParameterStyle ParameterStyle { - get { return parameterStyle; } - set { parameterStyle = value; } - } - - public string RequestElementName { - get { - if (requestElementName == null) - return ""; - return requestElementName; - } - set { requestElementName = value; } - } - - public string RequestNamespace { - get { - if (requestNamespace == null) - return ""; - - return requestNamespace; - } - set { requestNamespace = value; } - } - - public string ResponseElementName { - get { - if (responseElementName == null) - return ""; - return responseElementName; - } - set { responseElementName = value; } - } - - public string ResponseNamespace { - get { - if (responseNamespace == null) - return ""; - return responseNamespace; - } - set { responseNamespace = value; } - } - - public SoapBindingUse Use { - get { return use; } - set { use = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentServiceAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentServiceAttribute.cs deleted file mode 100644 index adf20c74706..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentServiceAttribute.cs +++ /dev/null @@ -1,88 +0,0 @@ -// -// System.Web.Services.Protocols.SoapDocumentServiceAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Description; - -namespace System.Web.Services.Protocols { - [AttributeUsage (AttributeTargets.Class, Inherited = true)] - public sealed class SoapDocumentServiceAttribute : Attribute { - - #region Fields - - SoapParameterStyle paramStyle; - SoapServiceRoutingStyle routingStyle; - SoapBindingUse use; - - #endregion - - #region Constructors - - public SoapDocumentServiceAttribute () - { - paramStyle = SoapParameterStyle.Wrapped; - routingStyle = SoapServiceRoutingStyle.SoapAction; - use = SoapBindingUse.Literal; - } - - public SoapDocumentServiceAttribute (SoapBindingUse use) - : this () - { - this.use = use; - } - - public SoapDocumentServiceAttribute (SoapBindingUse use, SoapParameterStyle paramStyle) - : this () - { - this.use = use; - this.paramStyle = paramStyle; - } - - #endregion // Constructors - - #region Properties - - public SoapParameterStyle ParameterStyle { - get { return paramStyle; } - set { paramStyle = value; } - } - - public SoapServiceRoutingStyle RoutingStyle { - get { return routingStyle; } - set { routingStyle = value; } - } - - public SoapBindingUse Use { - get { return use; } - set { use = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentationHandler.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentationHandler.cs deleted file mode 100644 index 9bc06054a49..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapDocumentationHandler.cs +++ /dev/null @@ -1,239 +0,0 @@ -// -// System.Web.Services.Protocols.SoapDocumentationHandler.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Ximian, Inc. 2003 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; -using System.IO; -using System.Xml; -using System.Text; -using System.Xml.Serialization; -using System.Xml.Schema; -using System.Web.Services.Description; -using System.Web.Services.Discovery; -using System.Web.Services.Configuration; -using System.CodeDom; -using System.CodeDom.Compiler; -using Microsoft.CSharp; -using System.Web.UI; - -namespace System.Web.Services.Protocols -{ - internal class SoapDocumentationHandler: WebServiceHandler - { - SoapTypeStubInfo _typeStubInfo; - ServiceDescriptionCollection _descriptions; - XmlSchemas _schemas; - string _url; - IHttpHandler _pageHandler = null; - - public SoapDocumentationHandler (Type type, HttpContext context): base (type) - { - _url = context.Request.Url.ToString(); - int i = _url.LastIndexOf ('?'); - if (i != -1) _url = _url.Substring (0,i); - _typeStubInfo = (SoapTypeStubInfo) TypeStubManager.GetTypeStub (ServiceType, "Soap"); - - HttpRequest req = context.Request; - string key = null; - if (req.QueryString.Count == 1) - key = req.QueryString.GetKey(0).ToLower(); - - if (key == "wsdl" || key == "schema" || key == "code" || key == "disco") - return; - - string help = WSConfig.Instance.WsdlHelpPage; - string path = Path.GetDirectoryName (WSConfig.Instance.ConfigFilePath); - string appPath = AppDomain.CurrentDomain.GetData (".appPath").ToString (); - string vpath; - if (path.StartsWith (appPath)) { - vpath = path.Substring (appPath.Length); - vpath = vpath.Replace ("\\", "/"); - } else { - vpath = "/"; - } - - if (vpath.EndsWith ("/")) - vpath += help; - else - vpath += "/" + help; - - string physPath = Path.Combine (path, help); - - if (!File.Exists (physPath)) - throw new InvalidOperationException ("Documentation page '" + physPath + "' not found"); - - _pageHandler = PageParser.GetCompiledPageInstance (vpath, physPath, context); - - } - - internal IHttpHandler PageHandler { - get { return _pageHandler; } - } - - public override bool IsReusable - { - get { return false; } - } - - public override void ProcessRequest (HttpContext context) - { - if (_pageHandler != null) - { - context.Items["wsdls"] = GetDescriptions (); - context.Items["schemas"] = GetSchemas (); - _pageHandler.ProcessRequest (context); - } - else - { - HttpRequest req = context.Request; - string key = req.QueryString.GetKey(0).ToLower(); - if (key == "wsdl") GenerateWsdlDocument (context, req.QueryString ["wsdl"]); - else if (key == "schema") GenerateSchema (context, req.QueryString ["schema"]); - else if (key == "code") GenerateCode (context, req.QueryString ["code"]); - else if (key == "disco") GenerateDiscoDocument (context); - else throw new Exception ("This should never happen"); - } - } - - void GenerateWsdlDocument (HttpContext context, string wsdlId) - { - int di = 0; - if (wsdlId != null && wsdlId != "") di = int.Parse (wsdlId); - - context.Response.ContentType = "text/xml; charset=utf-8"; - XmlTextWriter xtw = new XmlTextWriter (context.Response.OutputStream, new UTF8Encoding (false)); - xtw.Formatting = Formatting.Indented; - GetDescriptions() [di].Write (xtw); - } - - void GenerateDiscoDocument (HttpContext context) - { - ServiceDescriptionCollection descs = GetDescriptions (); - - DiscoveryDocument doc = new DiscoveryDocument (); - ContractReference cref = new ContractReference (); - cref.Ref = _url + "?wsdl"; - cref.DocRef = _url; - doc.References.Add (cref); - - foreach (ServiceDescription desc in descs) - foreach (Service ser in desc.Services) - foreach (Port port in ser.Ports) - { - SoapAddressBinding sab = port.Extensions.Find (typeof(SoapAddressBinding)) as SoapAddressBinding; - if (sab != null) - { - System.Web.Services.Discovery.SoapBinding dsb = new System.Web.Services.Discovery.SoapBinding (); - dsb.Address = sab.Location; - dsb.Binding = port.Binding; - doc.AdditionalInfo.Add (dsb); - } - } - - context.Response.ContentType = "text/xml; charset=utf-8"; - XmlTextWriter xtw = new XmlTextWriter (context.Response.OutputStream, new UTF8Encoding (false)); - xtw.Formatting = Formatting.Indented; - doc.Write (xtw); - } - - void GenerateSchema (HttpContext context, string schemaId) - { - int di = 0; - if (schemaId != null && schemaId != "") di = int.Parse (schemaId); - - context.Response.ContentType = "text/xml; charset=utf-8"; - XmlTextWriter xtw = new XmlTextWriter (context.Response.OutputStream, new UTF8Encoding (false)); - xtw.Formatting = Formatting.Indented; - GetSchemas() [di].Write (xtw); - } - - void GenerateCode (HttpContext context, string langId) - { - context.Response.ContentType = "text/plain; charset=utf-8"; - CodeNamespace codeNamespace = new CodeNamespace(); - CodeCompileUnit codeUnit = new CodeCompileUnit(); - - codeUnit.Namespaces.Add (codeNamespace); - - ServiceDescriptionImporter importer = new ServiceDescriptionImporter(); - - foreach (ServiceDescription sd in GetDescriptions ()) - importer.AddServiceDescription(sd, null, null); - - foreach (XmlSchema sc in GetSchemas()) - importer.Schemas.Add (sc); - - importer.Import(codeNamespace, codeUnit); - - if (langId == null || langId == "") langId = "cs"; - CodeDomProvider provider = GetProvider (langId); - ICodeGenerator generator = provider.CreateGenerator(); - CodeGeneratorOptions options = new CodeGeneratorOptions(); - - generator.GenerateCodeFromCompileUnit(codeUnit, context.Response.Output, options); - } - - private CodeDomProvider GetProvider(string langId) - { - // FIXME these should be loaded dynamically using reflection - CodeDomProvider provider; - - switch (langId.ToUpper()) - { - case "CS": - provider = new CSharpCodeProvider(); - break; - - default: - throw new Exception("Unknown language: " + langId); - } - - return provider; - } - - internal ServiceDescriptionCollection GetDescriptions () - { - if (_descriptions == null) - { - ServiceDescriptionReflector reflector = new ServiceDescriptionReflector (); - reflector.Reflect (ServiceType,_url); - _schemas = reflector.Schemas; - _descriptions = reflector.ServiceDescriptions; - } - return _descriptions; - } - - internal XmlSchemas GetSchemas() - { - GetDescriptions(); - return _schemas; - } - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapException.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapException.cs deleted file mode 100644 index 7ae6ca87b5a..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapException.cs +++ /dev/null @@ -1,200 +0,0 @@ -// -// System.Web.Services.Protocols.SoapException.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@novell.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Xml; - -namespace System.Web.Services.Protocols -{ - [Serializable] - public class SoapException : SystemException - { - #region Fields - - public static readonly XmlQualifiedName ClientFaultCode = new XmlQualifiedName ("Client", "http://schemas.xmlsoap.org/soap/envelope/"); - public static readonly XmlQualifiedName DetailElementName = new XmlQualifiedName ("detail"); - public static readonly XmlQualifiedName MustUnderstandFaultCode = new XmlQualifiedName ("MustUnderstand", "http://schemas.xmlsoap.org/soap/envelope/"); - public static readonly XmlQualifiedName ServerFaultCode = new XmlQualifiedName ("Server", "http://schemas.xmlsoap.org/soap/envelope/"); - public static readonly XmlQualifiedName VersionMismatchFaultCode = new XmlQualifiedName ("VersionMismatch", "http://schemas.xmlsoap.org/soap/envelope/"); - - string actor; - XmlQualifiedName code; - XmlNode detail; - -#if NET_2_0 - string lang; - string role; - SoapFaultSubcode subcode; -#endif - #endregion - - #region Constructors - - public SoapException (string message, XmlQualifiedName code) - : base (message) - { - this.code = code; - } - - public SoapException (string message, XmlQualifiedName code, Exception innerException) - : base (message, innerException) - { - this.code = code; - } - - public SoapException (string message, XmlQualifiedName code, string actor) - : base (message) - { - this.code = code; - this.actor = actor; - } - - public SoapException (string message, XmlQualifiedName code, string actor, Exception innerException) - : base (message, innerException) - { - this.code = code; - this.actor = actor; - } - - public SoapException (string message, XmlQualifiedName code, string actor, XmlNode detail) - : base (message) - { - this.code = code; - this.actor = actor; - this.detail = detail; - } - - public SoapException (string message, XmlQualifiedName code, string actor, XmlNode detail, Exception innerException) - : base (message, innerException) - { - this.code = code; - this.actor = actor; - this.detail = detail; - } - -#if NET_2_0 - public SoapException (string message, XmlQualifiedName code, SoapFaultSubcode subcode) - : base (message) - { - this.code = code; - this.subcode = subcode; - } - - public SoapException (string message, XmlQualifiedName code, string actor, string role, XmlNode detail, SoapFaultSubcode subcode, Exception innerException) - : base (message, innerException) - { - this.code = code; - this.subcode = subcode; - this.detail = detail; - this.actor = actor; - this.role = role; - } - - public SoapException (string message, XmlQualifiedName code, string actor, string role, string lang, XmlNode detail, SoapFaultSubcode subcode, Exception innerException) - { - this.code = code; - this.subcode = subcode; - this.detail = detail; - this.actor = actor; - this.role = role; - this.lang = lang; - } - - public static bool IsClientFaultCode (XmlQualifiedName code) - { - if (code == ClientFaultCode) return true; - if (code == Soap12FaultCodes.SenderFaultCode) return true; - return false; - } - - public static bool IsMustUnderstandFaultCode (XmlQualifiedName code) - { - if (code == MustUnderstandFaultCode) return true; - if (code == Soap12FaultCodes.MustUnderstandFaultCode) return true; - return false; - } - - public static bool IsServerFaultCode (XmlQualifiedName code) - { - if (code == ServerFaultCode) return true; - if (code == Soap12FaultCodes.ReceiverFaultCode) return true; - return false; - } - - public static bool IsVersionMismatchFaultCode (XmlQualifiedName code) - { - if (code == VersionMismatchFaultCode) return true; - if (code == Soap12FaultCodes.VersionMismatchFaultCode) return true; - return false; - } - -#endif - - #endregion // Constructors - - #region Properties - - public string Actor { - get { return actor; } - } - - public XmlQualifiedName Code { - get { return code; } - } - - public XmlNode Detail { - get { return detail; } - } - -#if NET_2_0 - [System.Runtime.InteropServices.ComVisible(false)] - public string Lang { - get { return lang; } - } - - [System.Runtime.InteropServices.ComVisible(false)] - public string Role { - get { return role; } - } - - [System.Runtime.InteropServices.ComVisible(false)] - public SoapFaultSubcode Subcode { - get { return subcode; } - } - - // Same value as actor - [System.Runtime.InteropServices.ComVisible(false)] - public string Node { - get { return actor; } - } -#endif - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapExtension.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapExtension.cs deleted file mode 100644 index 17e38abb66a..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapExtension.cs +++ /dev/null @@ -1,203 +0,0 @@ -// -// System.Web.Services.Protocols.SoapExtension.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Collections; -using System.Web.Services.Configuration; - -namespace System.Web.Services.Protocols { - public abstract class SoapExtension { - - #region Fields - - Stream stream; - - #endregion - - #region Constructors - - protected SoapExtension () - { - } - - #endregion // Constructors - - #region Methods - - public virtual Stream ChainStream (Stream stream) - { - return stream; - } - - public abstract object GetInitializer (Type serviceType); - public abstract object GetInitializer (LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute); - public abstract void Initialize (object initializer); - public abstract void ProcessMessage (SoapMessage message); - - - static ArrayList[] globalExtensions; - - internal static SoapExtension[] CreateExtensionChain (SoapExtensionRuntimeConfig[] extensionConfigs) - { - if (extensionConfigs == null) return null; - SoapExtension[] res = new SoapExtension [extensionConfigs.Length]; - CreateExtensionChain (extensionConfigs, res, 0); - return res; - } - - internal static SoapExtension[] CreateExtensionChain (SoapExtensionRuntimeConfig[] hiPrioExts, SoapExtensionRuntimeConfig[] medPrioExts, SoapExtensionRuntimeConfig[] lowPrioExts) - { - int len = 0; - if (hiPrioExts != null) len += hiPrioExts.Length; - if (medPrioExts != null) len += medPrioExts.Length; - if (lowPrioExts != null) len += lowPrioExts.Length; - if (len == 0) return null; - - SoapExtension[] res = new SoapExtension [len]; - int pos = 0; - if (hiPrioExts != null) pos = CreateExtensionChain (hiPrioExts, res, pos); - if (medPrioExts != null) pos = CreateExtensionChain (medPrioExts, res, pos); - if (lowPrioExts != null) pos = CreateExtensionChain (lowPrioExts, res, pos); - return res; - } - - static int CreateExtensionChain (SoapExtensionRuntimeConfig[] extensionConfigs, SoapExtension[] destArray, int pos) - { - for (int n=0; n econf.Priority) { - destList.Insert (n, econf); - added = true; - } - if (!added) destList.Add (econf); - } - } - - internal static SoapExtensionRuntimeConfig[][] GetTypeExtensions (Type serviceType) - { - if (globalExtensions == null) InitializeGlobalExtensions(); - - SoapExtensionRuntimeConfig[][] exts = new SoapExtensionRuntimeConfig[2][]; - - for (int group = 0; group < 2; group++) - { - ArrayList globList = globalExtensions[group]; - if (globList == null) continue; - exts [group] = new SoapExtensionRuntimeConfig [globList.Count]; - for (int n=0; n= 0; n--) - extensions[n].ProcessMessage (message); - } - else - { - for (int n = 0; n < extensions.Length; n++) - extensions[n].ProcessMessage (message); - } - } - - #endregion // Methods - } - - internal class SoapExtensionRuntimeConfig - { - public Type Type; - public int Priority; - public object InitializationInfo; - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapExtensionAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapExtensionAttribute.cs deleted file mode 100644 index 8dc5f1db03e..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapExtensionAttribute.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -// System.Web.Services.Protocols.SoapExtensionAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols { - public abstract class SoapExtensionAttribute : Attribute { - - #region Constructors - - protected SoapExtensionAttribute () - { - } - - #endregion // Constructors - - #region Properties - - public abstract Type ExtensionType { - get; - } - - public abstract int Priority { - get; - set; - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapFaultSubcode.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapFaultSubcode.cs deleted file mode 100644 index f6371ba5225..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapFaultSubcode.cs +++ /dev/null @@ -1,64 +0,0 @@ -// -// System.Web.Services.Protocols.SoapFaultSubcode.cs -// -// Author: -// Lluis Sanchez (lluis@novell.com) -// -// Copyright (C) Novell, Inc., 2004 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#if NET_2_0 - -using System.Xml; - -namespace System.Web.Services.Protocols -{ - public class SoapFaultSubcode - { - XmlQualifiedName _code; - SoapFaultSubcode _subcode; - - public SoapFaultSubcode (XmlQualifiedName code) - { - _code = code; - } - - public SoapFaultSubcode (XmlQualifiedName code, SoapFaultSubcode subcode) - { - _code = code; - _subcode = subcode; - } - - public XmlQualifiedName Code { - get { return _code; } - } - - public SoapFaultSubcode Subcode { - get { return _subcode; } - } - - } -} - -#endif diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeader.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeader.cs deleted file mode 100644 index b91bfef67ba..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeader.cs +++ /dev/null @@ -1,166 +0,0 @@ -// -// System.Web.Services.Protocols.SoapHeader.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Xml.Serialization; -using System.Xml; - -namespace System.Web.Services.Protocols { - [SoapType (IncludeInSchema = false)] - [XmlType (IncludeInSchema = false)] - public abstract class SoapHeader { - - #region Fields - - string actor; - bool didUnderstand; - bool mustUnderstand; - -#if NET_2_0 - string role; - bool relay; -#endif - - #endregion // Fields - - #region Constructors - - protected SoapHeader () - { - actor = String.Empty; - didUnderstand = false; - mustUnderstand = false; - } - - internal SoapHeader (XmlElement elem) - { - actor = elem.GetAttribute ("actor", "http://schemas.xmlsoap.org/soap/envelope/"); - string me = elem.GetAttribute ("mustUnderstand", "http://schemas.xmlsoap.org/soap/envelope/"); - if (me != "") EncodedMustUnderstand = me; - } - - #endregion // Constructors - - #region Properties - - [DefaultValue ("")] - [SoapAttribute ("actor", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")] - [XmlAttribute ("actor", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")] - public string Actor { - get { return actor; } - set { actor = value; } - } - - [SoapIgnore] - [XmlIgnore] - public bool DidUnderstand { - get { return didUnderstand; } - set { didUnderstand = value; } - } - - [DefaultValue ("0")] - [SoapAttribute ("mustUnderstand", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")] - [XmlAttribute ("mustUnderstand", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")] - public string EncodedMustUnderstand { - get { return (MustUnderstand ? "1" : "0"); } - set { - if (value == "true" || value == "1") - MustUnderstand = true; - else if (value == "false" || value == "0") - MustUnderstand = false; - else - throw new ArgumentException (); - } - } - - [SoapIgnore] - [XmlIgnore] - public bool MustUnderstand { - get { return mustUnderstand; } - set { mustUnderstand = value; } - } - -#if NET_2_0 - - [DefaultValue ("0")] - [SoapAttribute ("mustUnderstand", Namespace = "http://www.w3.org/2003/05/soap-envelope")] - [XmlAttribute ("mustUnderstand", Namespace = "http://www.w3.org/2003/05/soap-envelope")] - [System.Runtime.InteropServices.ComVisible(false)] - public string EncodedMustUnderstand12 { - get { return (MustUnderstand ? "1" : "0"); } - set { - if (value == "true" || value == "1") - MustUnderstand = true; - else if (value == "false" || value == "0") - MustUnderstand = false; - else - throw new ArgumentException (); - } - } - - [DefaultValue ("0")] - [SoapAttribute ("relay", Namespace = "http://www.w3.org/2003/05/soap-envelope")] - [XmlAttribute ("relay", Namespace = "http://www.w3.org/2003/05/soap-envelope")] - [System.Runtime.InteropServices.ComVisible(false)] - public string EncodedRelay - { - get { return (Relay ? "1" : "0"); } - set { - if (value == "true" || value == "1") - Relay = true; - else if (value == "false" || value == "0") - Relay = false; - else - throw new ArgumentException (); - } - } - - [SoapIgnore] - [XmlIgnore] - [System.Runtime.InteropServices.ComVisible(false)] - public bool Relay { - get { return relay; } - set { relay = value; } - } - - [DefaultValue ("")] - [SoapAttribute ("role", Namespace = "http://www.w3.org/2003/05/soap-envelope")] - [XmlAttribute ("role", Namespace = "http://www.w3.org/2003/05/soap-envelope")] - [System.Runtime.InteropServices.ComVisible(false)] - public string Role { - get { return role; } - set { role = value; } - } - -#endif - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderAttribute.cs deleted file mode 100644 index 45b260ce3ea..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderAttribute.cs +++ /dev/null @@ -1,78 +0,0 @@ -// -// System.Web.Services.Protocols.SoapHeaderAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols { - [AttributeUsage (AttributeTargets.Method, AllowMultiple = true, Inherited = true)] - public sealed class SoapHeaderAttribute : Attribute { - - #region Fields - - SoapHeaderDirection direction; - string memberName; - bool required; - - #endregion // Fields - - #region Constructors - - public SoapHeaderAttribute (string memberName) - { - direction = SoapHeaderDirection.In; - this.memberName = memberName; - required = true; - } - - #endregion // Constructors - - #region Properties - - public SoapHeaderDirection Direction { - get { return direction; } - set { direction = value; } - } - - public string MemberName { - get { return memberName; } - set { memberName = value; } - } - -#if NET_1_1 - [Obsolete ("This property will be removed from a future" - + " version. The presence of a particular header" - + " in a SOAP message is no longer enforced", false)] -#endif - public bool Required { - get { return required; } - set { required = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderCollection.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderCollection.cs deleted file mode 100644 index e9608e1a285..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderCollection.cs +++ /dev/null @@ -1,90 +0,0 @@ -// -// System.Web.Services.Protocols.SoapHeaderCollection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; - -namespace System.Web.Services.Protocols { - public class SoapHeaderCollection : CollectionBase { - - #region Constructors - - public SoapHeaderCollection () - { - } - - #endregion - - #region Properties - - public SoapHeader this [int index] { - get { return (SoapHeader) List[index]; } - set { List[index] = value; } - } - - #endregion // Properties - - #region Methods - - public int Add (SoapHeader header) - { - Insert (Count, header); - return (Count - 1); - } - - public bool Contains (SoapHeader header) - { - return List.Contains (header); - } - - public void CopyTo (SoapHeader[] array, int index) - { - List.CopyTo (array, index); - } - - public int IndexOf (SoapHeader header) - { - return List.IndexOf (header); - } - - public void Insert (int index, SoapHeader header) - { - if (index < 0 || index > Count) - throw new ArgumentOutOfRangeException (); - List.Insert (index, header); - } - - public void Remove (SoapHeader header) - { - List.Remove (header); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderDirection.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderDirection.cs deleted file mode 100644 index 887c13fb2fe..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderDirection.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// System.Web.Services.Protocols.SoapHeaderDirection.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols { - [Flags] - [Serializable] - public enum SoapHeaderDirection { - In = 0x1, - InOut = 0x3, - Out = 0x2, -#if NET_1_1 - Fault = 0x4 -#endif - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderException.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderException.cs deleted file mode 100644 index fef034ff40d..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHeaderException.cs +++ /dev/null @@ -1,93 +0,0 @@ -// -// System.Web.Services.Protocols.SoapHeaderException.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Xml; - -namespace System.Web.Services.Protocols -{ - [Serializable] - public class SoapHeaderException : SoapException { - - #region Constructors - - public SoapHeaderException (string message, XmlQualifiedName code) - : base (message, code) - { - } - - public SoapHeaderException (string message, XmlQualifiedName code, Exception innerException) - : base (message, code, innerException) - { - } - - public SoapHeaderException (string message, XmlQualifiedName code, string actor) - : base (message, code, actor) - { - } - - public SoapHeaderException (string message, XmlQualifiedName code, string actor, Exception innerException) - : base (message, code, actor, innerException) - { - } - -#if NET_2_0 - - public SoapHeaderException ( - string message, - XmlQualifiedName code, - string actor, - string role, - string lang, - SoapFaultSubcode subcode, - Exception innerException) - - : base (message, code, actor, role, lang, null, subcode, innerException) - { - - } - - public SoapHeaderException ( - string message, - XmlQualifiedName code, - string actor, - string role, - SoapFaultSubcode subcode, - Exception innerException) - - : base (message, code, actor, role, null, subcode, innerException) - { - - } - -#endif - - #endregion // Constructors - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHttpClientProtocol.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHttpClientProtocol.cs deleted file mode 100644 index 143432a5020..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHttpClientProtocol.cs +++ /dev/null @@ -1,380 +0,0 @@ -// -// System.Web.Services.Protocols.SoapHttpClientProtocol.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Miguel de Icaza (miguel@ximian.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// Copyright (C) Ximian, Inc, 2003 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Net; -using System.Web; -using System.Xml; -using System.Text; -using System.Reflection; -using System.Web.Services; -using System.Diagnostics; -using System.Runtime.CompilerServices; -using System.Web.Services.Description; -using System.Web.Services.Discovery; -using System.Xml.Serialization; -using System.Xml.Schema; -using System.Collections; -using System.Threading; - -namespace System.Web.Services.Protocols -{ - public class SoapHttpClientProtocol : HttpWebClientProtocol - { - SoapTypeStubInfo type_info; -#if NET_2_0 - WsiClaims conformanceClaims; - SoapProtocolVersion soapVersion; -#endif - - #region SoapWebClientAsyncResult class - - internal class SoapWebClientAsyncResult: WebClientAsyncResult - { - public SoapWebClientAsyncResult (WebRequest request, AsyncCallback callback, object asyncState) - : base (request, callback, asyncState) - { - } - - public SoapClientMessage Message; - public SoapExtension[] Extensions; - } - #endregion - - #region Constructors - - public SoapHttpClientProtocol () - { - type_info = (SoapTypeStubInfo) TypeStubManager.GetTypeStub (this.GetType (), "Soap"); - } - - #endregion // Constructors - - #region Methods - - protected IAsyncResult BeginInvoke (string methodName, object[] parameters, AsyncCallback callback, object asyncState) - { - SoapMethodStubInfo msi = (SoapMethodStubInfo) type_info.GetMethod (methodName); - - SoapWebClientAsyncResult ainfo = null; - try - { - SoapClientMessage message = new SoapClientMessage (this, msi, Url, parameters); - message.CollectHeaders (this, message.MethodStubInfo.Headers, SoapHeaderDirection.In); - - WebRequest request = GetRequestForMessage (uri, message); - - ainfo = new SoapWebClientAsyncResult (request, callback, asyncState); - ainfo.Message = message; - ainfo.Extensions = SoapExtension.CreateExtensionChain (type_info.SoapExtensions[0], msi.SoapExtensions, type_info.SoapExtensions[1]); - - ainfo.Request.BeginGetRequestStream (new AsyncCallback (AsyncGetRequestStreamDone), ainfo); - } - catch (Exception ex) - { - if (ainfo != null) - ainfo.SetCompleted (null, ex, false); - } - - return ainfo; - } - - void AsyncGetRequestStreamDone (IAsyncResult ar) - { - SoapWebClientAsyncResult ainfo = (SoapWebClientAsyncResult) ar.AsyncState; - try - { - SendRequest (ainfo.Request.EndGetRequestStream (ar), ainfo.Message, ainfo.Extensions); - ainfo.Request.BeginGetResponse (new AsyncCallback (AsyncGetResponseDone), ainfo); - } - catch (Exception ex) - { - ainfo.SetCompleted (null, ex, true); - } - } - - void AsyncGetResponseDone (IAsyncResult ar) - { - SoapWebClientAsyncResult ainfo = (SoapWebClientAsyncResult) ar.AsyncState; - WebResponse response = null; - - try { - response = GetWebResponse (ainfo.Request, ar); - } - catch (WebException ex) { - response = ex.Response; - HttpWebResponse http_response = response as HttpWebResponse; - if (http_response == null || http_response.StatusCode != HttpStatusCode.InternalServerError) { - ainfo.SetCompleted (null, ex, true); - return; - } - } - catch (Exception ex) { - ainfo.SetCompleted (null, ex, true); - return; - } - - try { - object[] result = ReceiveResponse (response, ainfo.Message, ainfo.Extensions); - ainfo.SetCompleted (result, null, true); - } - catch (Exception ex) { - ainfo.SetCompleted (null, ex, true); - } - } - - protected object[] EndInvoke (IAsyncResult asyncResult) - { - if (!(asyncResult is SoapWebClientAsyncResult)) throw new ArgumentException ("asyncResult is not the return value from BeginInvoke"); - - SoapWebClientAsyncResult ainfo = (SoapWebClientAsyncResult) asyncResult; - lock (ainfo) - { - if (!ainfo.IsCompleted) ainfo.WaitForComplete (); - if (ainfo.Exception != null) throw ainfo.Exception; - else return (object[]) ainfo.Result; - } - } - - public void Discover () - { - BindingInfo bnd = (BindingInfo) type_info.Bindings [0]; - - DiscoveryClientProtocol discoverer = new DiscoveryClientProtocol (); - discoverer.Discover (Url); - - foreach (object info in discoverer.AdditionalInformation) - { - System.Web.Services.Discovery.SoapBinding sb = info as System.Web.Services.Discovery.SoapBinding; - if (sb != null && sb.Binding.Name == bnd.Name && sb.Binding.Namespace == bnd.Namespace) { - Url = sb.Address; - return; - } - } - - string msg = string.Format ("The binding named '{0}' from namespace '{1}' was not found in the discovery document at '{2}'", bnd.Name, bnd.Namespace, Url); - throw new Exception (msg); - } - - protected override WebRequest GetWebRequest (Uri uri) - { - return base.GetWebRequest (uri); - } - - WebRequest GetRequestForMessage (Uri uri, SoapClientMessage message) - { - WebRequest request = GetWebRequest (uri); - request.Method = "POST"; - WebHeaderCollection headers = request.Headers; - headers.Add ("SOAPAction", "\"" + message.Action + "\""); - request.ContentType = message.ContentType + "; charset=utf-8"; - return request; - } - - void SendRequest (Stream s, SoapClientMessage message, SoapExtension[] extensions) - { - using (s) { - - if (extensions != null) { - s = SoapExtension.ExecuteChainStream (extensions, s); - message.SetStage (SoapMessageStage.BeforeSerialize); - SoapExtension.ExecuteProcessMessage (extensions, message, true); - } - - XmlTextWriter xtw = WebServiceHelper.CreateXmlWriter (s); - - WebServiceHelper.WriteSoapMessage (xtw, type_info, message.MethodStubInfo.Use, message.MethodStubInfo.RequestSerializer, message.Parameters, message.Headers); - - if (extensions != null) { - message.SetStage (SoapMessageStage.AfterSerialize); - SoapExtension.ExecuteProcessMessage (extensions, message, true); - } - - xtw.Flush (); - xtw.Close (); - } - } - - - // - // TODO: - // Handle other web responses (multi-output?) - // - object [] ReceiveResponse (WebResponse response, SoapClientMessage message, SoapExtension[] extensions) - { - SoapMethodStubInfo msi = message.MethodStubInfo; - HttpWebResponse http_response = response as HttpWebResponse; - - if (http_response != null) - { - HttpStatusCode code = http_response.StatusCode; - - if (!(code == HttpStatusCode.Accepted || code == HttpStatusCode.OK || code == HttpStatusCode.InternalServerError)) { - string msg = "The request failed with HTTP status {0}: {1}"; - msg = String.Format (msg, (int) code, code); - throw new WebException (msg, null, WebExceptionStatus.ProtocolError, http_response); - } - if (response.ContentLength == 0 && (code == HttpStatusCode.Accepted || code == HttpStatusCode.OK)) { - return new object[0]; - } - } - - // - // Remove optional encoding - // - string ctype; - Encoding encoding = WebServiceHelper.GetContentEncoding (response.ContentType, out ctype); - if (ctype != "text/xml") - WebServiceHelper.InvalidOperation ( - "Content is not 'text/xml' but '" + response.ContentType + "'", - response, encoding); - - message.ContentType = ctype; - message.ContentEncoding = encoding.WebName; - - Stream stream = response.GetResponseStream (); - - if (extensions != null) { - stream = SoapExtension.ExecuteChainStream (extensions, stream); - message.SetStage (SoapMessageStage.BeforeDeserialize); - SoapExtension.ExecuteProcessMessage (extensions, message, false); - } - - // Deserialize the response - - SoapHeaderCollection headers; - object content; - - using (StreamReader reader = new StreamReader (stream, encoding, false)) { - XmlTextReader xml_reader = new XmlTextReader (reader); - - WebServiceHelper.ReadSoapMessage (xml_reader, type_info, msi.Use, msi.ResponseSerializer, - out content, out headers); - } - - - if (content is Fault) - { - Fault fault = (Fault) content; - SoapException ex = new SoapException (fault.faultstring, fault.faultcode, fault.faultactor, fault.detail); - message.SetException (ex); - } - else - message.OutParameters = (object[]) content; - - message.SetHeaders (headers); - message.UpdateHeaderValues (this, message.MethodStubInfo.Headers); - - if (extensions != null) { - message.SetStage (SoapMessageStage.AfterDeserialize); - SoapExtension.ExecuteProcessMessage (extensions, message, false); - } - - if (message.Exception == null) - return message.OutParameters; - else - throw message.Exception; - } - - protected object[] Invoke (string method_name, object[] parameters) - { - SoapMethodStubInfo msi = (SoapMethodStubInfo) type_info.GetMethod (method_name); - - SoapClientMessage message = new SoapClientMessage (this, msi, Url, parameters); - message.CollectHeaders (this, message.MethodStubInfo.Headers, SoapHeaderDirection.In); - - SoapExtension[] extensions = SoapExtension.CreateExtensionChain (type_info.SoapExtensions[0], msi.SoapExtensions, type_info.SoapExtensions[1]); - - WebResponse response; - try - { - WebRequest request = GetRequestForMessage (uri, message); - SendRequest (request.GetRequestStream (), message, extensions); - response = GetWebResponse (request); - } - catch (WebException ex) - { - response = ex.Response; - HttpWebResponse http_response = response as HttpWebResponse; - if (http_response == null || http_response.StatusCode != HttpStatusCode.InternalServerError) - throw ex; - } - - return ReceiveResponse (response, message, extensions); - } - -#if NET_2_0 - - [MonoTODO ("Do something with this")] - [System.Runtime.InteropServices.ComVisible(false)] - [Obsolete] - public WsiClaims ConformanceClaims { - get { return conformanceClaims; } - set { conformanceClaims = value; } - } - - [MonoTODO ("Do something with this")] - [System.Runtime.InteropServices.ComVisible(false)] - public SoapProtocolVersion SoapVersion { - get { return soapVersion; } - set { soapVersion = value; } - } - - protected void InvokeAsync (string methodName, object[] parameters, SendOrPostCallback callback) - { - InvokeAsync (methodName, parameters, callback, null); - } - - protected void InvokeAsync (string methodName, object[] parameters, SendOrPostCallback callback, object userState) - { - InvokeAsyncInfo info = new InvokeAsyncInfo (callback, userState); - BeginInvoke (methodName, parameters, new AsyncCallback (InvokeAsyncCallback), info); - } - - void InvokeAsyncCallback (IAsyncResult ar) - { - InvokeAsyncInfo info = (InvokeAsyncInfo) ar.AsyncState; - SoapWebClientAsyncResult sar = (SoapWebClientAsyncResult) ar; - InvokeCompletedEventArgs args = new InvokeCompletedEventArgs (sar.Exception, false, info.UserState, (object[]) sar.Result); - if (info.Context != null) - info.Context.SendOrPost (info.Callback, args); - else - info.Callback (args); - } - -#endif - - #endregion // Methods - } -} - diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs deleted file mode 100644 index 791934a4556..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs +++ /dev/null @@ -1,240 +0,0 @@ -// -// System.Web.Services.Protocols.SoapMessage.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public abstract class SoapMessage { - - #region Fields - - string content_type = "text/xml"; - string content_encoding; - SoapException exception = null; - SoapHeaderCollection headers; - SoapMessageStage stage; - Stream stream; - object[] inParameters; - object[] outParameters; - -#if NET_2_0 - SoapProtocolVersion soapVersion; -#endif - - #endregion // Fields - - #region Constructors - - internal SoapMessage () - { - headers = new SoapHeaderCollection (); - } - - internal SoapMessage (Stream stream) - { - this.stream = stream; - } - - internal SoapMessage (Stream stream, SoapException exception) - { - this.exception = exception; - this.stream = stream; - headers = new SoapHeaderCollection (); - } - - #endregion - - #region Properties - - internal object[] InParameters - { - get { return inParameters; } - set { inParameters = value; } - } - - internal object[] OutParameters - { - get { return outParameters; } - set { outParameters = value; } - } - - public abstract string Action - { - get; - } - - public string ContentType { - get { return content_type; } - set { content_type = value; } - } - - public SoapException Exception { - get { return exception; } -#if NET_2_0 - set { exception = value; } -#endif - } - - public SoapHeaderCollection Headers { - get { return headers; } - } - - public abstract LogicalMethodInfo MethodInfo { - get; - } - - public abstract bool OneWay { - get; - } - - public SoapMessageStage Stage { - get { return stage; } - } - - internal void SetStage (SoapMessageStage stage) - { - this.stage = stage; - } - - public Stream Stream { - get { - return stream; - } - } - - public abstract string Url { - get; - } - -#if NET_1_1 - public string ContentEncoding - { - get { return content_encoding; } - set { content_encoding = value; } - } -#else - internal string ContentEncoding - { - get { return content_encoding; } - set { content_encoding = value; } - } -#endif - -#if NET_2_0 - [System.Runtime.InteropServices.ComVisible(false)] - public virtual SoapProtocolVersion SoapVersion { - get { return soapVersion; } - } -#endif - - #endregion Properties - - #region Methods - - protected abstract void EnsureInStage (); - protected abstract void EnsureOutStage (); - - protected void EnsureStage (SoapMessageStage stage) - { - if ((((int) stage) & ((int) Stage)) == 0) - throw new InvalidOperationException ("The current SoapMessageStage is not the asserted stage or stages."); - } - - public object GetInParameterValue (int index) - { - return inParameters [index]; - } - - public object GetOutParameterValue (int index) - { - if (MethodInfo.IsVoid) return outParameters [index]; - else return outParameters [index + 1]; - } - - public object GetReturnValue () - { - if (!MethodInfo.IsVoid && exception == null) return outParameters [0]; - else return null; - } - - internal void SetHeaders (SoapHeaderCollection headers) - { - this.headers = headers; - } - - internal void SetException (SoapException ex) - { - exception = ex; - } - - internal void CollectHeaders (object target, HeaderInfo[] headers, SoapHeaderDirection direction) - { - Headers.Clear (); - foreach (HeaderInfo hi in headers) - { - if ((hi.Direction & direction) != 0 && !hi.IsUnknownHeader) - { - SoapHeader headerVal = hi.GetHeaderValue (target) as SoapHeader; - if (headerVal != null) - Headers.Add (headerVal); - } - } - } - - internal void UpdateHeaderValues (object target, HeaderInfo[] headersInfo) - { - foreach (SoapHeader header in Headers) - { - HeaderInfo hinfo = FindHeader (headersInfo, header.GetType ()); - if (hinfo != null) { - hinfo.SetHeaderValue (target, header); - header.DidUnderstand = !hinfo.IsUnknownHeader; - } - } - } - - HeaderInfo FindHeader (HeaderInfo[] headersInfo, Type headerType) - { - HeaderInfo unknownHeaderInfo = null; - - foreach (HeaderInfo headerInfo in headersInfo) { - if (headerInfo.HeaderType == headerType) - return headerInfo; - else if (headerInfo.IsUnknownHeader) - unknownHeaderInfo = headerInfo; - } - return unknownHeaderInfo; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessageStage.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessageStage.cs deleted file mode 100644 index cc392ee27d5..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessageStage.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.Services.Protocols.SoapMessageStage.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols { - - [Serializable] - public enum SoapMessageStage { - AfterDeserialize = 0x8, - AfterSerialize = 0x2, - BeforeDeserialize = 0x4, - BeforeSerialize = 0x1 - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapParameterStyle.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapParameterStyle.cs deleted file mode 100644 index cf868ca5fa6..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapParameterStyle.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.Services.Protocols.SoapParameterStyle.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols { - [Serializable] - public enum SoapParameterStyle { - Default = 0x0, - Bare = 0x1, - Wrapped = 0x2 - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapProtocolVersion.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapProtocolVersion.cs deleted file mode 100644 index 29d40a72d76..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapProtocolVersion.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.Services.Protocols.SoapProtocolVersion.cs -// -// Author: -// Lluis Sanchez (lluis@novell.com) -// -// Copyright (C) Novell, Inc., 2004 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#if NET_2_0 - -namespace System.Web.Services.Protocols -{ - [Serializable] - public enum SoapProtocolVersion - { - Default, - Soap11, - Soap12 - } -} - -#endif diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapRpcMethodAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapRpcMethodAttribute.cs deleted file mode 100644 index 9958766faa8..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapRpcMethodAttribute.cs +++ /dev/null @@ -1,113 +0,0 @@ -// -// System.Web.Services.Protocols.SoapRpcMethodAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Description; - -namespace System.Web.Services.Protocols { - [AttributeUsage (AttributeTargets.Method, Inherited = true)] - public sealed class SoapRpcMethodAttribute : Attribute { - - #region Fields - - string action; - string binding; - bool oneWay; - string requestElementName; - string requestNamespace; - string responseElementName; - string responseNamespace; - -#if NET_2_0 - SoapBindingUse use; -#endif - #endregion // Fields - - #region Constructors - - public SoapRpcMethodAttribute () - { - } - - public SoapRpcMethodAttribute (string action) - : this () - { - this.action = action; - } - - #endregion // Constructors - - #region Properties - - public string Action { - get { return action != null ? action : ""; } - set { action = value; } - } - - public string Binding { - get { return binding; } - set { binding = value; } - } - - public bool OneWay { - get { return oneWay; } - set { oneWay = value; } - } - - public string RequestElementName { - get { return requestElementName != null ? requestElementName : ""; } - set { requestElementName = value; } - } - - public string RequestNamespace { - get { return requestNamespace != null ? requestNamespace : ""; } - set { requestNamespace = value; } - } - - public string ResponseElementName { - get { return responseElementName != null ? responseElementName : ""; } - set { responseElementName = value; } - } - - public string ResponseNamespace { - get { return responseNamespace != null ? responseNamespace : ""; } - set { responseNamespace = value; } - } - -#if NET_2_0 - [System.Runtime.InteropServices.ComVisible(false)] - public SoapBindingUse Use { - get { return use; } - set { use = value; } - } -#endif - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapRpcServiceAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapRpcServiceAttribute.cs deleted file mode 100644 index 4a8ecc02df0..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapRpcServiceAttribute.cs +++ /dev/null @@ -1,72 +0,0 @@ -// -// System.Web.Services.Protocols.SoapRpcServiceAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services.Description; - -namespace System.Web.Services.Protocols { - [AttributeUsage (AttributeTargets.Class, Inherited = true)] - public sealed class SoapRpcServiceAttribute : Attribute { - - #region Fields - - SoapServiceRoutingStyle routingStyle; -#if NET_2_0 - SoapBindingUse use; -#endif - - #endregion // Fields - - #region Constructors - - public SoapRpcServiceAttribute () - { - routingStyle = SoapServiceRoutingStyle.SoapAction; - } - - #endregion // Constructors - - #region Properties - - public SoapServiceRoutingStyle RoutingStyle { - get { return routingStyle; } - set { routingStyle = value; } - } - -#if NET_2_0 - [System.Runtime.InteropServices.ComVisible(false)] - public SoapBindingUse Use { - get { return use; } - set { use = value; } - } -#endif - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServerMessage.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServerMessage.cs deleted file mode 100644 index b86ceb0b974..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServerMessage.cs +++ /dev/null @@ -1,120 +0,0 @@ -// -// System.Web.Services.Protocols.SoapServerMessage.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.IO; - -namespace System.Web.Services.Protocols { - public sealed class SoapServerMessage : SoapMessage { - - #region Fields - - string action; - SoapMethodStubInfo stubInfo; - object server; - string url; - object[] parameters; - - #endregion - - #region Constructors - - internal SoapServerMessage (HttpRequest request, object server, Stream stream) - : base (stream, null) - { - this.action = request.Headers ["SOAPAction"]; - this.server = server; - this.url = request.Url.ToString(); - } - - internal SoapServerMessage (HttpRequest request, SoapException exception, SoapMethodStubInfo stubInfo, object server, Stream stream) - : base (stream, exception) - { - this.action = request.Headers ["SOAPAction"]; - this.stubInfo = stubInfo; - this.server = server; - this.url = request.Url.ToString(); - } - - #endregion - - #region Properties - - public override LogicalMethodInfo MethodInfo { - get { return stubInfo.MethodInfo; } - } - - public override string Action { - get { return action; } - } - - internal SoapMethodStubInfo MethodStubInfo { - get { return stubInfo; } - set { stubInfo = value; } - } - - public override bool OneWay { - get { return stubInfo.OneWay; } - } - - public object Server { - get { return server; } - } - - public override string Url { - get { return url; } - } - -#if NET_2_0 - [MonoTODO] - [System.Runtime.InteropServices.ComVisible(false)] - public override SoapProtocolVersion SoapVersion { - get { throw new NotImplementedException (); } - } -#endif - - #endregion // Properties - - #region Methods - - protected override void EnsureInStage () - { - EnsureStage (SoapMessageStage.AfterDeserialize); - } - - protected override void EnsureOutStage () - { - EnsureStage (SoapMessageStage.BeforeSerialize); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServerProtocol.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServerProtocol.cs deleted file mode 100644 index 866778f6be1..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServerProtocol.cs +++ /dev/null @@ -1,90 +0,0 @@ -// -// System.Web.Services.Protocols.SoapServerProtocol.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - [MonoTODO ("Figure out what this class does.")] - internal class SoapServerProtocol : ServerProtocol { - - #region Fields - - bool isOneWay; - - #endregion // Fields - - #region Properties - - public override bool IsOneWay { - get { return isOneWay; } - } - - [MonoTODO] - public override LogicalMethodInfo MethodInfo { - get { throw new NotImplementedException (); } - } - - [MonoTODO] - public override Exception OnewayInitException { - get { throw new NotImplementedException (); } - } - - #endregion // Properties - - #region Methods - - [MonoTODO] - public override bool Initialize () - { - throw new NotImplementedException (); - } - - [MonoTODO] - public override object[] ReadParameters () - { - throw new NotImplementedException (); - } - - [MonoTODO] - public override bool WriteException (Exception e, Stream outputStream) - { - throw new NotImplementedException (); - } - - [MonoTODO] - public override void WriteReturns (object[] returnValues, Stream outputStream) - { - throw new NotImplementedException (); - } - - #endregion - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServiceRoutingStyle.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServiceRoutingStyle.cs deleted file mode 100644 index 09be05c89cf..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapServiceRoutingStyle.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.Services.Protocols.SoapServiceRoutingStyle.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services.Protocols { - [Serializable] - public enum SoapServiceRoutingStyle { - SoapAction = 0x0, - RequestElement = 0x1 - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapUnknownHeader.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapUnknownHeader.cs deleted file mode 100644 index e4c4bb37023..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapUnknownHeader.cs +++ /dev/null @@ -1,67 +0,0 @@ -// -// System.Web.Services.Protocols.SoapUnknownHeader.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Xml; -using System.Xml.Serialization; - -namespace System.Web.Services.Protocols { - public sealed class SoapUnknownHeader : SoapHeader { - - #region Fields - - XmlElement element; - - #endregion // Fields - - #region Constructors - - public SoapUnknownHeader () - { - element = null; - } - - internal SoapUnknownHeader (XmlElement elem): base (elem) - { - element = elem; - } - - #endregion // Constructors - - #region Properties - - [XmlIgnore] - public XmlElement Element { - get { return element; } - set { element = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/TextReturnReader.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/TextReturnReader.cs deleted file mode 100644 index 6285a3141be..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/TextReturnReader.cs +++ /dev/null @@ -1,71 +0,0 @@ -// -// System.Web.Services.Protocols.TextReturnReader.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.IO; -using System.Net; - -namespace System.Web.Services.Protocols { - public class TextReturnReader : MimeReturnReader { - - PatternMatcher _matcher; - - #region Constructors - - public TextReturnReader () - { - } - - #endregion // Constructors - - #region Methods - - public override object GetInitializer (LogicalMethodInfo methodInfo) - { - return new PatternMatcher (methodInfo.ReturnType); - } - - public override void Initialize (object o) - { - _matcher = (PatternMatcher) o; - } - - public override object Read (WebResponse response, Stream responseStream) - { - StreamReader sr = new StreamReader (responseStream); - string text = sr.ReadToEnd (); - return _matcher.Match (text); - } - - #endregion // Methods - } -} - diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/TypeStubManager.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/TypeStubManager.cs deleted file mode 100644 index d050868bbdf..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/TypeStubManager.cs +++ /dev/null @@ -1,404 +0,0 @@ -// -// Methods.cs: Information about a method and its mapping to a SOAP web service. -// -// Author: -// Miguel de Icaza -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Reflection; -using System.Collections; -using System.Xml; -using System.Xml.Serialization; -using System.Web.Services; -using System.Web.Services.Description; - -namespace System.Web.Services.Protocols { - - // - // This class represents all the information we extract from a MethodInfo - // in the WebClientProtocol derivative stub class - // - internal class MethodStubInfo - { - internal LogicalMethodInfo MethodInfo; - internal TypeStubInfo TypeStub; - - // The name used by the stub class to reference this method. - internal string Name; - internal WebMethodAttribute MethodAttribute; - - internal string OperationName - { - get { return MethodInfo.Name; } - } - - // - // Constructor - // - public MethodStubInfo (TypeStubInfo parent, LogicalMethodInfo source) - { - TypeStub = parent; - MethodInfo = source; - - object [] o = source.GetCustomAttributes (typeof (WebMethodAttribute)); - if (o.Length > 0) - { - MethodAttribute = (WebMethodAttribute) o [0]; - Name = MethodAttribute.MessageName; - if (Name == "") Name = source.Name; - } - else - Name = source.Name; - } - } - - // - // Holds the metadata loaded from the type stub, as well as - // the metadata for all the methods in the type - // - internal class TypeStubInfo - { - Hashtable name_to_method = new Hashtable (); - MethodStubInfo[] methods; - ArrayList bindings = new ArrayList (); - LogicalTypeInfo logicalType; - string defaultBinding; - ArrayList mappings; - XmlSerializer[] serializers; - - public TypeStubInfo (LogicalTypeInfo logicalTypeInfo) - { - this.logicalType = logicalTypeInfo; - - defaultBinding = logicalType.WebServiceName + ProtocolName; - BindingInfo binfo = new BindingInfo (defaultBinding, logicalType.WebServiceNamespace); - Bindings.Add (binfo); - } - - public LogicalTypeInfo LogicalType - { - get { return logicalType; } - } - - public Type Type - { - get { return logicalType.Type; } - } - - public string DefaultBinding - { - get { return defaultBinding; } - } - - public virtual XmlReflectionImporter XmlImporter - { - get { return null; } - } - - public virtual SoapReflectionImporter SoapImporter - { - get { return null; } - } - - public virtual string ProtocolName - { - get { return null; } - } - - public XmlSerializer GetSerializer (int n) - { - return serializers [n]; - } - - public int RegisterSerializer (XmlMapping map) - { - if (mappings == null) mappings = new ArrayList (); - return mappings.Add (map); - } - - public void Initialize () - { - BuildTypeMethods (); - - if (mappings != null) - { - // Build all the serializers at once - XmlMapping[] maps = (XmlMapping[]) mappings.ToArray(typeof(XmlMapping)); - serializers = XmlSerializer.FromMappings (maps); - } - } - - // - // Extract all method information - // - protected virtual void BuildTypeMethods () - { - bool isClientProxy = typeof(WebClientProtocol).IsAssignableFrom (Type); - - ArrayList metStubs = new ArrayList (); - foreach (LogicalMethodInfo mi in logicalType.LogicalMethods) - { - if (!isClientProxy && mi.CustomAttributeProvider.GetCustomAttributes (typeof(WebMethodAttribute), true).Length == 0) - continue; - - MethodStubInfo msi = CreateMethodStubInfo (this, mi, isClientProxy); - - if (msi == null) - continue; - - if (name_to_method.ContainsKey (msi.Name)) { - string msg = "Both " + msi.MethodInfo.ToString () + " and " + GetMethod (msi.Name).MethodInfo + " use the message name '" + msi.Name + "'. "; - msg += "Use the MessageName property of WebMethod custom attribute to specify unique message names for the methods"; - throw new InvalidOperationException (msg); - } - - name_to_method [msi.Name] = msi; - metStubs.Add (msi); - } - methods = (MethodStubInfo[]) metStubs.ToArray (typeof (MethodStubInfo)); - } - - protected virtual MethodStubInfo CreateMethodStubInfo (TypeStubInfo typeInfo, LogicalMethodInfo methodInfo, bool isClientProxy) - { - return new MethodStubInfo (typeInfo, methodInfo); - } - - public MethodStubInfo GetMethod (string name) - { - return (MethodStubInfo) name_to_method [name]; - } - - public MethodStubInfo[] Methods - { - get { return methods; } - } - - internal ArrayList Bindings - { - get { return bindings; } - } - - internal void AddBinding (BindingInfo info) - { - bindings.Add (info); - } - - internal BindingInfo GetBinding (string name) - { - if (name == null || name.Length == 0) return (BindingInfo) bindings[0]; - - for (int n=1; n 0) { - SoapDocumentServiceAttribute at = (SoapDocumentServiceAttribute) o[0]; - useEncoded = (at.Use == SoapBindingUse.Encoded); - } - else if (t.GetCustomAttributes (typeof(SoapRpcServiceAttribute), true).Length > 0) - useEncoded = true; - - string sep = WebServiceNamespace.EndsWith ("/") ? "" : "/"; - - if (useEncoded) { - WebServiceEncodedNamespace = WebServiceNamespace; - WebServiceLiteralNamespace = WebServiceNamespace + sep + "literalTypes"; - } - else { - WebServiceEncodedNamespace = WebServiceNamespace + sep + "encodedTypes"; - WebServiceLiteralNamespace = WebServiceNamespace; - } - - WebServiceAbstractNamespace = WebServiceNamespace + sep + "AbstractTypes"; - - MethodInfo [] type_methods = Type.GetMethods (BindingFlags.Instance | BindingFlags.Public); - logicalMethods = LogicalMethodInfo.Create (type_methods, LogicalMethodTypes.Sync); - } - - public LogicalMethodInfo[] LogicalMethods - { - get { return logicalMethods; } - } - - public TypeStubInfo GetTypeStub (string protocolName) - { - lock (this) - { - switch (protocolName) - { - case "Soap": - if (soapProtocol == null) soapProtocol = CreateTypeStubInfo (typeof(SoapTypeStubInfo)); - return soapProtocol; - case "HttpGet": - if (httpGetProtocol == null) httpGetProtocol = CreateTypeStubInfo (typeof(HttpGetTypeStubInfo)); - return httpGetProtocol; - case "HttpPost": - if (httpPostProtocol == null) httpPostProtocol = CreateTypeStubInfo (typeof(HttpPostTypeStubInfo)); - return httpPostProtocol; - } - } - throw new InvalidOperationException ("Protocol " + protocolName + " not supported"); - } - - TypeStubInfo CreateTypeStubInfo (Type type) - { - TypeStubInfo tsi = (TypeStubInfo) Activator.CreateInstance (type, new object[] {this}); - tsi.Initialize (); - return tsi; - } - - public string GetWebServiceLiteralNamespace (string baseNamespace) - { - if (useEncoded) { - string sep = baseNamespace.EndsWith ("/") ? "" : "/"; - return baseNamespace + sep + "literalTypes"; - } - else - return baseNamespace; - } - - public string GetWebServiceEncodedNamespace (string baseNamespace) - { - if (useEncoded) - return baseNamespace; - else { - string sep = baseNamespace.EndsWith ("/") ? "" : "/"; - return baseNamespace + sep + "encodedTypes"; - } - } - - public string GetWebServiceNamespace (string baseNamespace, SoapBindingUse use) - { - if (use == SoapBindingUse.Literal) return GetWebServiceLiteralNamespace (baseNamespace); - else return GetWebServiceEncodedNamespace (baseNamespace); - } - - } - - // - // Manages type stubs - // - internal class TypeStubManager - { - static Hashtable type_to_manager; - - static TypeStubManager () - { - type_to_manager = new Hashtable (); - } - - static internal TypeStubInfo GetTypeStub (Type t, string protocolName) - { - LogicalTypeInfo tm = GetLogicalTypeInfo (t); - return tm.GetTypeStub (protocolName); - } - - // - // This needs to be thread safe - // - static internal LogicalTypeInfo GetLogicalTypeInfo (Type t) - { - lock (type_to_manager) - { - LogicalTypeInfo tm = (LogicalTypeInfo) type_to_manager [t]; - - if (tm != null) - return tm; - - tm = new LogicalTypeInfo (t); - type_to_manager [t] = tm; - - return tm; - } - } - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlEncodedParameterWriter.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlEncodedParameterWriter.cs deleted file mode 100644 index c27f7e9fcfd..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlEncodedParameterWriter.cs +++ /dev/null @@ -1,102 +0,0 @@ -// -// System.Web.Services.Protocols.UrlEncodedParameterWriter.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Text; -using System.Web.Services; -using System.Web; -using System.Reflection; - -namespace System.Web.Services.Protocols { - public abstract class UrlEncodedParameterWriter : MimeParameterWriter { - - Encoding requestEncoding; - ParameterInfo[] parameters; - - #region Constructors - - protected UrlEncodedParameterWriter () - { - } - - #endregion // Constructors - - #region Properties - - public override Encoding RequestEncoding { - get { return requestEncoding; } - set { requestEncoding = value; } - } - - #endregion // Properties - - #region Methods - - protected void Encode (TextWriter writer, object[] values) - { - for (int n=0; n0) writer.Write ("&"); - Encode (writer, parameters[n].Name, values[n]); - } - } - - protected void Encode (TextWriter writer, string name, object value) - { - if (requestEncoding != null) - { - writer.Write (HttpUtility.UrlEncode (name, requestEncoding)); - writer.Write ("="); - writer.Write (HttpUtility.UrlEncode (ObjToString (value), requestEncoding)); - } - else - { - writer.Write (HttpUtility.UrlEncode (name)); - writer.Write ("="); - writer.Write (HttpUtility.UrlEncode (ObjToString (value))); - } - - } - - public override object GetInitializer (LogicalMethodInfo methodInfo) - { - if (methodInfo.OutParameters.Length > 0) return null; - else return methodInfo.Parameters; - } - - public override void Initialize (object initializer) - { - parameters = (ParameterInfo[]) initializer; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlParameterReader.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlParameterReader.cs deleted file mode 100644 index 4f8d8645a45..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlParameterReader.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -// System.Web.Services.Protocols.UrlParameterReader.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public class UrlParameterReader : ValueCollectionParameterReader { - - #region Constructors - - public UrlParameterReader () - { - } - - #endregion // Constructors - - #region Methods - - public override object[] Read (HttpRequest request) - { - return Read (request.QueryString); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlParameterWriter.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlParameterWriter.cs deleted file mode 100644 index 229313aa1eb..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/UrlParameterWriter.cs +++ /dev/null @@ -1,57 +0,0 @@ -// -// System.Web.Services.Protocols.UrlParameterWriter.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.Services; -using System.IO; - -namespace System.Web.Services.Protocols { - public class UrlParameterWriter : UrlEncodedParameterWriter { - - #region Constructors - - public UrlParameterWriter () - { - } - - #endregion // Constructors - - #region Methods - - public override string GetRequestUrl (string url, object[] parameters) - { - StringWriter sw = new StringWriter (); - Encode (sw, parameters); - return url + "?" + sw.ToString (); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/ValueCollectionParameterReader.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/ValueCollectionParameterReader.cs deleted file mode 100644 index cff4b35099e..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/ValueCollectionParameterReader.cs +++ /dev/null @@ -1,109 +0,0 @@ -// -// System.Web.Services.Protocols.ValueCollectionParameterReader.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections.Specialized; -using System.Reflection; -using System.Web; -using System.Xml; - -namespace System.Web.Services.Protocols { - public abstract class ValueCollectionParameterReader : MimeParameterReader { - - ParameterInfo[] parameters; - - #region Constructors - - protected ValueCollectionParameterReader () - { - } - - #endregion // Constructors - - #region Methods - - public override object GetInitializer (LogicalMethodInfo methodInfo) - { - if (IsSupported (methodInfo)) return methodInfo.Parameters; - else return null; - } - - public override void Initialize (object o) - { - parameters = (ParameterInfo[]) o; - } - - public static bool IsSupported (LogicalMethodInfo methodInfo) - { - foreach (ParameterInfo param in methodInfo.Parameters) - if (!IsSupported (param)) return false; - return true; - } - - public static bool IsSupported (ParameterInfo paramInfo) - { - Type type = paramInfo.ParameterType; - if (type.IsByRef || paramInfo.IsOut) return false; - if (type.IsArray) return IsSupportedPrimitive (type.GetElementType()); - else return IsSupportedPrimitive (type); - } - - internal static bool IsSupportedPrimitive (Type type) - { - return ( type.IsPrimitive || - type == typeof(string) || - type == typeof(DateTime) || - type == typeof(Decimal) - ); - } - - protected object[] Read (NameValueCollection collection) - { - object[] res = new object [parameters.Length]; - for (int n=0; n " + ex.Message; - throw new InvalidOperationException (error); - } - } - return res; - } - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebClientAsyncResult.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebClientAsyncResult.cs deleted file mode 100644 index 476f87ac617..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebClientAsyncResult.cs +++ /dev/null @@ -1,125 +0,0 @@ -// -// System.Web.Services.Protocols.WebClientAsyncResult.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Net; -using System.Threading; - -namespace System.Web.Services.Protocols { - public class WebClientAsyncResult : IAsyncResult { - - #region Fields - - AsyncCallback _callback; - object _asyncState; - - bool _completedSynchronously; - bool _done; - ManualResetEvent _waitHandle; - - internal object Result; - internal Exception Exception; - internal WebRequest Request; - - #endregion // Fields - - #region Constructors - - internal WebClientAsyncResult (WebRequest request, AsyncCallback callback, object asyncState) - { - _callback = callback; - Request = request; - _asyncState = asyncState; - } - - #endregion // Constructors - - #region Properties - - public object AsyncState { - get { return _asyncState; } - } - - public WaitHandle AsyncWaitHandle - { - get - { - lock (this) { - if (_waitHandle != null) return _waitHandle; - _waitHandle = new ManualResetEvent (_done); - return _waitHandle; - } - } - } - - public bool CompletedSynchronously - { - get { return _completedSynchronously; } - } - - public bool IsCompleted - { - get { lock (this) { return _done; } } - } - - #endregion // Properties - - #region Methods - - public void Abort () - { - Request.Abort (); - } - - internal void SetCompleted (object result, Exception exception, bool async) - { - lock (this) - { - Exception = exception; - Result = result; - _done = true; - _completedSynchronously = async; - if (_waitHandle != null) _waitHandle.Set (); - Monitor.PulseAll (this); - } - if (_callback != null) _callback (this); - } - - internal void WaitForComplete () - { - lock (this) - { - Monitor.Wait (this); - } - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebClientProtocol.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebClientProtocol.cs deleted file mode 100644 index 65f0f085259..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebClientProtocol.cs +++ /dev/null @@ -1,198 +0,0 @@ -// -// System.Web.Services.Protocols.WebClientProtocol.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections.Specialized; -using System.ComponentModel; -using System.Net; -using System.Text; -using System.Threading; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public abstract class WebClientProtocol : Component { - - #region Fields - - string connectionGroupName; - ICredentials credentials; - bool preAuthenticate; - Encoding requestEncoding; - int timeout; - string url; - bool abort; - - // - // Used by SoapHttpClientProtocol, use this to avoid creating a new Uri on each invocation. - // - internal Uri uri; - - // - // Points to the current request, so we can call Abort() on it - // - WebRequest current_request; - - static HybridDictionary cache; - #endregion - - #region Constructors - - static WebClientProtocol () - { - cache = new HybridDictionary (); - } - - protected WebClientProtocol () - { - connectionGroupName = String.Empty; - credentials = null; - preAuthenticate = false; - requestEncoding = null; - timeout = 100000; - url = String.Empty; - abort = false; - } - - #endregion // Constructors - - #region Properties - - [DefaultValue ("")] - public string ConnectionGroupName { - get { return connectionGroupName; } - set { connectionGroupName = value; } - } - - public ICredentials Credentials { - get { return credentials; } - set { credentials = value; } - } - - [DefaultValue (false)] - [WebServicesDescription ("Enables pre authentication of the request.")] - public bool PreAuthenticate { - get { return preAuthenticate; } - set { preAuthenticate = value; } - } - - [DefaultValue ("")] - [RecommendedAsConfigurable (true)] - [WebServicesDescription ("The encoding to use for requests.")] - public Encoding RequestEncoding { - get { return requestEncoding; } - set { requestEncoding = value; } - } - - [DefaultValue (100000)] - [RecommendedAsConfigurable (true)] - [WebServicesDescription ("Sets the timeout in milliseconds to be used for synchronous calls. The default of -1 means infinite.")] - public int Timeout { - get { return timeout; } - set { timeout = value; } - } - - [DefaultValue ("")] - [RecommendedAsConfigurable (true)] - [WebServicesDescription ("The base URL to the server to use for requests.")] - public string Url { - get { return url; } - set { - url = value; - uri = new Uri (url); - } - } - - #endregion // Properties - - #region Methods - - public virtual void Abort () - { - if (current_request != null){ - current_request.Abort (); - current_request = null; - } - abort = true; - } - - protected static void AddToCache (Type type, object value) - { - cache [type] = value; - } - - protected static object GetFromCache (Type type) - { - return cache [type]; - } - - protected virtual WebRequest GetWebRequest (Uri uri) - { - if (uri == null) - throw new InvalidOperationException ("uri is null"); - - current_request = WebRequest.Create (uri); - current_request.Timeout = timeout; - current_request.PreAuthenticate = preAuthenticate; - current_request.ConnectionGroupName = connectionGroupName; - - if (credentials != null) - current_request.Credentials = credentials; - - return current_request; - } - - protected virtual WebResponse GetWebResponse (WebRequest request) - { - if (abort) - throw new WebException ("The operation has been aborted.", WebExceptionStatus.RequestCanceled); - - WebResponse response = null; - try { - request.Timeout = timeout; - response = request.GetResponse (); - } catch (WebException e) { - response = e.Response; - if (response == null) - throw; - } - - return response; - } - - protected virtual WebResponse GetWebResponse (WebRequest request, IAsyncResult result) - { - if (abort) - throw new WebException ("The operation has been aborted.", WebExceptionStatus.RequestCanceled); - - return request.EndGetResponse (result); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHandler.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHandler.cs deleted file mode 100644 index 8727e6f2724..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHandler.cs +++ /dev/null @@ -1,85 +0,0 @@ -// -// System.Web.Services.Protocols.WebServiceHandler.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Reflection; -using System.Web; -using System.Web.Services; -using System.Web.SessionState; - -namespace System.Web.Services.Protocols -{ - internal class WebServiceHandler: IHttpHandler - { - Type _type; - HttpContext _context; - HttpSessionState session; - - - public WebServiceHandler (Type type) - { - _type = type; - } - - public Type ServiceType - { - get { return _type; } - } - - public virtual bool IsReusable - { - get { return false; } - } - - protected HttpContext Context { - set { _context = value; } - } - - protected HttpSessionState Session { - set { this.session = value; } - } - - internal virtual MethodStubInfo GetRequestMethod (HttpContext context) - { - return null; - } - - public virtual void ProcessRequest (HttpContext context) - { - } - - protected object CreateServerInstance () - { - return Activator.CreateInstance (ServiceType); - } - } -} - diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHandlerFactory.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHandlerFactory.cs deleted file mode 100644 index 45a64642020..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHandlerFactory.cs +++ /dev/null @@ -1,176 +0,0 @@ -// -// System.Web.Services.Protocols.WebServiceHandlerFactory.cs -// -// Authors: -// Tim Coleman (tim@timcoleman.com) -// Dave Bettin (dave@opendotnet.com) -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Tim Coleman, 2002 -// Copyright (c) 2003 Ximian, Inc. (http://www.ximian.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Web.Services; -using System.Web.Services.Configuration; -using System.Web.SessionState; -using System.Web.UI; -using System.Collections.Specialized; - -namespace System.Web.Services.Protocols -{ - class DummyHttpHandler : IHttpHandler - { - bool IHttpHandler.IsReusable { - get { return false; } - } - - void IHttpHandler.ProcessRequest (HttpContext context) - { - // Do nothing - } - } - - class SessionWrapperHandler : IHttpHandler, IRequiresSessionState - { - IHttpHandler handler; - - public SessionWrapperHandler (IHttpHandler handler) - { - this.handler = handler; - } - - public bool IsReusable { - get { return handler.IsReusable; } - } - - public void ProcessRequest (HttpContext context) - { - handler.ProcessRequest (context); - } - } - - class ReadOnlySessionWrapperHandler : IHttpHandler, IRequiresSessionState, IReadOnlySessionState - { - IHttpHandler handler; - - public ReadOnlySessionWrapperHandler (IHttpHandler handler) - { - this.handler = handler; - } - - public bool IsReusable { - get { return handler.IsReusable; } - } - - public void ProcessRequest (HttpContext context) - { - handler.ProcessRequest (context); - } - } - public class WebServiceHandlerFactory : IHttpHandlerFactory - { - - #region Constructors - - public WebServiceHandlerFactory () - { - } - - #endregion // Constructors - - #region Methods - - public IHttpHandler GetHandler (HttpContext context, string verb, string url, string filePath) - { - Type type = WebServiceParser.GetCompiledType (filePath, context); - - WSProtocol protocol = GuessProtocol (context, verb); - IHttpHandler handler = null; - - if (!WSConfig.IsSupported (protocol)) - return new DummyHttpHandler (); - - switch (protocol) { - case WSProtocol.HttpSoap: - handler = GetTypeHandler (context, new HttpSoapWebServiceHandler (type)); - break; - case WSProtocol.HttpPost: - case WSProtocol.HttpGet: - handler = GetTypeHandler (context, new HttpSimpleWebServiceHandler (type, protocol.ToString ())); - break; - case WSProtocol.Documentation: - SoapDocumentationHandler soapHandler; - soapHandler = new SoapDocumentationHandler (type, context); - if (soapHandler.PageHandler is IRequiresSessionState) { - if (soapHandler.PageHandler is IReadOnlySessionState) - handler = new ReadOnlySessionWrapperHandler (soapHandler); - else - handler = new SessionWrapperHandler (soapHandler); - } else { - handler = soapHandler; - } - break; - } - - return handler; - } - - IHttpHandler GetTypeHandler (HttpContext context, WebServiceHandler handler) - { - MethodStubInfo method = handler.GetRequestMethod (context); - if (method == null) return null; - - if (method.MethodInfo.EnableSession) - return new SessionWrapperHandler (handler); - else - return handler; - } - - static WSProtocol GuessProtocol (HttpContext context, string verb) - { - if (context.Request.PathInfo == null || context.Request.PathInfo == "") - { - if (context.Request.RequestType == "GET") - return WSProtocol.Documentation; - else - return WSProtocol.HttpSoap; - } - else - { - if (context.Request.RequestType == "GET") - return WSProtocol.HttpGet; - else - return WSProtocol.HttpPost; - } - } - - public void ReleaseHandler (IHttpHandler handler) - { - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHelper.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHelper.cs deleted file mode 100755 index 2ff25cd1bd3..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHelper.cs +++ /dev/null @@ -1,215 +0,0 @@ -// -// System.Web.Services.Protocols.WebServiceHelper.cs -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// Copyright (C) Ximian, Inc. 2003 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.IO; -using System.Net; -using System.Text; -using System.Xml; -using System.Xml.Schema; -using System.Xml.Serialization; -using System.Web.Services.Description; - -namespace System.Web.Services.Protocols -{ - internal class WebServiceHelper - { - public const string SoapEnvelopeNamespace = "http://schemas.xmlsoap.org/soap/envelope/"; - static readonly char [] trimChars = { '"', '\'' }; - static readonly bool prettyXml; - - static WebServiceHelper () - { - string pxml = Environment.GetEnvironmentVariable ("MONO_WEBSERVICES_PRETTYXML"); - prettyXml = (pxml != null && pxml != "no"); - } - - public static XmlTextWriter CreateXmlWriter (Stream s) - { - // What a waste of UTF8encoders, but it has to be thread safe. - XmlTextWriter xtw = new XmlTextWriter (s, new UTF8Encoding (false)); - - if (prettyXml) - xtw.Formatting = Formatting.Indented; - - return xtw; - } - - public static Encoding GetContentEncoding (string cts, out string content_type) - { - string encoding; - - if (cts == null) cts = ""; - - encoding = "utf-8"; - int start = 0; - int idx = cts.IndexOf (';'); - if (idx == -1) - content_type = cts; - else - content_type = cts.Substring (0, idx); - - content_type = content_type.Trim (); - for (start = idx + 1; idx != -1;) - { - idx = cts.IndexOf (";", start); - string body; - if (idx == -1) - body = cts.Substring (start); - else - { - body = cts.Substring (start, idx - start); - start = idx + 1; - } - body = body.Trim (); - if (body.StartsWith ("charset=")) - { - encoding = body.Substring (8); - encoding = encoding.TrimStart (trimChars).TrimEnd (trimChars); - } - } - - return Encoding.GetEncoding (encoding); - } - - public static void WriteSoapMessage (XmlTextWriter xtw, SoapTypeStubInfo info, SoapBindingUse methodUse, XmlSerializer bodySerializer, object bodyContent, SoapHeaderCollection headers) - { - xtw.WriteStartDocument (); - xtw.WriteStartElement ("soap", "Envelope", WebServiceHelper.SoapEnvelopeNamespace); - xtw.WriteAttributeString ("xmlns", "xsi", null, XmlSchema.InstanceNamespace); - xtw.WriteAttributeString ("xmlns", "xsd", null, XmlSchema.Namespace); - - // Serialize headers - if (headers != null) - { - foreach (SoapHeader header in headers) - { - XmlSerializer ser = info.GetHeaderSerializer (header.GetType(), methodUse); - xtw.WriteStartElement ("soap", "Header", WebServiceHelper.SoapEnvelopeNamespace); - ser.Serialize (xtw, header); - xtw.WriteEndElement (); - } - } - - // Serialize body - xtw.WriteStartElement ("soap", "Body", WebServiceHelper.SoapEnvelopeNamespace); - - if (methodUse == SoapBindingUse.Encoded) - xtw.WriteAttributeString ("encodingStyle", WebServiceHelper.SoapEnvelopeNamespace, "http://schemas.xmlsoap.org/soap/encoding/"); - - bodySerializer.Serialize (xtw, bodyContent); - - xtw.WriteEndElement (); - xtw.WriteEndElement (); - xtw.Flush (); - } - - public static void ReadSoapMessage (XmlTextReader xmlReader, SoapTypeStubInfo typeStubInfo, SoapBindingUse methodUse, XmlSerializer bodySerializer, out object body, out SoapHeaderCollection headers) - { - xmlReader.MoveToContent (); - xmlReader.ReadStartElement ("Envelope", WebServiceHelper.SoapEnvelopeNamespace); - - headers = ReadHeaders (typeStubInfo, methodUse, xmlReader); - - xmlReader.MoveToContent (); - xmlReader.ReadStartElement ("Body", WebServiceHelper.SoapEnvelopeNamespace); - xmlReader.MoveToContent (); - - if (xmlReader.LocalName == "Fault" && xmlReader.NamespaceURI == SoapEnvelopeNamespace) - bodySerializer = Fault.Serializer; - - body = bodySerializer.Deserialize (xmlReader); - } - - static SoapHeaderCollection ReadHeaders (SoapTypeStubInfo typeStubInfo, SoapBindingUse methodUse, XmlTextReader xmlReader) - { - SoapHeaderCollection headers = new SoapHeaderCollection (); - while (! (xmlReader.NodeType == XmlNodeType.Element && xmlReader.LocalName == "Body" && xmlReader.NamespaceURI == WebServiceHelper.SoapEnvelopeNamespace)) - { - if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.LocalName == "Header" - && xmlReader.NamespaceURI == WebServiceHelper.SoapEnvelopeNamespace && !xmlReader.IsEmptyElement) - { - xmlReader.ReadStartElement (); - xmlReader.MoveToContent (); - - while (xmlReader.NodeType != XmlNodeType.Element && xmlReader.NodeType != XmlNodeType.EndElement) - xmlReader.Skip (); - - xmlReader.MoveToContent (); - - if (xmlReader.NodeType == XmlNodeType.Element) { - XmlQualifiedName qname = new XmlQualifiedName (xmlReader.LocalName, xmlReader.NamespaceURI); - XmlSerializer headerSerializer = typeStubInfo.GetHeaderSerializer (qname, methodUse); - if (headerSerializer != null) - { - SoapHeader header = (SoapHeader) headerSerializer.Deserialize (xmlReader); - headers.Add (header); - } - else - { - XmlDocument doc = new XmlDocument (); - XmlElement elem = (XmlElement) doc.ReadNode (xmlReader); - headers.Add (new SoapUnknownHeader (elem)); - } - } - - while (xmlReader.NodeType != XmlNodeType.EndElement) - xmlReader.Skip (); - - xmlReader.ReadEndElement (); - } - else - xmlReader.Skip (); - } - return headers; - } - - public static void InvalidOperation (string message, WebResponse response, Encoding enc) - { - if (response == null) - throw new InvalidOperationException (message); - - if (enc == null) - enc = Encoding.UTF8; - - StringBuilder sb = new StringBuilder (); - sb.Append (message); - sb.Append ("\r\nResponse error message:\r\n--\r\n"); - - try { - StreamReader resp = new StreamReader (response.GetResponseStream (), enc); - sb.Append (resp.ReadToEnd ()); - } catch (Exception) { - } - - throw new InvalidOperationException (sb.ToString ()); - } - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/XmlReturnReader.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/XmlReturnReader.cs deleted file mode 100644 index ec7829c5e05..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/XmlReturnReader.cs +++ /dev/null @@ -1,100 +0,0 @@ -// -// System.Web.Services.Protocols.XmlReturnReader.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Net; -using System.Xml.Serialization; -using System.Web.Services; - -namespace System.Web.Services.Protocols { - public class XmlReturnReader : MimeReturnReader { - - XmlSerializer serializer; - - #region Constructors - - public XmlReturnReader () - { - } - - #endregion // Constructors - - #region Methods - - public override object GetInitializer (LogicalMethodInfo methodInfo) - { - LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (methodInfo.DeclaringType); - object[] ats = methodInfo.ReturnTypeCustomAttributeProvider.GetCustomAttributes (typeof(XmlRootAttribute), true); - XmlRootAttribute root = ats.Length > 0 ? ats[0] as XmlRootAttribute : null; - return new XmlSerializer (methodInfo.ReturnType, null, null, root, sti.GetWebServiceLiteralNamespace (sti.WebServiceNamespace)); - } - - public override object[] GetInitializers (LogicalMethodInfo[] methodInfos) - { - XmlReflectionImporter importer = new XmlReflectionImporter (); - XmlMapping[] sers = new XmlMapping [methodInfos.Length]; - for (int n=0; n 0 ? ats[0] as XmlRootAttribute : null; - sers[n] = importer.ImportTypeMapping (methodInfos[n].ReturnType, root, sti.GetWebServiceLiteralNamespace (sti.WebServiceNamespace)); - } - } - return XmlSerializer.FromMappings (sers); - } - - public override void Initialize (object o) - { - serializer = (XmlSerializer)o; - } - - public override object Read (WebResponse response, Stream responseStream) - { - object result = null; - if (serializer != null) - { - if (response.ContentType.IndexOf ("text/xml") == -1) - throw new InvalidOperationException ("Result was not XML"); - - result = serializer.Deserialize (responseStream); - } - responseStream.Close (); - return result; - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/XmlReturnWriter.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/XmlReturnWriter.cs deleted file mode 100644 index a9819fc1343..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/XmlReturnWriter.cs +++ /dev/null @@ -1,96 +0,0 @@ -// -// System.Web.Services.Protocols.XmlReturnWriter.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.IO; -using System.Web; -using System.Xml.Serialization; -using System.Xml; -using System.Text; - -namespace System.Web.Services.Protocols { - internal class XmlReturnWriter : MimeReturnWriter { - - XmlSerializer serializer; - - #region Methods - - public override object GetInitializer (LogicalMethodInfo methodInfo) - { - LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (methodInfo.DeclaringType); - object[] ats = methodInfo.ReturnTypeCustomAttributeProvider.GetCustomAttributes (typeof(XmlRootAttribute), true); - XmlRootAttribute root = ats.Length > 0 ? ats[0] as XmlRootAttribute : null; - - XmlReflectionImporter importer = new XmlReflectionImporter (); - importer.IncludeTypes (methodInfo.CustomAttributeProvider); - XmlTypeMapping map = importer.ImportTypeMapping (methodInfo.ReturnType, root, sti.GetWebServiceLiteralNamespace (sti.WebServiceNamespace)); - return new XmlSerializer (map); - } - - public override object[] GetInitializers (LogicalMethodInfo[] methodInfos) - { - XmlReflectionImporter importer = new XmlReflectionImporter (); - XmlMapping[] sers = new XmlMapping [methodInfos.Length]; - for (int n=0; n 0 ? ats[0] as XmlRootAttribute : null; - sers[n] = importer.ImportTypeMapping (methodInfos[n].ReturnType, root, sti.GetWebServiceLiteralNamespace (sti.WebServiceNamespace)); - } - } - return XmlSerializer.FromMappings (sers); - } - - public override void Initialize (object initializer) - { - serializer = (XmlSerializer) initializer; - } - - public override void Write (HttpResponse response, Stream outputStream, object returnValue) - { - if (serializer != null) - { - response.ContentType = "text/xml; charset=utf-8"; - XmlTextWriter xtw = new XmlTextWriter (outputStream, new UTF8Encoding (false)); - xtw.Formatting = Formatting.Indented; - serializer.Serialize (xtw, returnValue); - } - outputStream.Close (); - } - - #endregion // Methods - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services.dll.sources b/mcs/class/System.Web.Services/System.Web.Services.dll.sources deleted file mode 100644 index 8f5e13d49d4..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services.dll.sources +++ /dev/null @@ -1,196 +0,0 @@ -Assembly/AssemblyInfo.cs -Assembly/Locale.cs -System.Web.Services/TODOAttribute.cs -System.Web.Services/WebMethodAttribute.cs -System.Web.Services/WebService.cs -System.Web.Services/WebServiceAttribute.cs -System.Web.Services/WebServiceBindingAttribute.cs -System.Web.Services/WebServicesDescriptionAttribute.cs -System.Web.Services/WsiClaims.cs -System.Web.Services.Configuration/WebServicesConfigurationSectionHandler.cs -System.Web.Services.Configuration/XmlFormatExtensionAttribute.cs -System.Web.Services.Configuration/XmlFormatExtensionPointAttribute.cs -System.Web.Services.Configuration/XmlFormatExtensionPrefixAttribute.cs -System.Web.Services.Description/BasicProfileChecker.cs -System.Web.Services.Description/BasicProfileViolation.cs -System.Web.Services.Description/BasicProfileViolationCollection.cs -System.Web.Services.Description/Binding.cs -System.Web.Services.Description/BindingCollection.cs -System.Web.Services.Description/ConformanceChecker.cs -System.Web.Services.Description/DocumentableItem.cs -System.Web.Services.Description/FaultBinding.cs -System.Web.Services.Description/FaultBindingCollection.cs -System.Web.Services.Description/HttpAddressBinding.cs -System.Web.Services.Description/HttpBinding.cs -System.Web.Services.Description/HttpGetProtocolImporter.cs -System.Web.Services.Description/HttpGetProtocolReflector.cs -System.Web.Services.Description/HttpOperationBinding.cs -System.Web.Services.Description/HttpPostProtocolImporter.cs -System.Web.Services.Description/HttpPostProtocolReflector.cs -System.Web.Services.Description/HttpSimpleProtocolImporter.cs -System.Web.Services.Description/HttpSimpleProtocolReflector.cs -System.Web.Services.Description/HttpUrlEncodedBinding.cs -System.Web.Services.Description/HttpUrlReplacementBinding.cs -System.Web.Services.Description/Import.cs -System.Web.Services.Description/ImportCollection.cs -System.Web.Services.Description/InputBinding.cs -System.Web.Services.Description/Message.cs -System.Web.Services.Description/MessageBinding.cs -System.Web.Services.Description/MessageCollection.cs -System.Web.Services.Description/MessagePart.cs -System.Web.Services.Description/MessagePartCollection.cs -System.Web.Services.Description/MimeContentBinding.cs -System.Web.Services.Description/MimeMultipartRelatedBinding.cs -System.Web.Services.Description/MimePart.cs -System.Web.Services.Description/MimePartCollection.cs -System.Web.Services.Description/MimeTextBinding.cs -System.Web.Services.Description/MimeTextMatch.cs -System.Web.Services.Description/MimeTextMatchCollection.cs -System.Web.Services.Description/MimeXmlBinding.cs -System.Web.Services.Description/NamedItem.cs -System.Web.Services.Description/Operation.cs -System.Web.Services.Description/OperationBinding.cs -System.Web.Services.Description/OperationBindingCollection.cs -System.Web.Services.Description/OperationCollection.cs -System.Web.Services.Description/OperationFault.cs -System.Web.Services.Description/OperationFaultCollection.cs -System.Web.Services.Description/OperationFlow.cs -System.Web.Services.Description/OperationInput.cs -System.Web.Services.Description/OperationMessage.cs -System.Web.Services.Description/OperationMessageCollection.cs -System.Web.Services.Description/OperationOutput.cs -System.Web.Services.Description/OutputBinding.cs -System.Web.Services.Description/Port.cs -System.Web.Services.Description/PortCollection.cs -System.Web.Services.Description/PortType.cs -System.Web.Services.Description/PortTypeCollection.cs -System.Web.Services.Description/ProtocolImporter.cs -System.Web.Services.Description/ProtocolReflector.cs -System.Web.Services.Description/Service.cs -System.Web.Services.Description/ServiceCollection.cs -System.Web.Services.Description/ServiceDescription.cs -System.Web.Services.Description/ServiceDescriptionBaseCollection.cs -System.Web.Services.Description/ServiceDescriptionCollection.cs -System.Web.Services.Description/ServiceDescriptionFormatExtension.cs -System.Web.Services.Description/ServiceDescriptionFormatExtensionCollection.cs -System.Web.Services.Description/ServiceDescriptionImportStyle.cs -System.Web.Services.Description/ServiceDescriptionImportWarnings.cs -System.Web.Services.Description/ServiceDescriptionImporter.cs -System.Web.Services.Description/ServiceDescriptionSerializerBase.cs -System.Web.Services.Description/ServiceDescriptionReflector.cs -System.Web.Services.Description/ExtensionManager.cs -System.Web.Services.Description/Soap12AddressBinding.cs -System.Web.Services.Description/Soap12Binding.cs -System.Web.Services.Description/Soap12BodyBinding.cs -System.Web.Services.Description/Soap12FaultBinding.cs -System.Web.Services.Description/Soap12HeaderBinding.cs -System.Web.Services.Description/Soap12OperationBinding.cs -System.Web.Services.Description/SoapAddressBinding.cs -System.Web.Services.Description/SoapBinding.cs -System.Web.Services.Description/SoapBindingStyle.cs -System.Web.Services.Description/SoapBindingUse.cs -System.Web.Services.Description/SoapBodyBinding.cs -System.Web.Services.Description/SoapExtensionImporter.cs -System.Web.Services.Description/SoapExtensionReflector.cs -System.Web.Services.Description/SoapFaultBinding.cs -System.Web.Services.Description/SoapHeaderBinding.cs -System.Web.Services.Description/SoapHttpTransportImporter.cs -System.Web.Services.Description/SoapOperationBinding.cs -System.Web.Services.Description/SoapHeaderFaultBinding.cs -System.Web.Services.Description/SoapProtocolImporter.cs -System.Web.Services.Description/SoapProtocolReflector.cs -System.Web.Services.Description/SoapTransportImporter.cs -System.Web.Services.Description/Types.cs -System.Web.Services.Description/WebReference.cs -System.Web.Services.Description/WebReferenceCollection.cs -System.Web.Services.Description/WebServicesInteroperability.cs -System.Web.Services.Protocols/Methods.cs -System.Web.Services.Protocols/AnyReturnReader.cs -System.Web.Services.Protocols/Fault.cs -System.Web.Services.Protocols/HtmlFormParameterReader.cs -System.Web.Services.Protocols/HtmlFormParameterWriter.cs -System.Web.Services.Protocols/HttpGetClientProtocol.cs -System.Web.Services.Protocols/HttpGetTypeStubInfo.cs -System.Web.Services.Protocols/HttpMethodAttribute.cs -System.Web.Services.Protocols/HttpPostClientProtocol.cs -System.Web.Services.Protocols/HttpPostTypeStubInfo.cs -System.Web.Services.Protocols/HttpServerProtocol.cs -System.Web.Services.Protocols/HttpSimpleClientProtocol.cs -System.Web.Services.Protocols/HttpSimpleTypeStubInfo.cs -System.Web.Services.Protocols/HttpSimpleWebServiceHandler.cs -System.Web.Services.Protocols/HttpSoapWebServiceHandler.cs -System.Web.Services.Protocols/HttpWebClientProtocol.cs -System.Web.Services.Protocols/InvokeCompletedEventArgs.cs -System.Web.Services.Protocols/InvokeCompletedEventHandler.cs -System.Web.Services.Protocols/LogicalMethodInfo.cs -System.Web.Services.Protocols/LogicalMethodTypes.cs -System.Web.Services.Protocols/MatchAttribute.cs -System.Web.Services.Protocols/MimeFormatter.cs -System.Web.Services.Protocols/MimeParameterReader.cs -System.Web.Services.Protocols/MimeParameterWriter.cs -System.Web.Services.Protocols/MimeReturnReader.cs -System.Web.Services.Protocols/MimeReturnWriter.cs -System.Web.Services.Protocols/NopReturnReader.cs -System.Web.Services.Protocols/PatternMatcher.cs -System.Web.Services.Protocols/Soap12FaultCodes.cs -System.Web.Services.Protocols/ServerProtocol.cs -System.Web.Services.Protocols/SoapClientMessage.cs -System.Web.Services.Protocols/SoapClientMethod.cs -System.Web.Services.Protocols/SoapDocumentationHandler.cs -System.Web.Services.Protocols/SoapDocumentMethodAttribute.cs -System.Web.Services.Protocols/SoapDocumentServiceAttribute.cs -System.Web.Services.Protocols/SoapException.cs -System.Web.Services.Protocols/SoapExtension.cs -System.Web.Services.Protocols/SoapExtensionAttribute.cs -System.Web.Services.Protocols/SoapFaultSubcode.cs -System.Web.Services.Protocols/SoapHeader.cs -System.Web.Services.Protocols/SoapHeaderAttribute.cs -System.Web.Services.Protocols/SoapHeaderCollection.cs -System.Web.Services.Protocols/SoapHeaderDirection.cs -System.Web.Services.Protocols/SoapHeaderException.cs -System.Web.Services.Protocols/SoapHttpClientProtocol.cs -System.Web.Services.Protocols/SoapMessage.cs -System.Web.Services.Protocols/SoapMessageStage.cs -System.Web.Services.Protocols/SoapParameterStyle.cs -System.Web.Services.Protocols/SoapProtocolVersion.cs -System.Web.Services.Protocols/SoapRpcMethodAttribute.cs -System.Web.Services.Protocols/SoapRpcServiceAttribute.cs -System.Web.Services.Protocols/SoapServerMessage.cs -System.Web.Services.Protocols/SoapServerProtocol.cs -System.Web.Services.Protocols/SoapServiceRoutingStyle.cs -System.Web.Services.Protocols/SoapUnknownHeader.cs -System.Web.Services.Protocols/TextReturnReader.cs -System.Web.Services.Protocols/TypeStubManager.cs -System.Web.Services.Protocols/UrlEncodedParameterWriter.cs -System.Web.Services.Protocols/UrlParameterReader.cs -System.Web.Services.Protocols/UrlParameterWriter.cs -System.Web.Services.Protocols/ValueCollectionParameterReader.cs -System.Web.Services.Protocols/WebClientAsyncResult.cs -System.Web.Services.Protocols/WebClientProtocol.cs -System.Web.Services.Protocols/WebServiceHandler.cs -System.Web.Services.Protocols/WebServiceHandlerFactory.cs -System.Web.Services.Protocols/WebServiceHelper.cs -System.Web.Services.Protocols/XmlReturnReader.cs -System.Web.Services.Protocols/XmlReturnWriter.cs -System.Web.Services.Discovery/ContractReference.cs -System.Web.Services.Discovery/ContractSearchPattern.cs -System.Web.Services.Discovery/DiscoveryClientDocumentCollection.cs -System.Web.Services.Discovery/DiscoveryClientProtocol.cs -System.Web.Services.Discovery/DiscoveryClientReferenceCollection.cs -System.Web.Services.Discovery/DiscoveryClientResultCollection.cs -System.Web.Services.Discovery/DiscoveryClientResult.cs -System.Web.Services.Discovery/DiscoveryDocument.cs -System.Web.Services.Discovery/DiscoveryDocumentLinksPattern.cs -System.Web.Services.Discovery/DiscoveryDocumentReference.cs -System.Web.Services.Discovery/DiscoveryDocumentSearchPattern.cs -System.Web.Services.Discovery/DiscoveryDocumentSerializer.cs -System.Web.Services.Discovery/DiscoveryExceptionDictionary.cs -System.Web.Services.Discovery/DiscoveryReferenceCollection.cs -System.Web.Services.Discovery/DiscoveryReference.cs -System.Web.Services.Discovery/DiscoveryRequestHandler.cs -System.Web.Services.Discovery/DiscoverySearchPattern.cs -System.Web.Services.Discovery/DynamicDiscoveryDocument.cs -System.Web.Services.Discovery/ExcludePathInfo.cs -System.Web.Services.Discovery/SchemaReference.cs -System.Web.Services.Discovery/SoapBinding.cs -System.Web.Services.Discovery/XmlSchemaSearchPattern.cs diff --git a/mcs/class/System.Web.Services/System.Web.Services/ChangeLog b/mcs/class/System.Web.Services/System.Web.Services/ChangeLog deleted file mode 100644 index e258b18d1e7..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services/ChangeLog +++ /dev/null @@ -1,114 +0,0 @@ -2004-08-25 Lluis Sanchez Gual - - * WebService.cs: Get the HttpContext from the HttpContext.Current, do not - wait to be set with SetContext. In this way the context is available - in the web service constructor. - -2004-07-13 Lluis Sanchez Gual - - * WebServiceBindingAttribute.cs, WsiClaims.cs: Added missing attributes. - -2004-07-10 Lluis Sanchez Gual - - * WebService.cs: Added SoapVersion property. - * WebServiceBindingAttribute.cs: New 2.0 properties. - * WsiClaims.cs: Added new enumeration. - -2004-05-12 Lluis Sanchez Gual - - * WebService.cs: Take the session from the context. - -2004-05-05 Gonzalo Paniagua Javier - - * WebService.cs: added a HttpSessionState field and a setter method. - Session now returns null if EnableSession is not set for the method - invoked. - -2004-02-05 Alon Gazit - - * WebMethodAttribute.cs: - * WebServicesDescriptionAttribute.cs: - * WebServiceAttribute.cs: - * WebServiceBindingAttribute.cs: This attribute is inherited by derived - classes.changed the AttributeUsage attribute. - -2004-02-05 Alon Gazit - - * WebServiceBindingAttribute.cs: This attribute is multiuse. - Changed the AttributeUsage attribute. - -2004-01-10 Gonzalo Paniagua Javier - - * WebService.cs: added SetContext (). - -2003-02-25 Dave Bettin - * WebService.cs: - Changed private application to HttpContext - -2002-08-19 Tim Coleman - * WebService.cs: - Change the attribute on Application to Description - instead of WebServicesDescription.2002-08-19 Tim Coleman - -2002-08-15 Tim Coleman - * WebServicesDescriptionAttribute: - Added Description property. Should've known I spoke - too soon about being complete. :-) - -2002-08-07 Tim Coleman - * WebMethodAttribute.cs: - Remove FIXME and reorganize constructors to all - call this () with the big constructor. - * WebServiceAttribute.cs: - Remove FIXME. - * WebServiceBindingAttribute.cs: - Remove FIXME, and change ns to be String.Empty by - default (this is the MS implementation). Reorganize - constructors. - * WebServicesDescriptionAttribute.cs: - Code reformat. - * TODOAttribute.cs: - Changed namespace. - - *** This namespace should now be complete. *** - -2002-07-23 Tim Coleman - * WebService.cs: - Change Description to WebServicesDescription - * WebServicesDescriptionAttribute.cs: - Add back constructor as MS build doesn't - seem to like it missing. Now calls base() - with the string. Also remove the sealed - modifier and change the attribute targets. - -2002-07-23 Tim Coleman - * WebServicesDescriptionAttribute.cs: - Removed the "guts" because they are defined in - System.ComponentModel.DescriptionAttribute. - * WebService.cs: - Added attributes which were missing based on the - class status page. Also added an HttpApplication - object and modified the properties to use that - object. - -2002-07-22 Tim Coleman - * WebServicesDescriptionAttribute.cs: - Added for build in System.Web.Services.Protocols - -2002-07-22 Tim Coleman - * WebMethodAttribute.cs: - Remove comments around TransactionOption bits - because I added that enum. - * WebServiceAttribute.cs: - * WebServiceBindingAttribute.cs: - Added "sealed" to protection level, which I missed - before. - -2002-07-19 Tim Coleman - * ChangeLog: - * TODOAttribute.cs: - * WebMethodAttribute.cs: - * WebService.cs: - * WebServiceAttribute.cs: - * WebServiceBindingAttribute.cs: - Initial implementation diff --git a/mcs/class/System.Web.Services/System.Web.Services/TODOAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services/TODOAttribute.cs deleted file mode 100644 index 1e355a25cc9..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services/TODOAttribute.cs +++ /dev/null @@ -1,57 +0,0 @@ -// -// TODOAttribute.cs -// -// Author: -// Ravi Pratap (ravi@ximian.com) -// -// (C) Ximian, Inc. http://www.ximian.com -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services { - - /// - /// The TODO attribute is used to flag all incomplete bits in our class libraries - /// - /// - /// - /// Use this to decorate any element which you think is not complete - /// - [AttributeUsage (AttributeTargets.All)] - internal class MonoTODOAttribute : Attribute { - - string comment; - - public MonoTODOAttribute () - {} - - public MonoTODOAttribute (string comment) - { - this.comment = comment; - } - - public string Comment { - get { return comment; } - } - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services/WebMethodAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services/WebMethodAttribute.cs deleted file mode 100644 index 2826a415c98..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services/WebMethodAttribute.cs +++ /dev/null @@ -1,117 +0,0 @@ - // -// System.Web.Services.WebMethodAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.EnterpriseServices; - -namespace System.Web.Services { - [AttributeUsage(AttributeTargets.Method, Inherited = true)] - public sealed class WebMethodAttribute : Attribute { - - #region Fields - - bool bufferResponse; - int cacheDuration; - string description; - bool enableSession; - string messageName; - TransactionOption transactionOption; - - #endregion // Fields - - #region Constructors - - public WebMethodAttribute () - : this (false, TransactionOption.Disabled, 0, true) - { - } - - public WebMethodAttribute (bool enableSession) - : this (enableSession, TransactionOption.Disabled, 0, true) - { - } - - public WebMethodAttribute (bool enableSession, TransactionOption transactionOption) - : this (enableSession, transactionOption, 0, true) - { - } - - public WebMethodAttribute (bool enableSession, TransactionOption transactionOption, int cacheDuration) - : this (enableSession, transactionOption, cacheDuration, true) - { - } - - public WebMethodAttribute (bool enableSession, TransactionOption transactionOption, int cacheDuration, bool bufferResponse) - { - this.bufferResponse = bufferResponse; - this.cacheDuration = cacheDuration; - this.enableSession = enableSession; - this.transactionOption = transactionOption; - - this.description = String.Empty; - this.messageName = String.Empty; - } - - #endregion // Constructors - - #region Properties - - public bool BufferResponse { - get { return bufferResponse; } - set { bufferResponse = value; } - } - - public int CacheDuration { - get { return cacheDuration; } - set { cacheDuration = value; } - } - - public string Description { - get { return description; } - set { description = value; } - } - - public bool EnableSession { - get { return enableSession; } - set { enableSession = value; } - } - - public string MessageName { - get { return messageName; } - set { messageName = value; } - } - - public TransactionOption TransactionOption { - get { return transactionOption; } - set { transactionOption = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services/WebService.cs b/mcs/class/System.Web.Services/System.Web.Services/WebService.cs deleted file mode 100644 index cc8017bab4c..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services/WebService.cs +++ /dev/null @@ -1,100 +0,0 @@ - // -// System.Web.Services.WebService.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Security.Principal; -using System.Web; -using System.Web.SessionState; - -namespace System.Web.Services { - public class WebService : MarshalByValueComponent { - - #region Fields - - HttpContext _context; - - #endregion // Fields - - #region Constructors - - public WebService () - { - _context = HttpContext.Current; - } - - #endregion // Constructors - - #region Properties - - [Browsable (false)] - [Description ("The ASP.NET application object for the current request.")] - [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] - public HttpApplicationState Application { - get { return _context.Application; } - } - - [Browsable (false)] - [WebServicesDescription ("The ASP.NET context object for the current request.")] - [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] - public HttpContext Context { - get { return _context; } - } - - [Browsable (false)] - [WebServicesDescription ("The ASP.NET utility object for the current request.")] - [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] - public HttpServerUtility Server { - get { return _context.Server; } - } - - [Browsable (false)] - [WebServicesDescription ("The ASP.NET session object for the current request.")] - [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] - public HttpSessionState Session { - get { return _context.Session; } - } - - [Browsable (false)] - [WebServicesDescription ("The ASP.NET user object for the current request. The object is used for authorization.")] - [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] - public IPrincipal User { - get { return _context.User; } - } - -#if NET_2_0 - [MonoTODO] - public virtual System.Web.Services.Protocols.SoapProtocolVersion SoapVersion { - get { throw new NotImplementedException (); } - } -#endif - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services/WebServiceAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services/WebServiceAttribute.cs deleted file mode 100644 index 15085f69804..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services/WebServiceAttribute.cs +++ /dev/null @@ -1,75 +0,0 @@ - // -// System.Web.Services.WebServiceAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services { - [AttributeUsage (AttributeTargets.Class, Inherited = true)] - public sealed class WebServiceAttribute : Attribute { - - #region Fields - - public const string DefaultNamespace = "http://tempuri.org/"; - string description; - string name; - string ns; - - #endregion // Fields - - #region Constructors - - - public WebServiceAttribute () - { - description = String.Empty; - name = String.Empty; - ns = DefaultNamespace; - } - - #endregion // Constructors - - #region Properties - - public string Description { - get { return description; } - set { description = value; } - } - - public string Name { - get { return name; } - set { name = value; } - } - - public string Namespace { - get { return ns; } - set { ns = value; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services/WebServiceBindingAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services/WebServiceBindingAttribute.cs deleted file mode 100644 index c981a55d329..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services/WebServiceBindingAttribute.cs +++ /dev/null @@ -1,110 +0,0 @@ - // -// System.Web.Services.WebServiceBindingAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Services { - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - public sealed class WebServiceBindingAttribute : Attribute { - - #region Fields - - string location; - string name; - string ns; - -#if NET_2_0 - bool emitConformanceClaims; - WsiClaims conformanceClaims; -#endif - - #endregion // Fields - - #region Constructors - - public WebServiceBindingAttribute () - : this (String.Empty, String.Empty, String.Empty) - { - } - - public WebServiceBindingAttribute (string name) - : this (name, String.Empty, String.Empty) - { - } - - public WebServiceBindingAttribute (string name, string ns) - : this (name, ns, String.Empty) - { - } - - public WebServiceBindingAttribute (string name, string ns, string location) - { - this.name = name; - this.ns = ns; - this.location = location; - } - - #endregion // Constructors - - #region Properties - - public string Location { - get { return location; } - set { location = value; } - } - - public string Name { - get { return name; } - set { name = value; } - } - - public string Namespace { - get { return ns; } - set { ns = value; } - } - -#if NET_2_0 - - [System.Runtime.InteropServices.ComVisibleAttribute (false)] - public WsiClaims ConformanceClaims { - get { return conformanceClaims; } - set { conformanceClaims = value; } - } - - [System.Runtime.InteropServices.ComVisibleAttribute (false)] - public bool EmitConformanceClaims { - get { return emitConformanceClaims; } - set { emitConformanceClaims = value; } - } -#endif - - - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services/WebServicesDescriptionAttribute.cs b/mcs/class/System.Web.Services/System.Web.Services/WebServicesDescriptionAttribute.cs deleted file mode 100644 index e4b1416a4fd..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services/WebServicesDescriptionAttribute.cs +++ /dev/null @@ -1,54 +0,0 @@ -// -// System.Web.Services.WebServicesDescriptionAttribute.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) Tim Coleman, 2002 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.Services { - [AttributeUsage (AttributeTargets.Property | AttributeTargets.Event, Inherited = true)] - internal class WebServicesDescriptionAttribute : DescriptionAttribute { - - #region Constructors - - public WebServicesDescriptionAttribute (string description) - : base (description) - { - } - - #endregion // Constructors - - #region Properties - - public override string Description { - get { return DescriptionValue; } - } - - #endregion // Properties - } -} diff --git a/mcs/class/System.Web.Services/System.Web.Services/WsiClaims.cs b/mcs/class/System.Web.Services/System.Web.Services/WsiClaims.cs deleted file mode 100644 index ddb268c2771..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services/WsiClaims.cs +++ /dev/null @@ -1,46 +0,0 @@ -// -// System.Web.Services.WsiClaims.cs -// -// Author: -// Lluis Sanchez (lluis@novell.com) -// -// Copyright (C) Novell, Inc., 2004 -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#if NET_2_0 - -using System; - -namespace System.Web.Services -{ - [Flags] - [Serializable] - public enum WsiClaims - { - None, - BP10 - } -} - -#endif diff --git a/mcs/class/System.Web.Services/System.Web.Services_test.dll.sources b/mcs/class/System.Web.Services/System.Web.Services_test.dll.sources deleted file mode 100755 index 6d5d5a5f3ad..00000000000 --- a/mcs/class/System.Web.Services/System.Web.Services_test.dll.sources +++ /dev/null @@ -1,16 +0,0 @@ -System.Web.Services/WebMethodAttributeTest.cs -System.Web.Services/WebServiceAttributeTest.cs -System.Web.Services.Configuration/XmlFormatExtensionAttributeTest.cs -System.Web.Services.Discovery/ContractReferenceTest.cs -System.Web.Services.Description/BindingCollectionTest.cs -System.Web.Services.Description/DocumentableItemTest.cs -System.Web.Services.Description/TypesTest.cs -System.Web.Services.Description/OperationCollectionTest.cs -System.Web.Services.Description/OperationMessageTest.cs -System.Web.Services.Description/OperationMessageCollectionTest.cs -System.Web.Services.Description/PortTypeCollectionTest.cs -System.Web.Services.Description/PortTypeTest.cs -System.Web.Services.Description/ServiceCollectionTest.cs -System.Web.Services.Description/ServiceDescriptionCollectionTest.cs -System.Web.Services.Description/SoapBodyBindingTest.cs -System.Web.Services.Description/SoapOperationBindingTest.cs diff --git a/mcs/class/System.Web.Services/Test/.cvsignore b/mcs/class/System.Web.Services/Test/.cvsignore deleted file mode 100644 index 98896d1a9ab..00000000000 --- a/mcs/class/System.Web.Services/Test/.cvsignore +++ /dev/null @@ -1,9 +0,0 @@ -*.dll -*.suo -*.sln -*.csproj.user -bin -obj -.makefrag -.response -library-deps.stamp diff --git a/mcs/class/System.Web.Services/Test/ChangeLog b/mcs/class/System.Web.Services/Test/ChangeLog deleted file mode 100644 index 4bc55f07cb7..00000000000 --- a/mcs/class/System.Web.Services/Test/ChangeLog +++ /dev/null @@ -1,15 +0,0 @@ -2003-02-23 Dave Bettin - * Added makefile.gnu - * Added list for test classes to compile - * Moved all tests over to nunit2 - -2002-08-09 Tim Coleman - * AllTests.cs: - New test suites added. - -2002-08-07 Tim Coleman - * AllTests.cs: - * ChangeLog: - * System.Web.Services: - * System.Web.Services_test.build: - New files and directories added for test suite. diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Configuration/ChangeLog b/mcs/class/System.Web.Services/Test/System.Web.Services.Configuration/ChangeLog deleted file mode 100644 index fc2b58a80e4..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Configuration/ChangeLog +++ /dev/null @@ -1,13 +0,0 @@ -2003-05-13 Martin Willemoes Hansen - * XmlFormatExtensionAttributeTest.cs: Inherits from Assertion and - Assertion. prefixes removed. - -2003-02-22 Dave Bettin - * Moved over to Nunit2 Tests - * Removed AllTests.cs - -2002-08-09 Tim Coleman - * AllTests.cs: - * ChangeLog: - * XmlFormatExtensionAttributeTest.cs: - New files added for test suite. diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Configuration/XmlFormatExtensionAttributeTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Configuration/XmlFormatExtensionAttributeTest.cs deleted file mode 100644 index 19443838507..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Configuration/XmlFormatExtensionAttributeTest.cs +++ /dev/null @@ -1,63 +0,0 @@ -// -// MonoTests.System.Web.Services.Configuration.XmlFormatExtensionAttributeTest.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Dave Bettin (dave@opendotnet.com) -// -// Copyright (C) Tim Coleman, 2002 -// Copyright (C) Dave Bettin, 2003 -// - -using NUnit.Framework; -using System; -using System.Web.Services.Configuration; -using System.Web.Services.Description; - -namespace MonoTests.System.Web.Services.Configuration { - - [TestFixture] - public class XmlFormatExtensionAttributeTest : Assertion { - - - [Test] - public void TestConstructors () - { - XmlFormatExtensionAttribute attribute; - - /* attribute = new XmlFormatExtensionAttribute (); - AssertEquals (String.Empty, attribute.ElementName); - AssertEquals (null, attribute.ExtensionPoints); - AssertEquals (String.Empty, attribute.Namespace); - - string elementName = "binding"; - string ns = "http://schemas.xmlsoap.org/wsdl/http/"; - Type[] types = new Type[4] {typeof (Binding), typeof (Binding), typeof (Binding), typeof (Binding)}; - - attribute = new XmlFormatExtensionAttribute (elementName, ns, types[0]); - AssertEquals (elementName, attribute.ElementName); - AssertEquals (new Type[1] {types[0]}, attribute.ExtensionPoints); - AssertEquals (ns, attribute.Namespace); - - attribute = new XmlFormatExtensionAttribute (elementName, ns, types[0], types[1]); - AssertEquals (elementName, attribute.ElementName); - AssertEquals (new Type[2] {types[0], types[1]}, attribute.ExtensionPoints); - AssertEquals (ns, attribute.Namespace); - - attribute = new XmlFormatExtensionAttribute (elementName, ns, types[0], types[1], types[2]); - AssertEquals (elementName, attribute.ElementName); - AssertEquals (new Type[3] {types[0], types[1], types[2]}, attribute.ExtensionPoints); - AssertEquals (ns, attribute.Namespace); - - attribute = new XmlFormatExtensionAttribute (elementName, ns, types[0], types[1], types[2], types[3]); - AssertEquals (elementName, attribute.ElementName); - AssertEquals (new Type[4] {types[0], types[1], types[2], types[3]}, attribute.ExtensionPoints); - AssertEquals (ns, attribute.Namespace); - - attribute = new XmlFormatExtensionAttribute (elementName, ns, types); - AssertEquals (elementName, attribute.ElementName); - AssertEquals (types, attribute.ExtensionPoints); - AssertEquals (ns, attribute.Namespace);*/ - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/BindingCollectionTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/BindingCollectionTest.cs deleted file mode 100644 index dc289825292..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/BindingCollectionTest.cs +++ /dev/null @@ -1,51 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.BindingCollectionTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class BindingCollectionTest - { - BindingCollection bc; - - [SetUp] - public void InitializeBindingCollection () - { - // workaround for internal constructor - ServiceDescription desc = new ServiceDescription (); - bc = desc.Bindings; - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertNull (bc["hello"]); - Assertion.AssertEquals (0, bc.Count); - } - - [Test] - public void TestAddBinding () - { - const string bindingName = "testBinding"; - - Binding b = new Binding (); - b.Name = bindingName; - - bc.Add (b); - - Assertion.AssertEquals (1, bc.Count); - Assertion.AssertEquals (b, bc[bindingName]); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/ChangeLog b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/ChangeLog deleted file mode 100644 index 970cdd0af41..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/ChangeLog +++ /dev/null @@ -1,8 +0,0 @@ -2003-09-14 Lluis Sanchez Gual - - * BindingCollectionTest.cs ChangeLog DocumentableItemTest.cs - OperationCollectionTest.cs OperationMessageCollectionTest.cs - OperationMessageTest.cs PortTypeCollectionTest.cs PortTypeTest.cs - ServiceCollectionTest.cs ServiceDescriptionCollectionTest.cs - SoapBodyBindingTest.cs SoapOperationBindingTest.cs TypesTest.cs - New test files by Erik LeBel. diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/DocumentableItemTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/DocumentableItemTest.cs deleted file mode 100644 index dd1b8fb484b..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/DocumentableItemTest.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.DocumentableItemTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class DocumentableItemTest - { - DocumentableItem item; - - [SetUp] - public void InitializeItem() - { - // workaround for base class - item = new Types(); - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertEquals(String.Empty, item.Documentation); - } - - [Test] - public void TestNullDocumentationString() - { - item.Documentation = null; - Assertion.AssertEquals(String.Empty, item.Documentation); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationCollectionTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationCollectionTest.cs deleted file mode 100644 index 233f5693d48..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationCollectionTest.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.OperationCollectionTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class OperationCollectionTest - { - OperationCollection operations; - - [SetUp] - public void InitializeOperations() - { - // workaround for internal constructor - PortType portType = new PortType(); - operations = portType.Operations; - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertEquals(0, operations.Count); - } - - [Test] - [ExpectedException (typeof (ArgumentNullException))] - public void TestAddNullObject() - { - operations.Add(null); - } - - [Test] - public void TestAddValidOperation() - { - operations.Add(new Operation()); - Assertion.AssertEquals(1, operations.Count); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationMessageCollectionTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationMessageCollectionTest.cs deleted file mode 100644 index f73513d8d29..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationMessageCollectionTest.cs +++ /dev/null @@ -1,133 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.OperationMessageCollectionTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; -using System.Xml; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class OperationMessageCollectionTest - { - OperationMessageCollection operations; - - [SetUp] - public void InitializeOperation() - { - // workaround for internal constructor - Operation op = new Operation(); - operations = op.Messages; - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertEquals(OperationFlow.None, operations.Flow); - Assertion.AssertNull(operations.Input); - Assertion.AssertNull(operations.Output); - Assertion.AssertEquals(0, operations.Count); - } - - [Test] - public void TestAddInput() - { - operations.Add(new OperationInput()); - - Assertion.AssertEquals(OperationFlow.OneWay, operations.Flow); - Assertion.AssertNotNull(operations.Input); - Assertion.AssertNull(operations.Output); - Assertion.AssertEquals(1, operations.Count); - } - - [Test] - public void TestAddOutput() - { - operations.Add(new OperationOutput()); - - Assertion.AssertEquals(OperationFlow.Notification, operations.Flow); - Assertion.AssertNull(operations.Input); - Assertion.AssertNotNull(operations.Output); - Assertion.AssertEquals(1, operations.Count); - } - - [Test] - public void TestAddInputAndOutput() - { - operations.Add(new OperationInput()); - operations.Add(new OperationOutput()); - - Assertion.AssertEquals(OperationFlow.RequestResponse, operations.Flow); - Assertion.AssertNotNull(operations.Input); - Assertion.AssertNotNull(operations.Output); - Assertion.AssertEquals(2, operations.Count); - } - - [Test] - public void TestAddOutputAndInput() - { - operations.Add(new OperationOutput()); - operations.Add(new OperationInput()); - - Assertion.AssertEquals(OperationFlow.SolicitResponse, operations.Flow); - Assertion.AssertNotNull(operations.Input); - Assertion.AssertNotNull(operations.Output); - Assertion.AssertEquals(2, operations.Count); - } - - [Test] - [ExpectedException (typeof (ArgumentException))] - public void TestAddNull() - { - operations.Add(null); - } - - [Test] - [ExpectedException (typeof (ArgumentException))] - public void TestAddFault() - { - operations.Add(new OperationFault()); - } - - [Test] - [ExpectedException (typeof (InvalidOperationException))] - public void TestAddInputAndInput() - { - operations.Add(new OperationInput()); - operations.Add(new OperationInput()); - } - - [Test] - [ExpectedException (typeof (InvalidOperationException))] - public void TestAddOutputAndOutput() - { - operations.Add(new OperationOutput()); - operations.Add(new OperationOutput()); - } - - [Test] - [ExpectedException (typeof (InvalidOperationException))] - public void TestAddThreeOperationMessages() - { - operations.Add(new OperationOutput()); - operations.Add(new OperationOutput()); - operations.Add(new OperationOutput()); - } - - [Test] - [ExpectedException (typeof (ArgumentException))] - public void TestAddInputAndFault() - { - operations.Add(new OperationInput()); - operations.Add(new OperationFault()); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationMessageTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationMessageTest.cs deleted file mode 100644 index 0f2ddb176a4..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/OperationMessageTest.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.OperationMessageTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; -using System.Xml; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class OperationMessageTest - { - OperationMessage operation; - - [SetUp] - public void InitializeOperation() - { - // workaround: OperationInput, OperationOutput and OperationFault are all empty derivations of OperationMessage - operation = new OperationInput(); - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertEquals(String.Empty, operation.Documentation); - Assertion.AssertNull(operation.Name); - Assertion.AssertEquals(XmlQualifiedName.Empty, operation.Message); - Assertion.AssertNull(operation.Operation); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/PortTypeCollectionTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/PortTypeCollectionTest.cs deleted file mode 100644 index cc853f4a635..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/PortTypeCollectionTest.cs +++ /dev/null @@ -1,51 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.PortTypeCollectionTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class PortTypeCollectionTest - { - PortTypeCollection ptc; - - [SetUp] - public void InitializePortTypeCollection () - { - // workaround for internal constructor - ServiceDescription desc = new ServiceDescription (); - ptc = desc.PortTypes; - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertNull (ptc["hello"]); - Assertion.AssertEquals (0, ptc.Count); - } - - [Test] - public void TestAddPortType () - { - const string portTypeName = "testPortType"; - - PortType p = new PortType (); - p.Name = portTypeName; - - ptc.Add (p); - - Assertion.AssertEquals (1, ptc.Count); - Assertion.AssertEquals (p, ptc[portTypeName]); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/PortTypeTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/PortTypeTest.cs deleted file mode 100644 index 1f5bb347161..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/PortTypeTest.cs +++ /dev/null @@ -1,52 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.PortTypeTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class PortTypeTest - { - PortType portType; - - [SetUp] - public void InitializePortType() - { - portType = new PortType(); - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertNull(portType.Name); - Assertion.AssertNotNull(portType.Operations); - Assertion.AssertEquals(0, portType.Operations.Count); - Assertion.AssertNull(portType.ServiceDescription); - } - - [Test] - public void TestEmptyName() - { - portType.Name = String.Empty; - Assertion.AssertEquals(String.Empty, portType.Name); - } - - [Test] - public void TestLongName() - { - const string LongName = "abcdefghijklmnopqrstuvwxyz"; - portType.Name = LongName; - Assertion.AssertEquals(LongName, portType.Name); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/ServiceCollectionTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/ServiceCollectionTest.cs deleted file mode 100644 index 8834d4bbd28..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/ServiceCollectionTest.cs +++ /dev/null @@ -1,51 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.ServiceCollectionTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class ServiceCollectionTest - { - ServiceCollection sc; - - [SetUp] - public void InitializeServiceCollection () - { - // workaround for internal constructor - ServiceDescription desc = new ServiceDescription (); - sc = desc.Services; - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertNull (sc["hello"]); - Assertion.AssertEquals (0, sc.Count); - } - - [Test] - public void TestAddService () - { - const string serviceName = "testService"; - - Service s = new Service (); - s.Name = serviceName; - - sc.Add (s); - - Assertion.AssertEquals (1, sc.Count); - Assertion.AssertEquals (s, sc[serviceName]); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/ServiceDescriptionCollectionTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/ServiceDescriptionCollectionTest.cs deleted file mode 100644 index e652a6cd2f0..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/ServiceDescriptionCollectionTest.cs +++ /dev/null @@ -1,61 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.ServiceDescriptionCollectionTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class ServiceDescriptionCollectionTest - { - ServiceDescriptionCollection sdc; - - [SetUp] - public void InitializeServiceDescriptionCollection () - { - sdc = new ServiceDescriptionCollection (); - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertNull (sdc["hello"]); - Assertion.AssertEquals (0, sdc.Count); - } - - [Test] - public void TestAddServiceDescriptionWithoutTargetNS () - { - const string serviceDescriptionNamespace = "testServiceDescription"; - - ServiceDescription sd = new ServiceDescription (); - sdc.Add (sd); - - Assertion.AssertEquals (1, sdc.Count); - Assertion.AssertNull (sdc[serviceDescriptionNamespace]); - } - - [Test] - public void TestAddServiceDescriptionWithTargetNS () - { - const string serviceDescriptionNamespace = "http://some.urn"; - - ServiceDescription sd = new ServiceDescription (); - sd.TargetNamespace = serviceDescriptionNamespace; - - sdc.Add (sd); - - Assertion.AssertEquals (1, sdc.Count); - Assertion.AssertEquals (sd, sdc[serviceDescriptionNamespace]); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/SoapBodyBindingTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/SoapBodyBindingTest.cs deleted file mode 100644 index 13cb935e020..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/SoapBodyBindingTest.cs +++ /dev/null @@ -1,82 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.SoapBodyBindingTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class SoapBodyBindingTest - { - SoapBodyBinding sbb; - - [SetUp] - public void InitializeSoapBodyBinding() - { - sbb = new SoapBodyBinding(); - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertEquals(String.Empty, sbb.Encoding); - Assertion.AssertNull(sbb.Parts); - Assertion.AssertNull(sbb.PartsString); - Assertion.AssertEquals(String.Empty, sbb.Namespace); - Assertion.AssertEquals(SoapBindingUse.Default, sbb.Use); - } - - [Test] - public void TestAssignNullPartsString() - { - sbb.PartsString = null; - Assertion.AssertNull(sbb.Parts); - Assertion.AssertEquals(null, sbb.PartsString); - } - - [Test] - public void TestAssignEmptyPartsString() - { - sbb.PartsString = String.Empty; - Assertion.AssertNotNull(sbb.Parts); - Assertion.AssertEquals(1, sbb.Parts.Length); - Assertion.AssertEquals(String.Empty, sbb.PartsString); - } - - [Test] - public void TestAssignSpacesToPartsString() - { - const string Spaces = " "; - sbb.PartsString = Spaces; - Assertion.AssertNotNull(sbb.Parts); - Assertion.AssertEquals(2, sbb.Parts.Length); - Assertion.AssertEquals(Spaces, sbb.PartsString); - } - - [Test] - public void TestAssignNullParts() - { - sbb.Parts = null; - Assertion.AssertNull(sbb.Parts); - Assertion.AssertNull(sbb.PartsString); - } - - [Test] - public void TestAssignValueParts() - { - string[] vals = {"a", "b"}; - sbb.Parts = vals; - Assertion.AssertNotNull(sbb.Parts); - Assertion.AssertEquals("a b", sbb.PartsString); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/SoapOperationBindingTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/SoapOperationBindingTest.cs deleted file mode 100644 index 0a159f67d4e..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/SoapOperationBindingTest.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.SoapOperationBindingTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class SoapOperationBindingTest - { - SoapOperationBinding sob; - - [SetUp] - public void InitializeSoapOperationBinding() - { - sob = new SoapOperationBinding(); - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertEquals(String.Empty, sob.SoapAction); - Assertion.AssertEquals(SoapBindingStyle.Default, sob.Style); - Assertion.AssertEquals(false, sob.Required); - Assertion.AssertNull(sob.Parent); - Assertion.AssertEquals(false, sob.Handled); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/TypesTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Description/TypesTest.cs deleted file mode 100644 index d348d61cbde..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Description/TypesTest.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// MonoTests.System.Web.Services.Description.TypesTest.cs -// -// Author: -// Erik LeBel -// -// (C) 2003 Erik LeBel -// - -using NUnit.Framework; - -using System; -using System.Web.Services.Description; -using System.Xml.Serialization; - -namespace MonoTests.System.Web.Services.Description -{ - [TestFixture] - public class TypesTest - { - Types types; - - [SetUp] - public void InitializeTypes() - { - types = new Types(); - } - - [Test] - public void TestDefaultProperties() - { - Assertion.AssertEquals(String.Empty, types.Documentation); - Assertion.AssertNotNull(types.Schemas); - Assertion.AssertEquals(0, types.Schemas.Count); - Assertion.AssertNotNull(types.Extensions); - Assertion.AssertEquals(0, types.Extensions.Count); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Discovery/ChangeLog b/mcs/class/System.Web.Services/Test/System.Web.Services.Discovery/ChangeLog deleted file mode 100644 index 305a1b0fdd8..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Discovery/ChangeLog +++ /dev/null @@ -1,13 +0,0 @@ -2003-05-13 Martin Willemoes Hansen - * ContractReferenceTest.cs: Inherits from Assertion and Assertion. - prefixes removed. - -2003-02-22 Dave Bettin - * Moved over to Nunit2 Tests - * Removed AllTests.cs - -2002-08-09 Tim Coleman - * AllTests.cs: - * ChangeLog: - * ContractReferenceTest.cs: - New files added for test suite. diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Discovery/ContractReferenceTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Discovery/ContractReferenceTest.cs deleted file mode 100644 index 4198b352489..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Discovery/ContractReferenceTest.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// MonoTests.System.Web.Services.Discovery.ContractReferenceTest.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Dave Bettin (dave@opendotnet.com) -// -// Copyright (C) Tim Coleman, 2002 -// Copyright (C) Dave Bettin, 2003 -// - -using NUnit.Framework; -using System; -using System.Web.Services.Discovery; - -namespace MonoTests.System.Web.Services.Discovery { - - [TestFixture] - public class ContractReferenceTest : Assertion { - - [Test] - public void TestConstructors () - { - ContractReference contractReference; - } - - [Test] - public void TestConstants () - { - AssertEquals ("http://schemas.xmlsoap.org/disco/scl/", ContractReference.Namespace); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services/ChangeLog b/mcs/class/System.Web.Services/Test/System.Web.Services/ChangeLog deleted file mode 100644 index e7d9656087c..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services/ChangeLog +++ /dev/null @@ -1,13 +0,0 @@ -2003-05-13 Martin Willemoes Hansen - * Tests inherits from Assertion and Assertion. prefix is removed. - -2003-02-22 Dave Bettin - * Moved over to Nunit2 Tests - * Removed AllTests.cs - -2002-08-07 Tim Coleman - * AllTests.cs: - * ChangeLog: - * WebMethodAttributeTest.cs: - * WebServiceAttributeTest.cs: - New files and directories added for test suite. diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services/WebMethodAttributeTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services/WebMethodAttributeTest.cs deleted file mode 100644 index 0023bbf64f1..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services/WebMethodAttributeTest.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// MonoTests.System.Web.Services.WebMethodAttributeTest.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Dave Bettin (dave@opendotnet.com) -// -// Copyright (C) Tim Coleman, 2002 -// Copyright (C) Dave Bettin, 2003 -// - -using NUnit.Framework; -using System; -using System.Web.Services; -using System.EnterpriseServices; - -namespace MonoTests.System.Web.Services { - - [TestFixture] - public class WebMethodAttributeTest : Assertion { - - [Test] - public void TestConstructors () - { - WebMethodAttribute attribute; - - attribute = new WebMethodAttribute (); - AssertEquals (true, attribute.BufferResponse); - AssertEquals (0, attribute.CacheDuration); - AssertEquals (String.Empty, attribute.Description); - AssertEquals (false, attribute.EnableSession); - AssertEquals (String.Empty, attribute.MessageName); - AssertEquals (TransactionOption.Disabled, attribute.TransactionOption); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services/WebServiceAttributeTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services/WebServiceAttributeTest.cs deleted file mode 100644 index 1eb952b678e..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services/WebServiceAttributeTest.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// MonoTests.System.Web.Services.WebServiceAttributeTest.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// Dave Bettin (dave@opendotnet.com) -// -// Copyright (C) Tim Coleman, 2002 -// Copyright (C) Dave Bettin, 2003 -// - -using NUnit.Framework; -using System; -using System.Web.Services; - -namespace MonoTests.System.Web.Services { - - [TestFixture] - public class WebServiceAttributeTest : Assertion { - - [Test] - public void TestConstructors () - { - WebServiceAttribute attribute; - - attribute = new WebServiceAttribute (); - AssertEquals (String.Empty, attribute.Description); - AssertEquals (String.Empty, attribute.Name); - AssertEquals ("http://tempuri.org/", attribute.Namespace); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services_test.args b/mcs/class/System.Web.Services/Test/System.Web.Services_test.args deleted file mode 100755 index 4cac28d1095..00000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services_test.args +++ /dev/null @@ -1,12 +0,0 @@ ---target library --o System.Web.Services_test.dll ---noconfig --r ../../lib/corlib.dll --r ../../lib/System.dll --r ../../lib/System.Web.Services.dll --r ../../lib/System.EnterpriseServices.dll --r ../../../nunit20/NUnit.Framework.dll -System.Web.Services/WebMethodAttributeTest.cs -System.Web.Services/WebServiceAttributeTest.cs -System.Web.Services.Configuration/XmlFormatExtensionAttributeTest.cs -System.Web.Services.Discovery/ContractReferenceTest.cs diff --git a/mcs/class/System.Web.Services/Test/standalone/.cvsignore b/mcs/class/System.Web.Services/Test/standalone/.cvsignore deleted file mode 100644 index 53143c1f3ea..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/.cvsignore +++ /dev/null @@ -1,16 +0,0 @@ -*.dll -*.mdb -TestResult.xml -WsdlTestResult.xml -client.sources -error -proxies -proxies.diff.xml -proxies.mono.xml -proxies.net.xml -proxies.sources -proxy-gen-error.xml -semantic.cache -serviceStatus.xml -somefile -wsdlcache diff --git a/mcs/class/System.Web.Services/Test/standalone/ChangeLog b/mcs/class/System.Web.Services/Test/standalone/ChangeLog deleted file mode 100644 index 28b5e4feea4..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/ChangeLog +++ /dev/null @@ -1,200 +0,0 @@ -2005-02-07 Lluis Sanchez Gual - - * client/localhost/TestBinding4Test.cs: Fix build. - -2004-11-08 Raja R Harinath - - * Makefile (test-clients): Refer to 'nunit-console.exe' in - profile-specific directory. - -2004-09-29 Lluis Sanchez Gual - - * Makefile: Remove error directory on every run. - * wstest.cs: Added a timeout when calling the wsdl tool. No more - hangs there. - -2004-09-29 Raja R Harinath - - * Makefile (test-clients): nunit-console.exe is now in a - profile-specific directory. - Report from Mayank Ritvik . - -2004-08-25 Lluis Sanchez Gual - - * server/SessionCounter.asmx: Check that Context != null in the constructor. - -2004-07-01 Lluis Sanchez Gual - - * Conv.asmx.template, Conv.cs.template, client/localhost/ConvDoc*, - server/Conv*: Added tests for unknown headers. - * proxies.net.xml.gz, wsdlfiles.tar.gz: Updated. - -2004-07-01 Lluis Sanchez Gual - - * WebServiceTest.cs, client/external/BankCodeEJBHomeTest.cs, - client/external/GlobalWeatherTest.cs, client/external/HPcatalogTest.cs, - client/external/IODCODESPOSTAUXTest.cs, - client/external/TemperatureServiceTest.cs, - client/localhost/DataServiceTest.cs, - client/localhost/DuplicateArrayTestTest.cs, - client/localhost/IncludeTestTest.cs, - client/localhost/TestBinding4Test.cs: Use new nunit 2.2 api. - - * server/ConvDocLitWra.asmx, server/ConvDocEncWra.asmx, - server/ConvDocLitBar.asmx, server/ConvDocLitWra.asmx, - server/ConvRpc.asmx, - - * wstest.cs: Added support for generating tests cases from a template. - Useful to test the same case in all formats and protocols. - - * proxies.net.xml.gz, wsdlfiles.tar.gz: Updated. - - * client/localhost/ConvDocEncBarTest.cs, - client/localhost/ConvDocLitBarTest.cs, - client/localhost/ConvDocLitWraTest.cs, - client/localhost/ConvRpcTest.cs, - client/localhost/ConvDocEncBar.asmx: - Improved tests. Use new nunit 2.2 api. - - * Conv.cs.template: template for ConverterService client tests. - - * Conv.asmx.template: template for ConverterService services. - - * templates.xml: Configuration file for generating the tests. - -2004-06-22 Lluis Sanchez Gual - - * proxies.net.xml.gz: Updated. - * wsdlfiles.tar.gz: Updated. - -2004-06-10 Lluis Sanchez Gual - - * Makefile: Fix ms.net api file before the comparison. - * cormissing.xsl: Removed html encoding. Now generates plain text. - * proxies.net.xml.gz: Updated. - * services.xml: Updated. - * wsdlfiles.tar.gz: Updated. - * wstest.cs: Added option for removing wrong extra classes from ms.net - api xml file. Improved checkdiff option. - -2004-06-04 Lluis Sanchez Gual - - * Makefile: Changed nunit dll, to make it easier to integrate in the result - web page. - * wstest.cs: Little fix. - -2004-06-03 Lluis Sanchez Gual - - * Makefile: generate client source file list before compiling the test - suite. - -2004-06-03 Lluis Sanchez Gual - - * wsdlfiles.tar.gz: New file that contains all test wsdl documents. - * proxies.net.xml.gz: Description of the proxies generated by MS.NET. - * cormissing.xml: Formatting stuff. - -2004-06-03 Lluis Sanchez Gual - - * Makefile: Added new targets for running the tests. Now the generated - proxies are checked against the ones generated by MS.NET. - * services.xml: Updated service list. - * wstest.cs: new command checkdiff: generates a xml file using nunit format - with all differences between mono generated proxies and MS.NET ones. - * client/localhost/ConvRpcTest.cs: Fixed url. - -2004-05-12 Lluis Sanchez Gual - - * Makefile: Added reference to System.Data. - * services.xml, wsdl.ignore: Updated. - * wstest.cs: Small improvements. - * external/BankCodeEJBHomeTest.cs, external/GlobalWeatherTest.cs, - external/HPcatalogTest.cs, external/IODCODESPOSTAUXTest.cs, - external/TemperatureServiceTest.cs, localhost/ConvDocEncBarTest.cs, - localhost/ConvDocEncWraTest.cs, localhost/ConvDocLitBarTest.cs, - localhost/ConvDocLitWraTest.cs, localhost/ConvRpcTest.cs - Changed namespace to make it easier to select tests in gnunit. - * localhost/ConvRpcTest.cs: Added test for method that returns "Object". - * server/ConvDocEncWra.asmx, ConvDocLitWra.asmx, ConvRpc.asmx: New test - methods. - * server/web.config: Added version to vsdisco handler type name. - * client/localhost/DataServiceTest.cs - client/localhost/DuplicateArrayTestTest.cs - client/localhost/SessionCounterTest.cs - server/DataService.asmx - server/DuplicateArrayTest.asmx - server/SessionCounter.asmx: New tests. - - -2004-03-10 Lluis Sanchez Gual - - * client/localhost/ConvDocLitWraTest.cs: Test Discover() method. - -2004-03-02 Lluis Sanchez Gual - - * services.xml: More services. - * wstest.cs: Added null check. - * client/localhost/IncludeTestTest.cs: New test. - * server/localhost/IncludeTest.asmx, server/localhost/Test1.asmx, - server/localhost/Test2.asmx, server/localhost/TestBinding6.asmx. - -2004-02-27 Lluis Sanchez Gual - - * services.xml: Updated service list. - * wstest.cs: New feature: it generates a serviceStatus.xml file that - helps keeping track of services that are not available any more. - * client/localhost/ConvDocEncBarTest.cs, ConvDocEncWraTest.cs: - Improved tests. - * server/ConvDocLitBar.asmx: Removed inheritance from WebService, to make - sure that this works. - -2004-02-04 Lluis Sanchez Gual - - * wstest.cs: Added new option that downloads and cahces the wsdl docs. - * services.xml: More services. - * Makefile: Updated. - * server/TestBinding5.asmx: new test service. - -2004-01-27 Lluis Sanchez Gual - - * wstest.cs: Improved the way wsdl documents are downloaded. - * services.xml: updated service list. - * wsdl.ignore: updated ignore list. - * client/external/GlobalWeatherTest.cs: new test. - * client/external/syndicateTest.cs: new test. - * client/external/TemperatureServiceTest.cs: new test. - * client/external/BankCodeEJBHomeTest.cs: added comment. - * server/TestBinding1.asmx, server/TestBinding2.asmx, - * server/TestBinding3.asmx, server/TestBinding4.asmx: new test services - -2004-01-14 Lluis Sanchez Gual - - * wstest.cs: Wsdl documents are cached locally. - * services.xml: updated services. - -2003-12-23 Lluis Sanchez Gual - - * wstest.cs: Removed debug WriteLine. - * services.xml: updated services. - * server/web.config: Added. - -2003-12-22 Lluis Sanchez Gual - - * wstest.cs: Changed default directory for client tests. Added some tests. - * Makefile: Use xsp.vsdisco instead of xsp.disco. - -2003-12-19 Lluis Sanchez Gual - - * services.xml: Enabled test for a couple of services. - * wstest.cs: Improved "stat" option. - -2003-12-15 Lluis Sanchez Gual - - * Makefile.cs: Generate list of client test files in target "gen". - * services.xml: Added a couple of services. - * wstest.cs: Added "stat" option. - -2003-12-12 Lluis Sanchez Gual - - * Added web service test suite - diff --git a/mcs/class/System.Web.Services/Test/standalone/Conv.asmx.template b/mcs/class/System.Web.Services/Test/standalone/Conv.asmx.template deleted file mode 100644 index a06215e4578..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/Conv.asmx.template +++ /dev/null @@ -1,224 +0,0 @@ -<%@ WebService Language="c#" Codebehind="ConverterService.asmx.cs" Class="WebServiceTests.ConverterService" %> - -/* -$TEMPLATE_WARNING$ -*/ - -using System; -using System.Collections; -using System.Xml; -using System.Xml.Serialization; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Web.Services.Description; - -namespace WebServiceTests -{ - public class UserInfo : SoapHeader - { - public int userId; - } - - public class CurrencyInfo - { - public CurrencyInfo () - { - } - - public CurrencyInfo (string name, double rate) - { - Name = name; - Rate = rate; - } - - public string Name; - public double Rate; - } - - public class Simple - { - public int Dada; - } - - [WebServiceAttribute (Namespace="urn:mono-ws-tests", Description="Web service that can make currency conversions")] - $SERVICE_ATTRIBUTE$ - public class ConverterService : System.Web.Services.WebService - { - static int userCount = 0; - static Hashtable conversionTable; - - public UserInfo userInfo; - - public SoapHeader unknown1; - public SoapHeader[] unknown2; - public SoapUnknownHeader unknown3; - public SoapUnknownHeader[] unknown4; - - static ConverterService () - { - conversionTable = new Hashtable (); - InternalSetCurrencyRate ("USD", 1); - InternalSetCurrencyRate ("EUR", 0.883884 ); - InternalSetCurrencyRate ("GBP", 0.611817 ); - InternalSetCurrencyRate ("JPY", 118.271 ); - InternalSetCurrencyRate ("CAD", 1.36338 ); - InternalSetCurrencyRate ("AUD", 1.51485 ); - InternalSetCurrencyRate ("CHF", 1.36915 ); - InternalSetCurrencyRate ("RUR", 30.4300 ); - InternalSetCurrencyRate ("CNY", 8.27740 ); - InternalSetCurrencyRate ("ZAR", 7.62645 ); - InternalSetCurrencyRate ("MXN", 10.5025 ); - } - - [WebMethod (Description="Registers the user into the system")] - [SoapHeaderAttribute ("userInfo", Direction = SoapHeaderDirection.Out)] - public void Login (string a) - { - userInfo = new UserInfo (); - userInfo.userId = ++userCount; - } - - [WebMethod (Description="Converts an amount from one currency to another currency")] - [SoapHeaderAttribute ("userInfo")] - public double Convert (string sourceCurrency, string targetCurrency, double value) - { - CheckUser (); - double usd = (1 / GetCurrencyRate (sourceCurrency)) * value; - return usd * GetCurrencyRate (targetCurrency); - } - - [WebMethod (Description="Returns a list of currency rates")] - [SoapHeaderAttribute ("userInfo")] - public CurrencyInfo[] GetCurrencyInfo () - { - CheckUser (); - - lock (conversionTable) - { - CurrencyInfo[] info = new CurrencyInfo[conversionTable.Count]; - int n = 0; - foreach (CurrencyInfo cinfo in conversionTable.Values) - info [n++] = cinfo; - return info; - } - } - - [WebMethod (Description="Sets the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public void SetCurrencyRate (string currency, double rate) - { - CheckUser (); - InternalSetCurrencyRate (currency, rate); - } - - static void InternalSetCurrencyRate (string currency, double rate) - { - lock (conversionTable) - { - conversionTable [currency] = new CurrencyInfo (currency, rate); - } - } - - [WebMethod (Description="Returns the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public double GetCurrencyRate ([XmlElement(DataType="Name")]string cname) - { - CheckUser (); - lock (conversionTable) - { - if (!conversionTable.ContainsKey (cname)) - throw new SoapException ("Unknown currency '" + cname + "'", SoapException.ServerFaultCode); - - return ((CurrencyInfo) conversionTable [cname]).Rate; - } - } - - [WebMethod] - public void Test (Simple dada1, int dada) - { - dada = 1; - } - - [WebMethod (MessageName="Test2")] - public void Test (int[] dada2, byte[] dada3, int dada) - { - dada = 1; - } - - [WebMethod] - public System.Collections.Specialized.StringCollection TestArrays (string[] info, string lang) - { - return null; - } - - void CheckUser () - { - if (userInfo == null) - throw new SoapException ("User not logged", SoapException.ServerFaultCode); - } - - [WebMethod] - [return: $XML_ELEMENT$("retret")] - public MyInfo GetTestInfo (string s, out string d) - { - d = "iii"; - return new MyInfo(); - } - - [SoapHeaderAttribute ("unknown1")] - [WebMethod] - public void TestUnknownHeader1 () - { - if (unknown1 == null) - throw new Exception ("Header is null"); - - if (unknown1.Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown2")] - [WebMethod] - public void TestUnknownHeader2 () - { - if (unknown2 == null || unknown2.Length != 1) - throw new Exception ("Header is null"); - - if (unknown2[0].Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown3")] - [WebMethod] - public int TestUnknownHeader3 () - { - if (unknown3 == null) - throw new Exception ("Header is null"); - - if (unknown3.Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown3.Element ["userId"]; - return int.Parse (child.InnerText); - } - - [SoapHeaderAttribute ("unknown4")] - [WebMethod] - public int TestUnknownHeader4 () - { - if (unknown4 == null || unknown4.Length != 1) - throw new Exception ("Header is null"); - - if (unknown4[0].Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown4[0].Element ["userId"]; - return int.Parse (child.InnerText); - } - } - - public class MyInfo - { - public int a = 4; - public string b = "hi"; - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/Conv.cs.template b/mcs/class/System.Web.Services/Test/standalone/Conv.cs.template deleted file mode 100644 index 996ad628fad..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/Conv.cs.template +++ /dev/null @@ -1,273 +0,0 @@ -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Threading; -using NUnit.Framework; -using System.Web.Services.Protocols; -using System.Xml; -using $PROXY_NAMESPACE$; - -namespace Localhost.$TEST_NAMESPACE$ -{ - [TestFixture] - public class ConverterTest: WebServiceTest - { - [Test] - public void TestService () - { - ConverterService cs = new ConverterService (); - cs.Login ("lluis"); - cs.SetCurrencyRate ("EUR", 0.5); - Assert.AreEqual (0.5, cs.GetCurrencyRate ("EUR"), "#1"); - - double res = cs.Convert ("EUR","USD",6); - Assert.AreEqual ((int)res, (int)12, "#2"); - - CurrencyInfo[] infos = cs.GetCurrencyInfo (); - Assert.IsNotNull (infos, "infos"); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - Assert.IsNotNull (info.Name, "info.Name"); - - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - Assert.AreEqual (val, info.Rate, "#3 " + info.Name); - } - cs.SetCurrencyRate ("EUR", 0.9); - } - - // Async tests - - ConverterService acs; - bool a1; - bool a2; - bool a3; - AutoResetEvent eve = new AutoResetEvent (false); - - [Test] - public void AsyncTestService () - { - IAsyncResult ar; - acs = new ConverterService (); - - ar = acs.BeginLogin ("lluis", null, null); - acs.EndLogin (ar); - - acs.BeginSetCurrencyRate ("EUR", 0.5, new AsyncCallback(Callback1), null); - - Assert.IsTrue (eve.WaitOne (5000, false), "#0"); - Assert.IsTrue (a1, "#1"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#2"); - Assert.IsTrue (a2, "#3"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#4"); - Assert.IsTrue (a3, "#5"); - } - - void Callback1 (IAsyncResult ar) - { - acs.EndSetCurrencyRate (ar); - acs.BeginGetCurrencyRate ("EUR", new AsyncCallback(Callback2), null); - } - - void Callback2 (IAsyncResult ar) - { - double res = acs.EndGetCurrencyRate (ar); - a1 = (res == 0.5); - eve.Set (); - - acs.BeginConvert ("EUR","USD",6, new AsyncCallback(Callback3), null); - } - - void Callback3 (IAsyncResult ar) - { - double res = acs.EndConvert (ar); - a2 = (res == 12); - eve.Set (); - - acs.BeginGetCurrencyInfo (new AsyncCallback(Callback4),null); - } - - void Callback4 (IAsyncResult ar) - { - CurrencyInfo[] infos = acs.EndGetCurrencyInfo (ar); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - a3 = (val == info.Rate); - if (!a3) break; - } - eve.Set (); - } - - [Test] - public void TestException () - { - ConverterService cs = new ConverterService (); - try - { - cs.SetCurrencyRate ("EUR", 0.5); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void AsyncTestException () - { - ConverterService cs = new ConverterService (); - IAsyncResult ar = cs.BeginSetCurrencyRate ("EUR", 0.5, null, null); - try - { - cs.EndSetCurrencyRate (ar); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void TestObjectReturn () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - - // Test the Discover method. - et.Url = "http://localhost:8080/$ASMX_NAME$?disco"; - et.Discover (); - - string d; - object res = et.GetTestInfo ("hi", out d); - - Assert.AreEqual ("iii", d, "t1"); - Assert.IsNotNull (res, "t2"); - Assert.IsTrue (res is XmlNode[], "t3"); - XmlNode[] nods = res as XmlNode[]; - Assert.AreEqual (5, nods.Length, "t4"); - - Assert.IsTrue (nods[0] is XmlAttribute, "t5"); - XmlAttribute at = nods[0] as XmlAttribute; - Assert.AreEqual ("id", at.LocalName, "t6"); - - Assert.IsTrue (nods[1] is XmlAttribute, "t7"); - at = nods[1] as XmlAttribute; - Assert.AreEqual ("type", at.LocalName, "t8"); - - Assert.IsTrue (nods[2] is XmlAttribute, "t9"); - at = nods[2] as XmlAttribute; - - Assert.IsTrue (nods[3] is XmlElement, "t10"); - XmlElement el = nods[3] as XmlElement; - Assert.AreEqual ("a", el.Name, "t11"); - - Assert.IsTrue (nods[4] is XmlElement, "t12"); - el = nods[4] as XmlElement; - Assert.AreEqual ("b", el.Name, "t13"); - } - - [Test] - public void TestUnknownHeaders () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - et.Url = "http://localhost:8080/$ASMX_NAME$"; - - et.myUserInfo = new MyUserInfo (); - et.myUserInfo.userId = 5; - et.myUserInfo.Actor = "hi"; - - et.TestUnknownHeader1 (); - - et.TestUnknownHeader2 (); - - int res = et.TestUnknownHeader3 (); - Assert.AreEqual (5, res, "TestUnknownHeader3"); - - res = et.TestUnknownHeader4 (); - Assert.AreEqual (5, res, "TestUnknownHeader4"); - } - } - - [System.Web.Services.WebServiceBindingAttribute(Name="ConverterServiceSoap", Namespace="urn:mono-ws-tests")] - public class ConverterServiceExtraTest : System.Web.Services.Protocols.SoapHttpClientProtocol - { - public MyUserInfo myUserInfo; - - [System.Web.Services.Protocols.$METHOD_ATTRIBUTE$("urn:mono-ws-tests/GetTestInfo", RequestNamespace="urn:mono-ws-tests", ResponseNamespace="urn:mono-ws-tests" $METHOD_ATTRIBUTE_PARAMS$)] - public object GetTestInfo(string s, out string d) { - object[] results = this.Invoke("GetTestInfo", new object[] {s}); - d = (string) results[1]; - return ((object)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.$METHOD_ATTRIBUTE$("urn:mono-ws-tests/TestUnknownHeader1",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" $METHOD_ATTRIBUTE_PARAMS$)] - public virtual void TestUnknownHeader1() { - this.Invoke("TestUnknownHeader1", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.$METHOD_ATTRIBUTE$("urn:mono-ws-tests/TestUnknownHeader2",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" $METHOD_ATTRIBUTE_PARAMS$)] - public virtual void TestUnknownHeader2() { - this.Invoke("TestUnknownHeader2", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.$METHOD_ATTRIBUTE$("urn:mono-ws-tests/TestUnknownHeader3",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" $METHOD_ATTRIBUTE_PARAMS$)] - public virtual int TestUnknownHeader3() { - System.Object[] results = this.Invoke("TestUnknownHeader3", new object[0]); - return ((int)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.$METHOD_ATTRIBUTE$("urn:mono-ws-tests/TestUnknownHeader4",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" $METHOD_ATTRIBUTE_PARAMS$)] - public virtual int TestUnknownHeader4() { - System.Object[] results = this.Invoke("TestUnknownHeader4", new object[0]); - return ((int)(results[0])); - } - } - - public class MyUserInfo : System.Web.Services.Protocols.SoapHeader - { - public int userId; - } - -} diff --git a/mcs/class/System.Web.Services/Test/standalone/Makefile b/mcs/class/System.Web.Services/Test/standalone/Makefile deleted file mode 100644 index 90fd4371d2c..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/Makefile +++ /dev/null @@ -1,86 +0,0 @@ -MCS=mcs -g -sourcefile = proxies.sources - -tools: wstest.exe - -proxies: proxies.dll - -wstest.exe: wstest.cs - $(MCS) wstest.cs /r:System.Web.Services.dll - -clean: - rm -f *.dll *.exe *~ *.pdb - rm -rf proxies - rm -rf wsdlcache - rm error/* - -proxies.dll: - $(MCS) /r:System.Web.Services.dll /r:System.Data /target:library -out:proxies.dll @proxies.sources - -tests: proxies - $(MCS) /r:proxies.dll /r:System.Web.Services.dll /r:nunit.framework.dll /r:System.Data /target:library -out:System.Web.Services-standalone_test.dll @client.sources WebServiceTest.cs - -update: - mono --debug wstest.exe ur http://www.xmethods.net/default.disco wsdl.ignore - mono --debug wstest.exe ur http://localhost:8080/xsp.vsdisco - mono --debug wstest.exe dw - rm -f wsdlfiles.tar.gz - tar --gzip -cf wsdlfiles.tar.gz wsdl - -gen: - mono --debug wstest.exe gp - mono --debug wstest.exe gc - -regen: - mono --debug wstest.exe gp all - -cls: - mono --debug wstest.exe clean - -pack: - tar --gzip -cf wsdlfiles.tar.gz wsdlcache - gzip proxies.net.xml - -winbase: - csc wstest.cs - rm -rf wsdl - rm -rf proxies - rm -f proxies.dll - tar xvfz wsdlfiles.tar.gz - wstest.exe gp - csc /r:System.Web.Services.dll /r:System.Data /target:library -out:proxies.dll @proxies.sources - mono ../../../../tools/corcompare/mono-api-info.exe proxies.net.dll > proxies.net.xml - -test-wsdl: tools - rm -rf error/* - rm -rf wsdlcache - rm -rf proxies - rm -f proxies.dll - tar xvfz wsdlfiles.tar.gz - gunzip -c proxies.net.xml.gz > proxies.net.xml - mono wstest.exe gp - mono wstest.exe gc - mcs /r:System.Web.Services.dll /r:System.Data /target:library -out:proxies.dll @proxies.sources - mono ../../../../tools/corcompare/mono-api-info.exe proxies.dll > proxies.mono.xml - mono wstest.exe msfix proxies.net.xml - mono ../../../../tools/corcompare/mono-api-diff.exe proxies.net.xml proxies.mono.xml > proxies.diff.xml - mono wstest.exe checkdiff proxies.diff.xml - -test-clients: tests - rm -f somefile && touch somefile - (tail -f somefile | xsp --root server)& - sleep 2 - -harness=../../../lib/default/nunit-console.exe; \ - if test -f $$harness; then :; else harness=../../../lib/nunit-console.exe; fi; \ - mono $$harness System.Web.Services-standalone_test.dll - echo "" >> somefile - -test: test-wsdl test-clients - -respage: - mono transform.exe proxies.diff.xml ../../../../tools/corcompare/mono-api.xsl > proxies.data.html - cat header.html proxies.data.html > proxies.html - rm proxies.data.html - -genfiles: - mono wstest.exe genfiles templates.xml diff --git a/mcs/class/System.Web.Services/Test/standalone/README b/mcs/class/System.Web.Services/Test/standalone/README deleted file mode 100644 index f123e89f6b3..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/README +++ /dev/null @@ -1,91 +0,0 @@ -Web Service Test Suite ----------------------- - -This directory contains a test suite for testing Web Services. It tests: - -* Proxy generation using the wsdl tool -* Access to web services using the generated client proxies -* Execution of web services in the server - -This suite not only tests web services running on XSP, but it can also test -services running on other platforms and that are available in internet. This -will help track down interoperability issues. - -To build the test suite, just run: - -> xsp --nonstop --root server & -> make - -This will download the wsdl documents, generate the proxies, build a dll with -the proxies, and build the nunit tests. Then you can use nunit-console or -gnunit to run the tests (the nunit dll is testclient.dll). - -Which services are tested? --------------------------- - -The file services.xml contains the list of services to test. There is an -xml element for each web service with the following structure: - - - url // url to the wsdl document - name // name of the service - // List of protocols for which to - Soap // generate a proxy - HttpGet - HttpPost - - true // True if there is a nunit test - // for the service - -Notice that not all web services will have a corresponding nunit test, since -such test is not allways possible. However, proxy generation will be tested -for all of them. - -You can manually add new services to the list or use the wstest tool to add -a list of references included in a DISCO document. For example: - -> ./wstest ur - -This will download the DISCO document from the provided and add an entry -for each service referenced in the document. The second parameter is optional, -it is a file that contains a list of wsdl urls that should be ignored from the -document. - -The current Makefile downloads references from the following locations: - -* http://www.xmethods.net/default.disco -* http://localhost:8080/xsp.disco - -Creating a new nunit test -------------------------- - -To test services running in XSP, just add the asmx file in the "server" -directory and update the xsp.disco file in there. Then run "make". - -To create a nunit test for a web service already registered, just run: - -> ./wstest gc - -Where url is the URL of the service's WSDL document. This will generate a class -in the "client" directory with a basic structure. You should then manually -implement the test. - -Other useful targets in of the makefile ---------------------------------------- - -make update: Updates the services.xml list with the references from - http://www.xmethods.net/default.disco and - http://localhost:8080/xsp.disco - -make gen: Generates proxies for new service references. - -make regen: Regenerates all proxies - -make cls: Removes obsolete proxies and tests. - -make proxies: Builds the proxy library. - -make tests: Builds the nunit library. - -make tools: Builds wstest. - diff --git a/mcs/class/System.Web.Services/Test/standalone/WebServiceTest.cs b/mcs/class/System.Web.Services/Test/standalone/WebServiceTest.cs deleted file mode 100644 index 7fd0b215cc7..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/WebServiceTest.cs +++ /dev/null @@ -1,5 +0,0 @@ -using NUnit.Framework; - -public class WebServiceTest -{ -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/external/BankCodeEJBHomeTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/external/BankCodeEJBHomeTest.cs deleted file mode 100644 index c0287cebae7..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/external/BankCodeEJBHomeTest.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Web service test for WSDL document: -// http://appserver.pepperzak.net/bankcode/BankCodeEJBHome/wsdl.jsp - -using System; -using NUnit.Framework; -using BankCodeEJBHomeTests.Soap; - -namespace External.BankCodeEJBHomeTests -{ - [TestFixture] - public class BankCodeEJBHomeTest: WebServiceTest - { - [Test] - public void TestService () - { - // BEA Weblogic / RPC - - BankCode bc = new BankCode (); - - Assert.AreEqual ("10020000 ", bc.getCodeByName ("Berlin"), "#1"); - string s = bc.getNameByCode ("10020000 "); - Assert.AreEqual ("10020000 ", bc.getCodeByName (s), "#2"); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/external/GlobalWeatherTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/external/GlobalWeatherTest.cs deleted file mode 100644 index 8e6730000ea..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/external/GlobalWeatherTest.cs +++ /dev/null @@ -1,52 +0,0 @@ -// Web service test for WSDL document: -// http://live.capescience.com/wsdl/GlobalWeather.wsdl - -using System; -using NUnit.Framework; -using GlobalWeatherTests.Soap; - -namespace External.GlobalWeatherTests -{ - [TestFixture] - public class GlobalWeatherTest: WebServiceTest - { - // CapeConnect / RPC - - [Test] - public void TestStationInfo () - { - StationInfo si = new StationInfo (); - string[] countries = si.listCountries (); - Assert.IsNotNull (countries); - Assert.AreEqual (215, countries.Length); - Assert.AreEqual ("afghanistan", countries[0]); - Assert.AreEqual ("spain", countries[177]); - Assert.AreEqual ("zimbabwe", countries[214]); - - Station[] stations = si.searchByCountry ("spain"); - Assert.IsNotNull (stations); - foreach (Station sta in stations) - { - Assert.IsNotNull (sta); - if (sta.icao == "LEBL") - Assert.AreEqual ("Barcelona / Aeropuerto", sta.name); - } - - Station[] st = si.searchByCode ("LEBL"); - Assert.IsNotNull (st); - Assert.AreEqual (1, st.Length); - Assert.AreEqual ("Barcelona / Aeropuerto", st[0].name); - } - - [Test] - public void TestGlobalWeather () - { - GlobalWeather gw = new GlobalWeather (); - WeatherReport wr = gw.getWeatherReport ("LEBL"); - - Assert.IsNotNull (wr.station); - Assert.AreEqual ("LEBL", wr.station.icao); - Assert.AreEqual ("Barcelona / Aeropuerto", wr.station.name); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/external/HPcatalogTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/external/HPcatalogTest.cs deleted file mode 100644 index 41503219a46..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/external/HPcatalogTest.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Web service test for WSDL document: -// http://www.lixusnet.com/lixusnet/HPcatalog.jws?wsdl - -using System; -using NUnit.Framework; -using HPcatalogTests.Soap; - -namespace External.HPcatalogTests -{ - [TestFixture] - public class HPcatalogTest: WebServiceTest - { - [Test] - public void TestService () - { - // AXIS / rpc - - HPcatalogService ser = new HPcatalogService (); - string[][] list = ser.getList ("F2444KG"); - - Assert.IsNotNull (list); - Assert.AreEqual (121, list.Length); - - list = ser.getList ("D5319A"); - Assert.IsNotNull (list); - Assert.AreEqual (2, list.Length); - - Assert.IsNotNull (list[0]); - Assert.AreEqual ("8120-8382", list[0][0]); - Assert.AreEqual ("Power cord (Flint Gray) - 18 AWG, 1.8m (6.0ft) long - Has straight (F) receptacle (For 120V in the USA and Canada)", list[0][1]); - - Assert.IsNotNull (list[1]); - Assert.AreEqual ("5182-8895", list[1][0]); - Assert.AreEqual ("Heat sink support base / retention base - For Pentium II (Klamath) processor", list[1][1]); - - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/external/IODCODESPOSTAUXTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/external/IODCODESPOSTAUXTest.cs deleted file mode 100644 index 25f8fb4e13a..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/external/IODCODESPOSTAUXTest.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Web service test for WSDL document: -// http://www.e-naxos.com/scripts/enwscp.dll/wsdl/IODCODESPOSTAUX - -using System; -using NUnit.Framework; -using IODCODESPOSTAUXTests.Soap; - -namespace External.IODCODESPOSTAUXTests -{ - [TestFixture] - public class IODCODESPOSTAUXTest: WebServiceTest - { - [Test] - public void TestService () - { - // Delphi / RPC - - IODCODESPOSTAUXservice ser = new IODCODESPOSTAUXservice (); - -// ser.GetTownsForSoundex ("Pyrénées Orientales",","); - string res = ser.GetDepartmentForCode ("66"); - Console.WriteLine ("á"); - Console.WriteLine (res); - Console.WriteLine ("Pyrénées Orientales"); - Assert.AreEqual ("Pyrénées Orientales", res); - - res = ser.GetZipForTown ("Perpignan",",",true); - Assert.AreEqual ("66000=Perpignan,66100=Perpignan", res); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/external/TemperatureServiceTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/external/TemperatureServiceTest.cs deleted file mode 100644 index b5ab3513309..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/external/TemperatureServiceTest.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Web service test for WSDL document: -// http://www.xmethods.net/sd/2001/TemperatureService.wsdl - -using System; -using NUnit.Framework; -using TemperatureServiceTests.Soap; - -namespace External.TemperatureServiceTests -{ - [TestFixture] - public class TemperatureServiceTest: WebServiceTest - { - [Test] - public void TestService () - { - // Apache SOAP / RPC - - TemperatureService ts = new TemperatureService (); - float temp = ts.getTemp ("95110"); - Assert.IsTrue (temp < 140 && temp > -60); - - temp = ts.getTemp ("hola"); - Assert.IsTrue (temp == -999); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocEncBarTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocEncBarTest.cs deleted file mode 100644 index e59b98e1f58..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocEncBarTest.cs +++ /dev/null @@ -1,273 +0,0 @@ -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Threading; -using NUnit.Framework; -using System.Web.Services.Protocols; -using System.Xml; -using ConvDocEncBarTests.Soap; - -namespace Localhost.ConvDocEncBarTests -{ - [TestFixture] - public class ConverterTest: WebServiceTest - { - [Test] - public void TestService () - { - ConverterService cs = new ConverterService (); - cs.Login ("lluis"); - cs.SetCurrencyRate ("EUR", 0.5); - Assert.AreEqual (0.5, cs.GetCurrencyRate ("EUR"), "#1"); - - double res = cs.Convert ("EUR","USD",6); - Assert.AreEqual ((int)res, (int)12, "#2"); - - CurrencyInfo[] infos = cs.GetCurrencyInfo (); - Assert.IsNotNull (infos, "infos"); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - Assert.IsNotNull (info.Name, "info.Name"); - - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - Assert.AreEqual (val, info.Rate, "#3 " + info.Name); - } - cs.SetCurrencyRate ("EUR", 0.9); - } - - // Async tests - - ConverterService acs; - bool a1; - bool a2; - bool a3; - AutoResetEvent eve = new AutoResetEvent (false); - - [Test] - public void AsyncTestService () - { - IAsyncResult ar; - acs = new ConverterService (); - - ar = acs.BeginLogin ("lluis", null, null); - acs.EndLogin (ar); - - acs.BeginSetCurrencyRate ("EUR", 0.5, new AsyncCallback(Callback1), null); - - Assert.IsTrue (eve.WaitOne (5000, false), "#0"); - Assert.IsTrue (a1, "#1"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#2"); - Assert.IsTrue (a2, "#3"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#4"); - Assert.IsTrue (a3, "#5"); - } - - void Callback1 (IAsyncResult ar) - { - acs.EndSetCurrencyRate (ar); - acs.BeginGetCurrencyRate ("EUR", new AsyncCallback(Callback2), null); - } - - void Callback2 (IAsyncResult ar) - { - double res = acs.EndGetCurrencyRate (ar); - a1 = (res == 0.5); - eve.Set (); - - acs.BeginConvert ("EUR","USD",6, new AsyncCallback(Callback3), null); - } - - void Callback3 (IAsyncResult ar) - { - double res = acs.EndConvert (ar); - a2 = (res == 12); - eve.Set (); - - acs.BeginGetCurrencyInfo (new AsyncCallback(Callback4),null); - } - - void Callback4 (IAsyncResult ar) - { - CurrencyInfo[] infos = acs.EndGetCurrencyInfo (ar); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - a3 = (val == info.Rate); - if (!a3) break; - } - eve.Set (); - } - - [Test] - public void TestException () - { - ConverterService cs = new ConverterService (); - try - { - cs.SetCurrencyRate ("EUR", 0.5); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void AsyncTestException () - { - ConverterService cs = new ConverterService (); - IAsyncResult ar = cs.BeginSetCurrencyRate ("EUR", 0.5, null, null); - try - { - cs.EndSetCurrencyRate (ar); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void TestObjectReturn () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - - // Test the Discover method. - et.Url = "http://localhost:8080/ConvDocEncBar.asmx?disco"; - et.Discover (); - - string d; - object res = et.GetTestInfo ("hi", out d); - - Assert.AreEqual ("iii", d, "t1"); - Assert.IsNotNull (res, "t2"); - Assert.IsTrue (res is XmlNode[], "t3"); - XmlNode[] nods = res as XmlNode[]; - Assert.AreEqual (5, nods.Length, "t4"); - - Assert.IsTrue (nods[0] is XmlAttribute, "t5"); - XmlAttribute at = nods[0] as XmlAttribute; - Assert.AreEqual ("id", at.LocalName, "t6"); - - Assert.IsTrue (nods[1] is XmlAttribute, "t7"); - at = nods[1] as XmlAttribute; - Assert.AreEqual ("type", at.LocalName, "t8"); - - Assert.IsTrue (nods[2] is XmlAttribute, "t9"); - at = nods[2] as XmlAttribute; - - Assert.IsTrue (nods[3] is XmlElement, "t10"); - XmlElement el = nods[3] as XmlElement; - Assert.AreEqual ("a", el.Name, "t11"); - - Assert.IsTrue (nods[4] is XmlElement, "t12"); - el = nods[4] as XmlElement; - Assert.AreEqual ("b", el.Name, "t13"); - } - - [Test] - public void TestUnknownHeaders () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - et.Url = "http://localhost:8080/ConvDocEncBar.asmx"; - - et.myUserInfo = new MyUserInfo (); - et.myUserInfo.userId = 5; - et.myUserInfo.Actor = "hi"; - - et.TestUnknownHeader1 (); - - et.TestUnknownHeader2 (); - - int res = et.TestUnknownHeader3 (); - Assert.AreEqual (5, res, "TestUnknownHeader3"); - - res = et.TestUnknownHeader4 (); - Assert.AreEqual (5, res, "TestUnknownHeader4"); - } - } - - [System.Web.Services.WebServiceBindingAttribute(Name="ConverterServiceSoap", Namespace="urn:mono-ws-tests")] - public class ConverterServiceExtraTest : System.Web.Services.Protocols.SoapHttpClientProtocol - { - public MyUserInfo myUserInfo; - - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/GetTestInfo", RequestNamespace="urn:mono-ws-tests", ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Bare)] - public object GetTestInfo(string s, out string d) { - object[] results = this.Invoke("GetTestInfo", new object[] {s}); - d = (string) results[1]; - return ((object)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader1",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Bare)] - public virtual void TestUnknownHeader1() { - this.Invoke("TestUnknownHeader1", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader2",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Bare)] - public virtual void TestUnknownHeader2() { - this.Invoke("TestUnknownHeader2", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader3",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Bare)] - public virtual int TestUnknownHeader3() { - System.Object[] results = this.Invoke("TestUnknownHeader3", new object[0]); - return ((int)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader4",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Bare)] - public virtual int TestUnknownHeader4() { - System.Object[] results = this.Invoke("TestUnknownHeader4", new object[0]); - return ((int)(results[0])); - } - } - - public class MyUserInfo : System.Web.Services.Protocols.SoapHeader - { - public int userId; - } - -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocEncWraTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocEncWraTest.cs deleted file mode 100644 index 2731d0dab70..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocEncWraTest.cs +++ /dev/null @@ -1,273 +0,0 @@ -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Threading; -using NUnit.Framework; -using System.Web.Services.Protocols; -using System.Xml; -using ConvDocEncWraTests.Soap; - -namespace Localhost.ConvDocEncWraTests -{ - [TestFixture] - public class ConverterTest: WebServiceTest - { - [Test] - public void TestService () - { - ConverterService cs = new ConverterService (); - cs.Login ("lluis"); - cs.SetCurrencyRate ("EUR", 0.5); - Assert.AreEqual (0.5, cs.GetCurrencyRate ("EUR"), "#1"); - - double res = cs.Convert ("EUR","USD",6); - Assert.AreEqual ((int)res, (int)12, "#2"); - - CurrencyInfo[] infos = cs.GetCurrencyInfo (); - Assert.IsNotNull (infos, "infos"); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - Assert.IsNotNull (info.Name, "info.Name"); - - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - Assert.AreEqual (val, info.Rate, "#3 " + info.Name); - } - cs.SetCurrencyRate ("EUR", 0.9); - } - - // Async tests - - ConverterService acs; - bool a1; - bool a2; - bool a3; - AutoResetEvent eve = new AutoResetEvent (false); - - [Test] - public void AsyncTestService () - { - IAsyncResult ar; - acs = new ConverterService (); - - ar = acs.BeginLogin ("lluis", null, null); - acs.EndLogin (ar); - - acs.BeginSetCurrencyRate ("EUR", 0.5, new AsyncCallback(Callback1), null); - - Assert.IsTrue (eve.WaitOne (5000, false), "#0"); - Assert.IsTrue (a1, "#1"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#2"); - Assert.IsTrue (a2, "#3"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#4"); - Assert.IsTrue (a3, "#5"); - } - - void Callback1 (IAsyncResult ar) - { - acs.EndSetCurrencyRate (ar); - acs.BeginGetCurrencyRate ("EUR", new AsyncCallback(Callback2), null); - } - - void Callback2 (IAsyncResult ar) - { - double res = acs.EndGetCurrencyRate (ar); - a1 = (res == 0.5); - eve.Set (); - - acs.BeginConvert ("EUR","USD",6, new AsyncCallback(Callback3), null); - } - - void Callback3 (IAsyncResult ar) - { - double res = acs.EndConvert (ar); - a2 = (res == 12); - eve.Set (); - - acs.BeginGetCurrencyInfo (new AsyncCallback(Callback4),null); - } - - void Callback4 (IAsyncResult ar) - { - CurrencyInfo[] infos = acs.EndGetCurrencyInfo (ar); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - a3 = (val == info.Rate); - if (!a3) break; - } - eve.Set (); - } - - [Test] - public void TestException () - { - ConverterService cs = new ConverterService (); - try - { - cs.SetCurrencyRate ("EUR", 0.5); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void AsyncTestException () - { - ConverterService cs = new ConverterService (); - IAsyncResult ar = cs.BeginSetCurrencyRate ("EUR", 0.5, null, null); - try - { - cs.EndSetCurrencyRate (ar); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void TestObjectReturn () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - - // Test the Discover method. - et.Url = "http://localhost:8080/ConvDocEncWra.asmx?disco"; - et.Discover (); - - string d; - object res = et.GetTestInfo ("hi", out d); - - Assert.AreEqual ("iii", d, "t1"); - Assert.IsNotNull (res, "t2"); - Assert.IsTrue (res is XmlNode[], "t3"); - XmlNode[] nods = res as XmlNode[]; - Assert.AreEqual (5, nods.Length, "t4"); - - Assert.IsTrue (nods[0] is XmlAttribute, "t5"); - XmlAttribute at = nods[0] as XmlAttribute; - Assert.AreEqual ("id", at.LocalName, "t6"); - - Assert.IsTrue (nods[1] is XmlAttribute, "t7"); - at = nods[1] as XmlAttribute; - Assert.AreEqual ("type", at.LocalName, "t8"); - - Assert.IsTrue (nods[2] is XmlAttribute, "t9"); - at = nods[2] as XmlAttribute; - - Assert.IsTrue (nods[3] is XmlElement, "t10"); - XmlElement el = nods[3] as XmlElement; - Assert.AreEqual ("a", el.Name, "t11"); - - Assert.IsTrue (nods[4] is XmlElement, "t12"); - el = nods[4] as XmlElement; - Assert.AreEqual ("b", el.Name, "t13"); - } - - [Test] - public void TestUnknownHeaders () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - et.Url = "http://localhost:8080/ConvDocEncWra.asmx"; - - et.myUserInfo = new MyUserInfo (); - et.myUserInfo.userId = 5; - et.myUserInfo.Actor = "hi"; - - et.TestUnknownHeader1 (); - - et.TestUnknownHeader2 (); - - int res = et.TestUnknownHeader3 (); - Assert.AreEqual (5, res, "TestUnknownHeader3"); - - res = et.TestUnknownHeader4 (); - Assert.AreEqual (5, res, "TestUnknownHeader4"); - } - } - - [System.Web.Services.WebServiceBindingAttribute(Name="ConverterServiceSoap", Namespace="urn:mono-ws-tests")] - public class ConverterServiceExtraTest : System.Web.Services.Protocols.SoapHttpClientProtocol - { - public MyUserInfo myUserInfo; - - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/GetTestInfo", RequestNamespace="urn:mono-ws-tests", ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Wrapped)] - public object GetTestInfo(string s, out string d) { - object[] results = this.Invoke("GetTestInfo", new object[] {s}); - d = (string) results[1]; - return ((object)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader1",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Wrapped)] - public virtual void TestUnknownHeader1() { - this.Invoke("TestUnknownHeader1", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader2",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Wrapped)] - public virtual void TestUnknownHeader2() { - this.Invoke("TestUnknownHeader2", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader3",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Wrapped)] - public virtual int TestUnknownHeader3() { - System.Object[] results = this.Invoke("TestUnknownHeader3", new object[0]); - return ((int)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader4",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Wrapped)] - public virtual int TestUnknownHeader4() { - System.Object[] results = this.Invoke("TestUnknownHeader4", new object[0]); - return ((int)(results[0])); - } - } - - public class MyUserInfo : System.Web.Services.Protocols.SoapHeader - { - public int userId; - } - -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocLitBarTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocLitBarTest.cs deleted file mode 100644 index 855cb27a8be..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocLitBarTest.cs +++ /dev/null @@ -1,273 +0,0 @@ -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Threading; -using NUnit.Framework; -using System.Web.Services.Protocols; -using System.Xml; -using ConvDocLitBarTests.Soap; - -namespace Localhost.ConvDocLitBarTests -{ - [TestFixture] - public class ConverterTest: WebServiceTest - { - [Test] - public void TestService () - { - ConverterService cs = new ConverterService (); - cs.Login ("lluis"); - cs.SetCurrencyRate ("EUR", 0.5); - Assert.AreEqual (0.5, cs.GetCurrencyRate ("EUR"), "#1"); - - double res = cs.Convert ("EUR","USD",6); - Assert.AreEqual ((int)res, (int)12, "#2"); - - CurrencyInfo[] infos = cs.GetCurrencyInfo (); - Assert.IsNotNull (infos, "infos"); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - Assert.IsNotNull (info.Name, "info.Name"); - - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - Assert.AreEqual (val, info.Rate, "#3 " + info.Name); - } - cs.SetCurrencyRate ("EUR", 0.9); - } - - // Async tests - - ConverterService acs; - bool a1; - bool a2; - bool a3; - AutoResetEvent eve = new AutoResetEvent (false); - - [Test] - public void AsyncTestService () - { - IAsyncResult ar; - acs = new ConverterService (); - - ar = acs.BeginLogin ("lluis", null, null); - acs.EndLogin (ar); - - acs.BeginSetCurrencyRate ("EUR", 0.5, new AsyncCallback(Callback1), null); - - Assert.IsTrue (eve.WaitOne (5000, false), "#0"); - Assert.IsTrue (a1, "#1"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#2"); - Assert.IsTrue (a2, "#3"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#4"); - Assert.IsTrue (a3, "#5"); - } - - void Callback1 (IAsyncResult ar) - { - acs.EndSetCurrencyRate (ar); - acs.BeginGetCurrencyRate ("EUR", new AsyncCallback(Callback2), null); - } - - void Callback2 (IAsyncResult ar) - { - double res = acs.EndGetCurrencyRate (ar); - a1 = (res == 0.5); - eve.Set (); - - acs.BeginConvert ("EUR","USD",6, new AsyncCallback(Callback3), null); - } - - void Callback3 (IAsyncResult ar) - { - double res = acs.EndConvert (ar); - a2 = (res == 12); - eve.Set (); - - acs.BeginGetCurrencyInfo (new AsyncCallback(Callback4),null); - } - - void Callback4 (IAsyncResult ar) - { - CurrencyInfo[] infos = acs.EndGetCurrencyInfo (ar); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - a3 = (val == info.Rate); - if (!a3) break; - } - eve.Set (); - } - - [Test] - public void TestException () - { - ConverterService cs = new ConverterService (); - try - { - cs.SetCurrencyRate ("EUR", 0.5); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void AsyncTestException () - { - ConverterService cs = new ConverterService (); - IAsyncResult ar = cs.BeginSetCurrencyRate ("EUR", 0.5, null, null); - try - { - cs.EndSetCurrencyRate (ar); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void TestObjectReturn () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - - // Test the Discover method. - et.Url = "http://localhost:8080/ConvDocLitBar.asmx?disco"; - et.Discover (); - - string d; - object res = et.GetTestInfo ("hi", out d); - - Assert.AreEqual ("iii", d, "t1"); - Assert.IsNotNull (res, "t2"); - Assert.IsTrue (res is XmlNode[], "t3"); - XmlNode[] nods = res as XmlNode[]; - Assert.AreEqual (5, nods.Length, "t4"); - - Assert.IsTrue (nods[0] is XmlAttribute, "t5"); - XmlAttribute at = nods[0] as XmlAttribute; - Assert.AreEqual ("id", at.LocalName, "t6"); - - Assert.IsTrue (nods[1] is XmlAttribute, "t7"); - at = nods[1] as XmlAttribute; - Assert.AreEqual ("type", at.LocalName, "t8"); - - Assert.IsTrue (nods[2] is XmlAttribute, "t9"); - at = nods[2] as XmlAttribute; - - Assert.IsTrue (nods[3] is XmlElement, "t10"); - XmlElement el = nods[3] as XmlElement; - Assert.AreEqual ("a", el.Name, "t11"); - - Assert.IsTrue (nods[4] is XmlElement, "t12"); - el = nods[4] as XmlElement; - Assert.AreEqual ("b", el.Name, "t13"); - } - - [Test] - public void TestUnknownHeaders () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - et.Url = "http://localhost:8080/ConvDocLitBar.asmx"; - - et.myUserInfo = new MyUserInfo (); - et.myUserInfo.userId = 5; - et.myUserInfo.Actor = "hi"; - - et.TestUnknownHeader1 (); - - et.TestUnknownHeader2 (); - - int res = et.TestUnknownHeader3 (); - Assert.AreEqual (5, res, "TestUnknownHeader3"); - - res = et.TestUnknownHeader4 (); - Assert.AreEqual (5, res, "TestUnknownHeader4"); - } - } - - [System.Web.Services.WebServiceBindingAttribute(Name="ConverterServiceSoap", Namespace="urn:mono-ws-tests")] - public class ConverterServiceExtraTest : System.Web.Services.Protocols.SoapHttpClientProtocol - { - public MyUserInfo myUserInfo; - - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/GetTestInfo", RequestNamespace="urn:mono-ws-tests", ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Bare)] - public object GetTestInfo(string s, out string d) { - object[] results = this.Invoke("GetTestInfo", new object[] {s}); - d = (string) results[1]; - return ((object)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader1",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Bare)] - public virtual void TestUnknownHeader1() { - this.Invoke("TestUnknownHeader1", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader2",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Bare)] - public virtual void TestUnknownHeader2() { - this.Invoke("TestUnknownHeader2", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader3",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Bare)] - public virtual int TestUnknownHeader3() { - System.Object[] results = this.Invoke("TestUnknownHeader3", new object[0]); - return ((int)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader4",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Bare)] - public virtual int TestUnknownHeader4() { - System.Object[] results = this.Invoke("TestUnknownHeader4", new object[0]); - return ((int)(results[0])); - } - } - - public class MyUserInfo : System.Web.Services.Protocols.SoapHeader - { - public int userId; - } - -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocLitWraTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocLitWraTest.cs deleted file mode 100644 index 83e0c8813b9..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvDocLitWraTest.cs +++ /dev/null @@ -1,273 +0,0 @@ -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Threading; -using NUnit.Framework; -using System.Web.Services.Protocols; -using System.Xml; -using ConvDocLitWraTests.Soap; - -namespace Localhost.ConvDocLitWraTests -{ - [TestFixture] - public class ConverterTest: WebServiceTest - { - [Test] - public void TestService () - { - ConverterService cs = new ConverterService (); - cs.Login ("lluis"); - cs.SetCurrencyRate ("EUR", 0.5); - Assert.AreEqual (0.5, cs.GetCurrencyRate ("EUR"), "#1"); - - double res = cs.Convert ("EUR","USD",6); - Assert.AreEqual ((int)res, (int)12, "#2"); - - CurrencyInfo[] infos = cs.GetCurrencyInfo (); - Assert.IsNotNull (infos, "infos"); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - Assert.IsNotNull (info.Name, "info.Name"); - - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - Assert.AreEqual (val, info.Rate, "#3 " + info.Name); - } - cs.SetCurrencyRate ("EUR", 0.9); - } - - // Async tests - - ConverterService acs; - bool a1; - bool a2; - bool a3; - AutoResetEvent eve = new AutoResetEvent (false); - - [Test] - public void AsyncTestService () - { - IAsyncResult ar; - acs = new ConverterService (); - - ar = acs.BeginLogin ("lluis", null, null); - acs.EndLogin (ar); - - acs.BeginSetCurrencyRate ("EUR", 0.5, new AsyncCallback(Callback1), null); - - Assert.IsTrue (eve.WaitOne (5000, false), "#0"); - Assert.IsTrue (a1, "#1"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#2"); - Assert.IsTrue (a2, "#3"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#4"); - Assert.IsTrue (a3, "#5"); - } - - void Callback1 (IAsyncResult ar) - { - acs.EndSetCurrencyRate (ar); - acs.BeginGetCurrencyRate ("EUR", new AsyncCallback(Callback2), null); - } - - void Callback2 (IAsyncResult ar) - { - double res = acs.EndGetCurrencyRate (ar); - a1 = (res == 0.5); - eve.Set (); - - acs.BeginConvert ("EUR","USD",6, new AsyncCallback(Callback3), null); - } - - void Callback3 (IAsyncResult ar) - { - double res = acs.EndConvert (ar); - a2 = (res == 12); - eve.Set (); - - acs.BeginGetCurrencyInfo (new AsyncCallback(Callback4),null); - } - - void Callback4 (IAsyncResult ar) - { - CurrencyInfo[] infos = acs.EndGetCurrencyInfo (ar); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - a3 = (val == info.Rate); - if (!a3) break; - } - eve.Set (); - } - - [Test] - public void TestException () - { - ConverterService cs = new ConverterService (); - try - { - cs.SetCurrencyRate ("EUR", 0.5); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void AsyncTestException () - { - ConverterService cs = new ConverterService (); - IAsyncResult ar = cs.BeginSetCurrencyRate ("EUR", 0.5, null, null); - try - { - cs.EndSetCurrencyRate (ar); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void TestObjectReturn () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - - // Test the Discover method. - et.Url = "http://localhost:8080/ConvDocLitWra.asmx?disco"; - et.Discover (); - - string d; - object res = et.GetTestInfo ("hi", out d); - - Assert.AreEqual ("iii", d, "t1"); - Assert.IsNotNull (res, "t2"); - Assert.IsTrue (res is XmlNode[], "t3"); - XmlNode[] nods = res as XmlNode[]; - Assert.AreEqual (5, nods.Length, "t4"); - - Assert.IsTrue (nods[0] is XmlAttribute, "t5"); - XmlAttribute at = nods[0] as XmlAttribute; - Assert.AreEqual ("id", at.LocalName, "t6"); - - Assert.IsTrue (nods[1] is XmlAttribute, "t7"); - at = nods[1] as XmlAttribute; - Assert.AreEqual ("type", at.LocalName, "t8"); - - Assert.IsTrue (nods[2] is XmlAttribute, "t9"); - at = nods[2] as XmlAttribute; - - Assert.IsTrue (nods[3] is XmlElement, "t10"); - XmlElement el = nods[3] as XmlElement; - Assert.AreEqual ("a", el.Name, "t11"); - - Assert.IsTrue (nods[4] is XmlElement, "t12"); - el = nods[4] as XmlElement; - Assert.AreEqual ("b", el.Name, "t13"); - } - - [Test] - public void TestUnknownHeaders () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - et.Url = "http://localhost:8080/ConvDocLitWra.asmx"; - - et.myUserInfo = new MyUserInfo (); - et.myUserInfo.userId = 5; - et.myUserInfo.Actor = "hi"; - - et.TestUnknownHeader1 (); - - et.TestUnknownHeader2 (); - - int res = et.TestUnknownHeader3 (); - Assert.AreEqual (5, res, "TestUnknownHeader3"); - - res = et.TestUnknownHeader4 (); - Assert.AreEqual (5, res, "TestUnknownHeader4"); - } - } - - [System.Web.Services.WebServiceBindingAttribute(Name="ConverterServiceSoap", Namespace="urn:mono-ws-tests")] - public class ConverterServiceExtraTest : System.Web.Services.Protocols.SoapHttpClientProtocol - { - public MyUserInfo myUserInfo; - - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/GetTestInfo", RequestNamespace="urn:mono-ws-tests", ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Wrapped)] - public object GetTestInfo(string s, out string d) { - object[] results = this.Invoke("GetTestInfo", new object[] {s}); - d = (string) results[1]; - return ((object)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader1",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Wrapped)] - public virtual void TestUnknownHeader1() { - this.Invoke("TestUnknownHeader1", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader2",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Wrapped)] - public virtual void TestUnknownHeader2() { - this.Invoke("TestUnknownHeader2", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader3",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Wrapped)] - public virtual int TestUnknownHeader3() { - System.Object[] results = this.Invoke("TestUnknownHeader3", new object[0]); - return ((int)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:mono-ws-tests/TestUnknownHeader4",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" , Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Wrapped)] - public virtual int TestUnknownHeader4() { - System.Object[] results = this.Invoke("TestUnknownHeader4", new object[0]); - return ((int)(results[0])); - } - } - - public class MyUserInfo : System.Web.Services.Protocols.SoapHeader - { - public int userId; - } - -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvRpcTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvRpcTest.cs deleted file mode 100644 index 5a1d28c6cf5..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/localhost/ConvRpcTest.cs +++ /dev/null @@ -1,273 +0,0 @@ -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Threading; -using NUnit.Framework; -using System.Web.Services.Protocols; -using System.Xml; -using ConvRpcTests.Soap; - -namespace Localhost.ConvRpcTests -{ - [TestFixture] - public class ConverterTest: WebServiceTest - { - [Test] - public void TestService () - { - ConverterService cs = new ConverterService (); - cs.Login ("lluis"); - cs.SetCurrencyRate ("EUR", 0.5); - Assert.AreEqual (0.5, cs.GetCurrencyRate ("EUR"), "#1"); - - double res = cs.Convert ("EUR","USD",6); - Assert.AreEqual ((int)res, (int)12, "#2"); - - CurrencyInfo[] infos = cs.GetCurrencyInfo (); - Assert.IsNotNull (infos, "infos"); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - Assert.IsNotNull (info.Name, "info.Name"); - - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - Assert.AreEqual (val, info.Rate, "#3 " + info.Name); - } - cs.SetCurrencyRate ("EUR", 0.9); - } - - // Async tests - - ConverterService acs; - bool a1; - bool a2; - bool a3; - AutoResetEvent eve = new AutoResetEvent (false); - - [Test] - public void AsyncTestService () - { - IAsyncResult ar; - acs = new ConverterService (); - - ar = acs.BeginLogin ("lluis", null, null); - acs.EndLogin (ar); - - acs.BeginSetCurrencyRate ("EUR", 0.5, new AsyncCallback(Callback1), null); - - Assert.IsTrue (eve.WaitOne (5000, false), "#0"); - Assert.IsTrue (a1, "#1"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#2"); - Assert.IsTrue (a2, "#3"); - - Assert.IsTrue (eve.WaitOne (5000, false), "#4"); - Assert.IsTrue (a3, "#5"); - } - - void Callback1 (IAsyncResult ar) - { - acs.EndSetCurrencyRate (ar); - acs.BeginGetCurrencyRate ("EUR", new AsyncCallback(Callback2), null); - } - - void Callback2 (IAsyncResult ar) - { - double res = acs.EndGetCurrencyRate (ar); - a1 = (res == 0.5); - eve.Set (); - - acs.BeginConvert ("EUR","USD",6, new AsyncCallback(Callback3), null); - } - - void Callback3 (IAsyncResult ar) - { - double res = acs.EndConvert (ar); - a2 = (res == 12); - eve.Set (); - - acs.BeginGetCurrencyInfo (new AsyncCallback(Callback4),null); - } - - void Callback4 (IAsyncResult ar) - { - CurrencyInfo[] infos = acs.EndGetCurrencyInfo (ar); - - foreach (CurrencyInfo info in infos) - { - double val = 0; - switch (info.Name) - { - case "USD": val = 1; break; - case "EUR": val = 0.5; break; - case "GBP": val = 0.611817; break; - case "JPY": val = 118.271; break; - case "CAD": val = 1.36338; break; - case "AUD": val = 1.51485; break; - case "CHF": val = 1.36915; break; - case "RUR": val = 30.4300; break; - case "CNY": val = 8.27740; break; - case "ZAR": val = 7.62645; break; - case "MXN": val = 10.5025; break; - } - a3 = (val == info.Rate); - if (!a3) break; - } - eve.Set (); - } - - [Test] - public void TestException () - { - ConverterService cs = new ConverterService (); - try - { - cs.SetCurrencyRate ("EUR", 0.5); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void AsyncTestException () - { - ConverterService cs = new ConverterService (); - IAsyncResult ar = cs.BeginSetCurrencyRate ("EUR", 0.5, null, null); - try - { - cs.EndSetCurrencyRate (ar); - Assert.Fail ("#0"); - } - catch (SoapException ex) - { - Assert.IsTrue (ex.Message.IndexOf ("User not logged") != -1, "#1"); - Assert.AreEqual (SoapException.ServerFaultCode, ex.Code, "#2"); - } - } - - [Test] - public void TestObjectReturn () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - - // Test the Discover method. - et.Url = "http://localhost:8080/ConvRpc.asmx?disco"; - et.Discover (); - - string d; - object res = et.GetTestInfo ("hi", out d); - - Assert.AreEqual ("iii", d, "t1"); - Assert.IsNotNull (res, "t2"); - Assert.IsTrue (res is XmlNode[], "t3"); - XmlNode[] nods = res as XmlNode[]; - Assert.AreEqual (5, nods.Length, "t4"); - - Assert.IsTrue (nods[0] is XmlAttribute, "t5"); - XmlAttribute at = nods[0] as XmlAttribute; - Assert.AreEqual ("id", at.LocalName, "t6"); - - Assert.IsTrue (nods[1] is XmlAttribute, "t7"); - at = nods[1] as XmlAttribute; - Assert.AreEqual ("type", at.LocalName, "t8"); - - Assert.IsTrue (nods[2] is XmlAttribute, "t9"); - at = nods[2] as XmlAttribute; - - Assert.IsTrue (nods[3] is XmlElement, "t10"); - XmlElement el = nods[3] as XmlElement; - Assert.AreEqual ("a", el.Name, "t11"); - - Assert.IsTrue (nods[4] is XmlElement, "t12"); - el = nods[4] as XmlElement; - Assert.AreEqual ("b", el.Name, "t13"); - } - - [Test] - public void TestUnknownHeaders () - { - ConverterServiceExtraTest et = new ConverterServiceExtraTest (); - et.Url = "http://localhost:8080/ConvRpc.asmx"; - - et.myUserInfo = new MyUserInfo (); - et.myUserInfo.userId = 5; - et.myUserInfo.Actor = "hi"; - - et.TestUnknownHeader1 (); - - et.TestUnknownHeader2 (); - - int res = et.TestUnknownHeader3 (); - Assert.AreEqual (5, res, "TestUnknownHeader3"); - - res = et.TestUnknownHeader4 (); - Assert.AreEqual (5, res, "TestUnknownHeader4"); - } - } - - [System.Web.Services.WebServiceBindingAttribute(Name="ConverterServiceSoap", Namespace="urn:mono-ws-tests")] - public class ConverterServiceExtraTest : System.Web.Services.Protocols.SoapHttpClientProtocol - { - public MyUserInfo myUserInfo; - - [System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:mono-ws-tests/GetTestInfo", RequestNamespace="urn:mono-ws-tests", ResponseNamespace="urn:mono-ws-tests" )] - public object GetTestInfo(string s, out string d) { - object[] results = this.Invoke("GetTestInfo", new object[] {s}); - d = (string) results[1]; - return ((object)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:mono-ws-tests/TestUnknownHeader1",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" )] - public virtual void TestUnknownHeader1() { - this.Invoke("TestUnknownHeader1", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:mono-ws-tests/TestUnknownHeader2",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" )] - public virtual void TestUnknownHeader2() { - this.Invoke("TestUnknownHeader2", new object[0]); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:mono-ws-tests/TestUnknownHeader3",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" )] - public virtual int TestUnknownHeader3() { - System.Object[] results = this.Invoke("TestUnknownHeader3", new object[0]); - return ((int)(results[0])); - } - - [System.Web.Services.Protocols.SoapHeaderAttribute("myUserInfo")] - [System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:mono-ws-tests/TestUnknownHeader4",RequestNamespace="urn:mono-ws-tests",ResponseNamespace="urn:mono-ws-tests" )] - public virtual int TestUnknownHeader4() { - System.Object[] results = this.Invoke("TestUnknownHeader4", new object[0]); - return ((int)(results[0])); - } - } - - public class MyUserInfo : System.Web.Services.Protocols.SoapHeader - { - public int userId; - } - -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/localhost/DataServiceTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/localhost/DataServiceTest.cs deleted file mode 100644 index 1b381de3466..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/localhost/DataServiceTest.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Web service test for WSDL document: -// http://localhost:8080/DataService.asmx?wsdl - -using System; -using System.Data; -using NUnit.Framework; -using DataServiceTests.Soap; -//using DataServiceTests.HttpGet; -//using DataServiceTests.HttpPost; - -namespace Localhost.DataServiceTests -{ - [TestFixture] - public class DataServiceTest: WebServiceTest - { - [Test] - public void TestService () - { - DataService service = new DataService (); - DataSet dset = service.QueryData ("some query"); - DataTable t = dset.Tables["PhoneNumbers"]; - - Assert.IsNotNull (t, "#1"); - Assert.AreEqual (2, t.Rows.Count, "#2"); - - DataRow row = t.Rows[0]; - Assert.AreEqual ("Lluis", row["name"], "#3"); - Assert.AreEqual ("23452345", row["home"], "#4"); - row = t.Rows[1]; - Assert.AreEqual ("Pep", row["name"], "#5"); - Assert.AreEqual ("435345", row["home"], "#6"); - - DataRow newRow = t.NewRow(); - newRow["name"] = "Pau"; - newRow["home"] = "9028374"; - t.Rows.Add (newRow); - int n = service.SaveData (dset); - Assert.AreEqual (3, n, "#7"); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/localhost/DuplicateArrayTestTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/localhost/DuplicateArrayTestTest.cs deleted file mode 100644 index 0241fa44c08..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/localhost/DuplicateArrayTestTest.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Web service test for WSDL document: -// http://localhost:8080/DuplicateArrayTest.asmx?wsdl - -using System; -using NUnit.Framework; -using DuplicateArrayTestTests.Soap; - -namespace Localhost.DuplicateArrayTestTests -{ - [TestFixture] - public class DuplicateArrayTestTest: WebServiceTest - { - [Test] - public void TestService () - { - DuplicateArrayTest s = new DuplicateArrayTest(); - - string title = "hello"; - string url = "tmp"; - correctionsCorrection c = new correctionsCorrection(); - c.word = "bye"; - c.suggestions = new string[]{"end","test"}; - correctionsCorrection[] arr = new correctionsCorrection[2]{c,c}; - arr = s.SpellCheck(ref title,ref url,arr); - - Assert.AreEqual (2, arr.Length, "t1"); - - for (int i =0; i< arr.Length ; i++) - { - c = arr[i]; - Assert.IsNotNull (c, "t2."+i); - Assert.AreEqual ("bye", c.word, "t3."+i); - Assert.IsNotNull (c.suggestions, "t4."+i); - Assert.AreEqual (2, c.suggestions.Length, "t5."+i); - Assert.AreEqual ("end", c.suggestions[0], "t6."+i); - Assert.AreEqual ("test", c.suggestions[1], "t7."+i); - } - Assert.AreEqual ("hello", title, "t8"); - Assert.AreEqual ("tmp", url, "t9"); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/localhost/IncludeTestTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/localhost/IncludeTestTest.cs deleted file mode 100644 index d35bc500476..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/localhost/IncludeTestTest.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Web service test for WSDL document: -// http://localhost:8080/IncludeTest.asmx?wsdl - -using System; -using NUnit.Framework; -using IncludeTestTests.Soap; - -namespace Localhost.IncludeTestTests -{ - [TestFixture] - public class IncludeTestTest: WebServiceTest - { - [Test] - public void TestService () - { - IncludeTest test = new IncludeTest(); - object[] data = test.foo (); - Assert.IsNotNull (data); - - ComplexThing c1 = data[0] as ComplexThing; - Assert.IsNotNull (c1); - Assert.AreEqual ("abc",c1.name); - - ComplexThing c2 = data[1] as ComplexThing; - Assert.IsNotNull (c2); - Assert.AreEqual ("xyz",c2.name); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/localhost/SessionCounterTest.cs b/mcs/class/System.Web.Services/Test/standalone/client/localhost/SessionCounterTest.cs deleted file mode 100644 index 45cb4607b43..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/localhost/SessionCounterTest.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Web service test for WSDL document: -// http://localhost:8080/SessionCounter.asmx?wsdl - -using System; -using System.Net; -using NUnit.Framework; -using SessionCounterTests.Soap; - -namespace Localhost.SessionCounterTests -{ - [TestFixture] - public class SessionCounterTest: WebServiceTest - { - [Test] - public void TestService () - { - SessionCounter s = new SessionCounter (); - s.CookieContainer = new CookieContainer (); - s.Reset (); - for (int n=1; n<10; n++) - Assert.AreEqual (n, s.AddOne (), "t"+n); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/client/localhost/TestBinding4Test.cs b/mcs/class/System.Web.Services/Test/standalone/client/localhost/TestBinding4Test.cs deleted file mode 100644 index b31b92a3565..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/client/localhost/TestBinding4Test.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Web service test for WSDL document: -// http://localhost:8080/TestBinding4.asmx?wsdl - -using System; -using NUnit.Framework; -using TestBinding4Tests.Soap; -using System.Xml; - -namespace Localhost.TestBinding4Tests -{ - [TestFixture] - public class TestBinding4Test: WebServiceTest - { - [Test] - public void TestService () - { - GetData data = new GetData (); - - XmlDocument doc = new XmlDocument (); - XmlElement elem1 = doc.CreateElement ("one"); - elem1.SetAttribute ("someAtt","someValue"); - XmlElement elem2 = doc.CreateElement ("two"); - elem2.SetAttribute ("someAtt","someValue"); - XmlNode[] nodes = new XmlNode[] {elem1,elem2}; - - nodes = data.GetTabList (nodes); - Check ("GetTabList", nodes); - - nodes = data.GetTabStruct ("hello", nodes); - Check ("GetTabStruct", nodes); - - Assert.IsTrue (data.RebuildTabList (true), "RebuildTabList 1"); - Assert.IsTrue (!data.RebuildTabList (false), "RebuildTabList 2"); - - Assert.IsTrue (data.RebuildTabStruct ("a", true), "RebuildTabStruct 1"); - Assert.IsTrue (!data.RebuildTabStruct ("b", false), "RebuildTabStruct 2"); - } - - void Check (string met, XmlNode[] nodes) - { - Assert.IsNotNull (nodes, met + " #1"); - Assert.AreEqual (2, nodes.Length, met + " #2"); - Assert.AreEqual ("", nodes[0].OuterXml, met + " #3"); - Assert.AreEqual ("", nodes[1].OuterXml, met + " #4"); - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/cormissing.xsl b/mcs/class/System.Web.Services/Test/standalone/cormissing.xsl deleted file mode 100644 index 2b52cb66794..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/cormissing.xsl +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - - - - - - - - - - - y - - - - - - - - - - - - - - - - - n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - c - - - - - - - - - - - - - - s - - - - - - - - - - - - - - - - - - i - - - - - - - - - - - d - - - - - - - - - - - en - - - - - - - - - - - - - - - - - m - - - - - - - - - - - - - - - - - p - - - - - - - - - - - - - - - - - e - - - - - - - - - - - - - - - - - x - m - - - - - - - - - - - - - - - - - f - - - - - - - - - - - - - - - - o - m - - - - - - - - - - - - - - - - - r - - - - - - - - - - - - - - - - [E] - [T] - [-] - [+] - [ ] - - - - - - - - - - - - - : - - % - - TODO: - MISSING: - EXTRA: - WARNING: - - - - - - - - - - WARNING: - - - - diff --git a/mcs/class/System.Web.Services/Test/standalone/header.html b/mcs/class/System.Web.Services/Test/standalone/header.html deleted file mode 100644 index 851b3766bde..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/header.html +++ /dev/null @@ -1,7 +0,0 @@ - - -wsdl tests - - - - diff --git a/mcs/class/System.Web.Services/Test/standalone/msfix b/mcs/class/System.Web.Services/Test/standalone/msfix deleted file mode 100644 index 7dec766f728..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/msfix +++ /dev/null @@ -1,116 +0,0 @@ -addresslookupTests.HttpGet/ArrayOfAnyType1 -addresslookupTests.HttpPost/ArrayOfAnyType1 -evTests.HttpGet/ArrayOfAnyType1 -evTests.HttpPost/ArrayOfAnyType1 -xsecurityTests.HttpGet/ArrayOfLookupItem -xsecurityTests.HttpGet/ArrayOfSecurity -xsecurityTests.HttpPost/ArrayOfLookupItem -xsecurityTests.HttpPost/ArrayOfSecurity -placelookupTests.HttpGet/ArrayOfGeoPlaceDetails -placelookupTests.HttpGet/ArrayOfGeoPlaceDistance -placelookupTests.HttpGet/ArrayOfUserPlaceDetail -placelookupTests.HttpPost/ArrayOfGeoPlaceDetails -placelookupTests.HttpPost/ArrayOfGeoPlaceDistance -placelookupTests.HttpPost/ArrayOfUserPlaceDetail -StockQuotesTests.HttpGet/ArrayOfQuote -StockQuotesTests.HttpPost/ArrayOfQuote -netpress1Tests.HttpGet/ArrayOfAnyType1 -netpress1Tests.HttpPost/ArrayOfAnyType1 -xsimulationTests.HttpGet/ArrayOfPercentile -xsimulationTests.HttpGet/ArrayOfRun -xsimulationTests.HttpPost/ArrayOfPercentile -xsimulationTests.HttpPost/ArrayOfRun -zipcodelookupTests.HttpGet/ArrayOfGeoPlaceDistance -zipcodelookupTests.HttpGet/ArrayOfUserPlaceDetail -zipcodelookupTests.HttpGet/ArrayOfZipCodeDistances -zipcodelookupTests.HttpPost/ArrayOfGeoPlaceDistance -zipcodelookupTests.HttpPost/ArrayOfUserPlaceDetail -zipcodelookupTests.HttpPost/ArrayOfZipCodeDistances -xretirementTests.HttpGet/ArrayOfAllocation -xretirementTests.HttpPost/ArrayOfAllocation -xnewsTests.HttpGet/ArrayOfBriefing -xnewsTests.HttpGet/ArrayOfEarningAnnouncement -xnewsTests.HttpGet/ArrayOfMarketNews -xnewsTests.HttpGet/ArrayOfStockNews -xnewsTests.HttpPost/ArrayOfBriefing -xnewsTests.HttpPost/ArrayOfEarningAnnouncement -xnewsTests.HttpPost/ArrayOfMarketNews -xnewsTests.HttpPost/ArrayOfStockNews -populationTests.HttpGet/ArrayOfString -populationTests.HttpPost/ArrayOfString -xstatisticsTests.HttpGet/ArrayOfCategory -xstatisticsTests.HttpPost/ArrayOfCategory -IndoEconoCatorTests.HttpGet/ArrayOfIndicatorData -IndoEconoCatorTests.HttpPost/ArrayOfIndicatorData -ZipServiceTests.HttpGet/ArrayOfString -ZipServiceTests.HttpPost/ArrayOfString -xrealtimeTests.HttpGet/ArrayOfRealTimeQuote -xrealtimeTests.HttpGet/ArrayOfSearchResult -xrealtimeTests.HttpGet/ArrayOfTop -xrealtimeTests.HttpPost/ArrayOfRealTimeQuote -xrealtimeTests.HttpPost/ArrayOfSearchResult -xrealtimeTests.HttpPost/ArrayOfTop -HoroscopeTests.HttpGet/ArrayOfZodiacSigns -HoroscopeTests.HttpPost/ArrayOfZodiacSigns -xquotesTests.HttpGet/ArrayOfHistoricalQuote -xquotesTests.HttpGet/ArrayOfMarketIndex -xquotesTests.HttpGet/ArrayOfQuickQuote -xquotesTests.HttpGet/ArrayOfQuote -xquotesTests.HttpGet/ArrayOfTop -xquotesTests.HttpPost/ArrayOfHistoricalQuote -xquotesTests.HttpPost/ArrayOfMarketIndex -xquotesTests.HttpPost/ArrayOfQuickQuote -xquotesTests.HttpPost/ArrayOfQuote -xquotesTests.HttpPost/ArrayOfTop -xEdgarTests.HttpGet/ArrayOfCIKLookup -xEdgarTests.HttpGet/ArrayOfFiling -xEdgarTests.HttpGet/ArrayOfSICCode -xEdgarTests.HttpGet/ArrayOfSubmission -xEdgarTests.HttpPost/ArrayOfCIKLookup -xEdgarTests.HttpPost/ArrayOfFiling -xEdgarTests.HttpPost/ArrayOfSICCode -xEdgarTests.HttpPost/ArrayOfSubmission -booksTests.HttpGet/ArrayOfBookInfo -booksTests.HttpPost/ArrayOfBookInfo -ConvDocEncBarTests.HttpGet/ArrayOfCurrencyInfo -ConvDocEncBarTests.HttpPost/ArrayOfCurrencyInfo -ConvDocLitWraTests.HttpGet/ArrayOfCurrencyInfo -ConvDocLitWraTests.HttpGet/ArrayOfString -ConvDocLitWraTests.HttpPost/ArrayOfCurrencyInfo -ConvDocLitWraTests.HttpPost/ArrayOfString -ConvDocLitBarTests.HttpGet/ArrayOfCurrencyInfo -ConvDocLitBarTests.HttpPost/ArrayOfCurrencyInfo -ConvRpcTests.HttpGet/ArrayOfCurrencyInfo -ConvRpcTests.HttpPost/ArrayOfCurrencyInfo -ConvDocEncWraTests.HttpGet/ArrayOfCurrencyInfo -ConvDocEncWraTests.HttpGet/ArrayOfString -ConvDocEncWraTests.HttpPost/ArrayOfCurrencyInfo -ConvDocEncWraTests.HttpPost/ArrayOfString -xInsiderTests.HttpGet/ArrayOfInsider -xInsiderTests.HttpGet/ArrayOfRole -xInsiderTests.HttpPost/ArrayOfInsider -xInsiderTests.HttpPost/ArrayOfRole -Test1Tests.HttpGet/ArrayOfString -Test1Tests.HttpPost/ArrayOfString -IncludeTestTests.HttpGet/ArrayOfAnyType1 -IncludeTestTests.HttpPost/ArrayOfAnyType1 -xratesTests.HttpGet/ArrayOfInterestRate -xratesTests.HttpGet/ArrayOfRateStatistics -xratesTests.HttpPost/ArrayOfInterestRate -xratesTests.HttpPost/ArrayOfRateStatistics -channelsTests.HttpGet/ArrayOfEntry -channelsTests.HttpPost/ArrayOfEntry -xIndicesTests.HttpGet/ArrayOfIndexQuote -xIndicesTests.HttpGet/ArrayOfSecurity -xIndicesTests.HttpPost/ArrayOfIndexQuote -xIndicesTests.HttpPost/ArrayOfSecurity -DictServiceTests.HttpGet/ArrayOfDictionary -DictServiceTests.HttpGet/ArrayOfDictionaryWord -DictServiceTests.HttpGet/ArrayOfStrategy -DictServiceTests.HttpPost/ArrayOfDictionary -DictServiceTests.HttpPost/ArrayOfDictionaryWord -DictServiceTests.HttpPost/ArrayOfStrategy -xHistoricalTests.HttpGet/ArrayOfHistoricalQuote -xHistoricalTests.HttpGet/ArrayOfTop -xHistoricalTests.HttpPost/ArrayOfHistoricalQuote -xHistoricalTests.HttpPost/ArrayOfTop diff --git a/mcs/class/System.Web.Services/Test/standalone/proxies.net.xml.gz b/mcs/class/System.Web.Services/Test/standalone/proxies.net.xml.gz deleted file mode 100644 index 14d05989b3c022f42355f40c195ca3ec25c45dc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228309 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 K{j?s4dT#)At%UOc diff --git a/mcs/class/System.Web.Services/Test/standalone/server/ConvDocEncBar.asmx b/mcs/class/System.Web.Services/Test/standalone/server/ConvDocEncBar.asmx deleted file mode 100644 index f7fb986ac8e..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/ConvDocEncBar.asmx +++ /dev/null @@ -1,225 +0,0 @@ -<%@ WebService Language="c#" Codebehind="ConverterService.asmx.cs" Class="WebServiceTests.ConverterService" %> - -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Collections; -using System.Xml; -using System.Xml.Serialization; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Web.Services.Description; - -namespace WebServiceTests -{ - public class UserInfo : SoapHeader - { - public int userId; - } - - public class CurrencyInfo - { - public CurrencyInfo () - { - } - - public CurrencyInfo (string name, double rate) - { - Name = name; - Rate = rate; - } - - public string Name; - public double Rate; - } - - public class Simple - { - public int Dada; - } - - [WebServiceAttribute (Namespace="urn:mono-ws-tests", Description="Web service that can make currency conversions")] - [SoapDocumentServiceAttribute (Use=SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Bare)] - public class ConverterService : System.Web.Services.WebService - { - static int userCount = 0; - static Hashtable conversionTable; - - public UserInfo userInfo; - - public SoapHeader unknown1; - public SoapHeader[] unknown2; - public SoapUnknownHeader unknown3; - public SoapUnknownHeader[] unknown4; - - static ConverterService () - { - conversionTable = new Hashtable (); - InternalSetCurrencyRate ("USD", 1); - InternalSetCurrencyRate ("EUR", 0.883884 ); - InternalSetCurrencyRate ("GBP", 0.611817 ); - InternalSetCurrencyRate ("JPY", 118.271 ); - InternalSetCurrencyRate ("CAD", 1.36338 ); - InternalSetCurrencyRate ("AUD", 1.51485 ); - InternalSetCurrencyRate ("CHF", 1.36915 ); - InternalSetCurrencyRate ("RUR", 30.4300 ); - InternalSetCurrencyRate ("CNY", 8.27740 ); - InternalSetCurrencyRate ("ZAR", 7.62645 ); - InternalSetCurrencyRate ("MXN", 10.5025 ); - } - - [WebMethod (Description="Registers the user into the system")] - [SoapHeaderAttribute ("userInfo", Direction = SoapHeaderDirection.Out)] - public void Login (string a) - { - userInfo = new UserInfo (); - userInfo.userId = ++userCount; - } - - [WebMethod (Description="Converts an amount from one currency to another currency")] - [SoapHeaderAttribute ("userInfo")] - public double Convert (string sourceCurrency, string targetCurrency, double value) - { - CheckUser (); - double usd = (1 / GetCurrencyRate (sourceCurrency)) * value; - return usd * GetCurrencyRate (targetCurrency); - } - - [WebMethod (Description="Returns a list of currency rates")] - [SoapHeaderAttribute ("userInfo")] - public CurrencyInfo[] GetCurrencyInfo () - { - CheckUser (); - - lock (conversionTable) - { - CurrencyInfo[] info = new CurrencyInfo[conversionTable.Count]; - int n = 0; - foreach (CurrencyInfo cinfo in conversionTable.Values) - info [n++] = cinfo; - return info; - } - } - - [WebMethod (Description="Sets the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public void SetCurrencyRate (string currency, double rate) - { - CheckUser (); - InternalSetCurrencyRate (currency, rate); - } - - static void InternalSetCurrencyRate (string currency, double rate) - { - lock (conversionTable) - { - conversionTable [currency] = new CurrencyInfo (currency, rate); - } - } - - [WebMethod (Description="Returns the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public double GetCurrencyRate ([XmlElement(DataType="Name")]string cname) - { - CheckUser (); - lock (conversionTable) - { - if (!conversionTable.ContainsKey (cname)) - throw new SoapException ("Unknown currency '" + cname + "'", SoapException.ServerFaultCode); - - return ((CurrencyInfo) conversionTable [cname]).Rate; - } - } - - [WebMethod] - public void Test (Simple dada1, int dada) - { - dada = 1; - } - - [WebMethod (MessageName="Test2")] - public void Test (int[] dada2, byte[] dada3, int dada) - { - dada = 1; - } - - [WebMethod] - public System.Collections.Specialized.StringCollection TestArrays (string[] info, string lang) - { - return null; - } - - void CheckUser () - { - if (userInfo == null) - throw new SoapException ("User not logged", SoapException.ServerFaultCode); - } - - [WebMethod] - [return: SoapElement("retret")] - public MyInfo GetTestInfo (string s, out string d) - { - d = "iii"; - return new MyInfo(); - } - - [SoapHeaderAttribute ("unknown1")] - [WebMethod] - public void TestUnknownHeader1 () - { - if (unknown1 == null) - throw new Exception ("Header is null"); - - if (unknown1.Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown2")] - [WebMethod] - public void TestUnknownHeader2 () - { - if (unknown2 == null || unknown2.Length != 1) - throw new Exception ("Header is null"); - - if (unknown2[0].Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown3")] - [WebMethod] - public int TestUnknownHeader3 () - { - if (unknown3 == null) - throw new Exception ("Header is null"); - - if (unknown3.Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown3.Element ["userId"]; - return int.Parse (child.InnerText); - } - - [SoapHeaderAttribute ("unknown4")] - [WebMethod] - public int TestUnknownHeader4 () - { - if (unknown4 == null || unknown4.Length != 1) - throw new Exception ("Header is null"); - - if (unknown4[0].Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown4[0].Element ["userId"]; - return int.Parse (child.InnerText); - } - } - - public class MyInfo - { - public int a = 4; - public string b = "hi"; - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/ConvDocEncWra.asmx b/mcs/class/System.Web.Services/Test/standalone/server/ConvDocEncWra.asmx deleted file mode 100644 index 013e80b6818..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/ConvDocEncWra.asmx +++ /dev/null @@ -1,225 +0,0 @@ -<%@ WebService Language="c#" Codebehind="ConverterService.asmx.cs" Class="WebServiceTests.ConverterService" %> - -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Collections; -using System.Xml; -using System.Xml.Serialization; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Web.Services.Description; - -namespace WebServiceTests -{ - public class UserInfo : SoapHeader - { - public int userId; - } - - public class CurrencyInfo - { - public CurrencyInfo () - { - } - - public CurrencyInfo (string name, double rate) - { - Name = name; - Rate = rate; - } - - public string Name; - public double Rate; - } - - public class Simple - { - public int Dada; - } - - [WebServiceAttribute (Namespace="urn:mono-ws-tests", Description="Web service that can make currency conversions")] - [SoapDocumentServiceAttribute (Use=SoapBindingUse.Encoded, ParameterStyle=SoapParameterStyle.Wrapped)] - public class ConverterService : System.Web.Services.WebService - { - static int userCount = 0; - static Hashtable conversionTable; - - public UserInfo userInfo; - - public SoapHeader unknown1; - public SoapHeader[] unknown2; - public SoapUnknownHeader unknown3; - public SoapUnknownHeader[] unknown4; - - static ConverterService () - { - conversionTable = new Hashtable (); - InternalSetCurrencyRate ("USD", 1); - InternalSetCurrencyRate ("EUR", 0.883884 ); - InternalSetCurrencyRate ("GBP", 0.611817 ); - InternalSetCurrencyRate ("JPY", 118.271 ); - InternalSetCurrencyRate ("CAD", 1.36338 ); - InternalSetCurrencyRate ("AUD", 1.51485 ); - InternalSetCurrencyRate ("CHF", 1.36915 ); - InternalSetCurrencyRate ("RUR", 30.4300 ); - InternalSetCurrencyRate ("CNY", 8.27740 ); - InternalSetCurrencyRate ("ZAR", 7.62645 ); - InternalSetCurrencyRate ("MXN", 10.5025 ); - } - - [WebMethod (Description="Registers the user into the system")] - [SoapHeaderAttribute ("userInfo", Direction = SoapHeaderDirection.Out)] - public void Login (string a) - { - userInfo = new UserInfo (); - userInfo.userId = ++userCount; - } - - [WebMethod (Description="Converts an amount from one currency to another currency")] - [SoapHeaderAttribute ("userInfo")] - public double Convert (string sourceCurrency, string targetCurrency, double value) - { - CheckUser (); - double usd = (1 / GetCurrencyRate (sourceCurrency)) * value; - return usd * GetCurrencyRate (targetCurrency); - } - - [WebMethod (Description="Returns a list of currency rates")] - [SoapHeaderAttribute ("userInfo")] - public CurrencyInfo[] GetCurrencyInfo () - { - CheckUser (); - - lock (conversionTable) - { - CurrencyInfo[] info = new CurrencyInfo[conversionTable.Count]; - int n = 0; - foreach (CurrencyInfo cinfo in conversionTable.Values) - info [n++] = cinfo; - return info; - } - } - - [WebMethod (Description="Sets the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public void SetCurrencyRate (string currency, double rate) - { - CheckUser (); - InternalSetCurrencyRate (currency, rate); - } - - static void InternalSetCurrencyRate (string currency, double rate) - { - lock (conversionTable) - { - conversionTable [currency] = new CurrencyInfo (currency, rate); - } - } - - [WebMethod (Description="Returns the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public double GetCurrencyRate ([XmlElement(DataType="Name")]string cname) - { - CheckUser (); - lock (conversionTable) - { - if (!conversionTable.ContainsKey (cname)) - throw new SoapException ("Unknown currency '" + cname + "'", SoapException.ServerFaultCode); - - return ((CurrencyInfo) conversionTable [cname]).Rate; - } - } - - [WebMethod] - public void Test (Simple dada1, int dada) - { - dada = 1; - } - - [WebMethod (MessageName="Test2")] - public void Test (int[] dada2, byte[] dada3, int dada) - { - dada = 1; - } - - [WebMethod] - public System.Collections.Specialized.StringCollection TestArrays (string[] info, string lang) - { - return null; - } - - void CheckUser () - { - if (userInfo == null) - throw new SoapException ("User not logged", SoapException.ServerFaultCode); - } - - [WebMethod] - [return: SoapElement("retret")] - public MyInfo GetTestInfo (string s, out string d) - { - d = "iii"; - return new MyInfo(); - } - - [SoapHeaderAttribute ("unknown1")] - [WebMethod] - public void TestUnknownHeader1 () - { - if (unknown1 == null) - throw new Exception ("Header is null"); - - if (unknown1.Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown2")] - [WebMethod] - public void TestUnknownHeader2 () - { - if (unknown2 == null || unknown2.Length != 1) - throw new Exception ("Header is null"); - - if (unknown2[0].Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown3")] - [WebMethod] - public int TestUnknownHeader3 () - { - if (unknown3 == null) - throw new Exception ("Header is null"); - - if (unknown3.Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown3.Element ["userId"]; - return int.Parse (child.InnerText); - } - - [SoapHeaderAttribute ("unknown4")] - [WebMethod] - public int TestUnknownHeader4 () - { - if (unknown4 == null || unknown4.Length != 1) - throw new Exception ("Header is null"); - - if (unknown4[0].Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown4[0].Element ["userId"]; - return int.Parse (child.InnerText); - } - } - - public class MyInfo - { - public int a = 4; - public string b = "hi"; - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/ConvDocLitBar.asmx b/mcs/class/System.Web.Services/Test/standalone/server/ConvDocLitBar.asmx deleted file mode 100644 index cba9d1e71d2..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/ConvDocLitBar.asmx +++ /dev/null @@ -1,225 +0,0 @@ -<%@ WebService Language="c#" Codebehind="ConverterService.asmx.cs" Class="WebServiceTests.ConverterService" %> - -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Collections; -using System.Xml; -using System.Xml.Serialization; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Web.Services.Description; - -namespace WebServiceTests -{ - public class UserInfo : SoapHeader - { - public int userId; - } - - public class CurrencyInfo - { - public CurrencyInfo () - { - } - - public CurrencyInfo (string name, double rate) - { - Name = name; - Rate = rate; - } - - public string Name; - public double Rate; - } - - public class Simple - { - public int Dada; - } - - [WebServiceAttribute (Namespace="urn:mono-ws-tests", Description="Web service that can make currency conversions")] - [SoapDocumentServiceAttribute (Use=SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Bare)] - public class ConverterService : System.Web.Services.WebService - { - static int userCount = 0; - static Hashtable conversionTable; - - public UserInfo userInfo; - - public SoapHeader unknown1; - public SoapHeader[] unknown2; - public SoapUnknownHeader unknown3; - public SoapUnknownHeader[] unknown4; - - static ConverterService () - { - conversionTable = new Hashtable (); - InternalSetCurrencyRate ("USD", 1); - InternalSetCurrencyRate ("EUR", 0.883884 ); - InternalSetCurrencyRate ("GBP", 0.611817 ); - InternalSetCurrencyRate ("JPY", 118.271 ); - InternalSetCurrencyRate ("CAD", 1.36338 ); - InternalSetCurrencyRate ("AUD", 1.51485 ); - InternalSetCurrencyRate ("CHF", 1.36915 ); - InternalSetCurrencyRate ("RUR", 30.4300 ); - InternalSetCurrencyRate ("CNY", 8.27740 ); - InternalSetCurrencyRate ("ZAR", 7.62645 ); - InternalSetCurrencyRate ("MXN", 10.5025 ); - } - - [WebMethod (Description="Registers the user into the system")] - [SoapHeaderAttribute ("userInfo", Direction = SoapHeaderDirection.Out)] - public void Login (string a) - { - userInfo = new UserInfo (); - userInfo.userId = ++userCount; - } - - [WebMethod (Description="Converts an amount from one currency to another currency")] - [SoapHeaderAttribute ("userInfo")] - public double Convert (string sourceCurrency, string targetCurrency, double value) - { - CheckUser (); - double usd = (1 / GetCurrencyRate (sourceCurrency)) * value; - return usd * GetCurrencyRate (targetCurrency); - } - - [WebMethod (Description="Returns a list of currency rates")] - [SoapHeaderAttribute ("userInfo")] - public CurrencyInfo[] GetCurrencyInfo () - { - CheckUser (); - - lock (conversionTable) - { - CurrencyInfo[] info = new CurrencyInfo[conversionTable.Count]; - int n = 0; - foreach (CurrencyInfo cinfo in conversionTable.Values) - info [n++] = cinfo; - return info; - } - } - - [WebMethod (Description="Sets the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public void SetCurrencyRate (string currency, double rate) - { - CheckUser (); - InternalSetCurrencyRate (currency, rate); - } - - static void InternalSetCurrencyRate (string currency, double rate) - { - lock (conversionTable) - { - conversionTable [currency] = new CurrencyInfo (currency, rate); - } - } - - [WebMethod (Description="Returns the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public double GetCurrencyRate ([XmlElement(DataType="Name")]string cname) - { - CheckUser (); - lock (conversionTable) - { - if (!conversionTable.ContainsKey (cname)) - throw new SoapException ("Unknown currency '" + cname + "'", SoapException.ServerFaultCode); - - return ((CurrencyInfo) conversionTable [cname]).Rate; - } - } - - [WebMethod] - public void Test (Simple dada1, int dada) - { - dada = 1; - } - - [WebMethod (MessageName="Test2")] - public void Test (int[] dada2, byte[] dada3, int dada) - { - dada = 1; - } - - [WebMethod] - public System.Collections.Specialized.StringCollection TestArrays (string[] info, string lang) - { - return null; - } - - void CheckUser () - { - if (userInfo == null) - throw new SoapException ("User not logged", SoapException.ServerFaultCode); - } - - [WebMethod] - [return: XmlElement("retret")] - public MyInfo GetTestInfo (string s, out string d) - { - d = "iii"; - return new MyInfo(); - } - - [SoapHeaderAttribute ("unknown1")] - [WebMethod] - public void TestUnknownHeader1 () - { - if (unknown1 == null) - throw new Exception ("Header is null"); - - if (unknown1.Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown2")] - [WebMethod] - public void TestUnknownHeader2 () - { - if (unknown2 == null || unknown2.Length != 1) - throw new Exception ("Header is null"); - - if (unknown2[0].Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown3")] - [WebMethod] - public int TestUnknownHeader3 () - { - if (unknown3 == null) - throw new Exception ("Header is null"); - - if (unknown3.Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown3.Element ["userId"]; - return int.Parse (child.InnerText); - } - - [SoapHeaderAttribute ("unknown4")] - [WebMethod] - public int TestUnknownHeader4 () - { - if (unknown4 == null || unknown4.Length != 1) - throw new Exception ("Header is null"); - - if (unknown4[0].Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown4[0].Element ["userId"]; - return int.Parse (child.InnerText); - } - } - - public class MyInfo - { - public int a = 4; - public string b = "hi"; - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/ConvDocLitWra.asmx b/mcs/class/System.Web.Services/Test/standalone/server/ConvDocLitWra.asmx deleted file mode 100644 index ac17f8f2aa0..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/ConvDocLitWra.asmx +++ /dev/null @@ -1,225 +0,0 @@ -<%@ WebService Language="c#" Codebehind="ConverterService.asmx.cs" Class="WebServiceTests.ConverterService" %> - -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Collections; -using System.Xml; -using System.Xml.Serialization; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Web.Services.Description; - -namespace WebServiceTests -{ - public class UserInfo : SoapHeader - { - public int userId; - } - - public class CurrencyInfo - { - public CurrencyInfo () - { - } - - public CurrencyInfo (string name, double rate) - { - Name = name; - Rate = rate; - } - - public string Name; - public double Rate; - } - - public class Simple - { - public int Dada; - } - - [WebServiceAttribute (Namespace="urn:mono-ws-tests", Description="Web service that can make currency conversions")] - [SoapDocumentServiceAttribute (Use=SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Wrapped)] - public class ConverterService : System.Web.Services.WebService - { - static int userCount = 0; - static Hashtable conversionTable; - - public UserInfo userInfo; - - public SoapHeader unknown1; - public SoapHeader[] unknown2; - public SoapUnknownHeader unknown3; - public SoapUnknownHeader[] unknown4; - - static ConverterService () - { - conversionTable = new Hashtable (); - InternalSetCurrencyRate ("USD", 1); - InternalSetCurrencyRate ("EUR", 0.883884 ); - InternalSetCurrencyRate ("GBP", 0.611817 ); - InternalSetCurrencyRate ("JPY", 118.271 ); - InternalSetCurrencyRate ("CAD", 1.36338 ); - InternalSetCurrencyRate ("AUD", 1.51485 ); - InternalSetCurrencyRate ("CHF", 1.36915 ); - InternalSetCurrencyRate ("RUR", 30.4300 ); - InternalSetCurrencyRate ("CNY", 8.27740 ); - InternalSetCurrencyRate ("ZAR", 7.62645 ); - InternalSetCurrencyRate ("MXN", 10.5025 ); - } - - [WebMethod (Description="Registers the user into the system")] - [SoapHeaderAttribute ("userInfo", Direction = SoapHeaderDirection.Out)] - public void Login (string a) - { - userInfo = new UserInfo (); - userInfo.userId = ++userCount; - } - - [WebMethod (Description="Converts an amount from one currency to another currency")] - [SoapHeaderAttribute ("userInfo")] - public double Convert (string sourceCurrency, string targetCurrency, double value) - { - CheckUser (); - double usd = (1 / GetCurrencyRate (sourceCurrency)) * value; - return usd * GetCurrencyRate (targetCurrency); - } - - [WebMethod (Description="Returns a list of currency rates")] - [SoapHeaderAttribute ("userInfo")] - public CurrencyInfo[] GetCurrencyInfo () - { - CheckUser (); - - lock (conversionTable) - { - CurrencyInfo[] info = new CurrencyInfo[conversionTable.Count]; - int n = 0; - foreach (CurrencyInfo cinfo in conversionTable.Values) - info [n++] = cinfo; - return info; - } - } - - [WebMethod (Description="Sets the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public void SetCurrencyRate (string currency, double rate) - { - CheckUser (); - InternalSetCurrencyRate (currency, rate); - } - - static void InternalSetCurrencyRate (string currency, double rate) - { - lock (conversionTable) - { - conversionTable [currency] = new CurrencyInfo (currency, rate); - } - } - - [WebMethod (Description="Returns the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public double GetCurrencyRate ([XmlElement(DataType="Name")]string cname) - { - CheckUser (); - lock (conversionTable) - { - if (!conversionTable.ContainsKey (cname)) - throw new SoapException ("Unknown currency '" + cname + "'", SoapException.ServerFaultCode); - - return ((CurrencyInfo) conversionTable [cname]).Rate; - } - } - - [WebMethod] - public void Test (Simple dada1, int dada) - { - dada = 1; - } - - [WebMethod (MessageName="Test2")] - public void Test (int[] dada2, byte[] dada3, int dada) - { - dada = 1; - } - - [WebMethod] - public System.Collections.Specialized.StringCollection TestArrays (string[] info, string lang) - { - return null; - } - - void CheckUser () - { - if (userInfo == null) - throw new SoapException ("User not logged", SoapException.ServerFaultCode); - } - - [WebMethod] - [return: XmlElement("retret")] - public MyInfo GetTestInfo (string s, out string d) - { - d = "iii"; - return new MyInfo(); - } - - [SoapHeaderAttribute ("unknown1")] - [WebMethod] - public void TestUnknownHeader1 () - { - if (unknown1 == null) - throw new Exception ("Header is null"); - - if (unknown1.Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown2")] - [WebMethod] - public void TestUnknownHeader2 () - { - if (unknown2 == null || unknown2.Length != 1) - throw new Exception ("Header is null"); - - if (unknown2[0].Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown3")] - [WebMethod] - public int TestUnknownHeader3 () - { - if (unknown3 == null) - throw new Exception ("Header is null"); - - if (unknown3.Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown3.Element ["userId"]; - return int.Parse (child.InnerText); - } - - [SoapHeaderAttribute ("unknown4")] - [WebMethod] - public int TestUnknownHeader4 () - { - if (unknown4 == null || unknown4.Length != 1) - throw new Exception ("Header is null"); - - if (unknown4[0].Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown4[0].Element ["userId"]; - return int.Parse (child.InnerText); - } - } - - public class MyInfo - { - public int a = 4; - public string b = "hi"; - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/ConvRpc.asmx b/mcs/class/System.Web.Services/Test/standalone/server/ConvRpc.asmx deleted file mode 100644 index d49da7ca189..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/ConvRpc.asmx +++ /dev/null @@ -1,225 +0,0 @@ -<%@ WebService Language="c#" Codebehind="ConverterService.asmx.cs" Class="WebServiceTests.ConverterService" %> - -/* -WARNING: This code was generated by a tool. -Changes to this file will be lost if the code is regenerated -*/ - -using System; -using System.Collections; -using System.Xml; -using System.Xml.Serialization; -using System.Web.Services; -using System.Web.Services.Protocols; -using System.Web.Services.Description; - -namespace WebServiceTests -{ - public class UserInfo : SoapHeader - { - public int userId; - } - - public class CurrencyInfo - { - public CurrencyInfo () - { - } - - public CurrencyInfo (string name, double rate) - { - Name = name; - Rate = rate; - } - - public string Name; - public double Rate; - } - - public class Simple - { - public int Dada; - } - - [WebServiceAttribute (Namespace="urn:mono-ws-tests", Description="Web service that can make currency conversions")] - [SoapRpcServiceAttribute()] - public class ConverterService : System.Web.Services.WebService - { - static int userCount = 0; - static Hashtable conversionTable; - - public UserInfo userInfo; - - public SoapHeader unknown1; - public SoapHeader[] unknown2; - public SoapUnknownHeader unknown3; - public SoapUnknownHeader[] unknown4; - - static ConverterService () - { - conversionTable = new Hashtable (); - InternalSetCurrencyRate ("USD", 1); - InternalSetCurrencyRate ("EUR", 0.883884 ); - InternalSetCurrencyRate ("GBP", 0.611817 ); - InternalSetCurrencyRate ("JPY", 118.271 ); - InternalSetCurrencyRate ("CAD", 1.36338 ); - InternalSetCurrencyRate ("AUD", 1.51485 ); - InternalSetCurrencyRate ("CHF", 1.36915 ); - InternalSetCurrencyRate ("RUR", 30.4300 ); - InternalSetCurrencyRate ("CNY", 8.27740 ); - InternalSetCurrencyRate ("ZAR", 7.62645 ); - InternalSetCurrencyRate ("MXN", 10.5025 ); - } - - [WebMethod (Description="Registers the user into the system")] - [SoapHeaderAttribute ("userInfo", Direction = SoapHeaderDirection.Out)] - public void Login (string a) - { - userInfo = new UserInfo (); - userInfo.userId = ++userCount; - } - - [WebMethod (Description="Converts an amount from one currency to another currency")] - [SoapHeaderAttribute ("userInfo")] - public double Convert (string sourceCurrency, string targetCurrency, double value) - { - CheckUser (); - double usd = (1 / GetCurrencyRate (sourceCurrency)) * value; - return usd * GetCurrencyRate (targetCurrency); - } - - [WebMethod (Description="Returns a list of currency rates")] - [SoapHeaderAttribute ("userInfo")] - public CurrencyInfo[] GetCurrencyInfo () - { - CheckUser (); - - lock (conversionTable) - { - CurrencyInfo[] info = new CurrencyInfo[conversionTable.Count]; - int n = 0; - foreach (CurrencyInfo cinfo in conversionTable.Values) - info [n++] = cinfo; - return info; - } - } - - [WebMethod (Description="Sets the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public void SetCurrencyRate (string currency, double rate) - { - CheckUser (); - InternalSetCurrencyRate (currency, rate); - } - - static void InternalSetCurrencyRate (string currency, double rate) - { - lock (conversionTable) - { - conversionTable [currency] = new CurrencyInfo (currency, rate); - } - } - - [WebMethod (Description="Returns the rate of a currency")] - [SoapHeaderAttribute ("userInfo")] - public double GetCurrencyRate ([XmlElement(DataType="Name")]string cname) - { - CheckUser (); - lock (conversionTable) - { - if (!conversionTable.ContainsKey (cname)) - throw new SoapException ("Unknown currency '" + cname + "'", SoapException.ServerFaultCode); - - return ((CurrencyInfo) conversionTable [cname]).Rate; - } - } - - [WebMethod] - public void Test (Simple dada1, int dada) - { - dada = 1; - } - - [WebMethod (MessageName="Test2")] - public void Test (int[] dada2, byte[] dada3, int dada) - { - dada = 1; - } - - [WebMethod] - public System.Collections.Specialized.StringCollection TestArrays (string[] info, string lang) - { - return null; - } - - void CheckUser () - { - if (userInfo == null) - throw new SoapException ("User not logged", SoapException.ServerFaultCode); - } - - [WebMethod] - [return: SoapElement("retret")] - public MyInfo GetTestInfo (string s, out string d) - { - d = "iii"; - return new MyInfo(); - } - - [SoapHeaderAttribute ("unknown1")] - [WebMethod] - public void TestUnknownHeader1 () - { - if (unknown1 == null) - throw new Exception ("Header is null"); - - if (unknown1.Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown2")] - [WebMethod] - public void TestUnknownHeader2 () - { - if (unknown2 == null || unknown2.Length != 1) - throw new Exception ("Header is null"); - - if (unknown2[0].Actor != "hi") - throw new Exception ("Invalid actor"); - } - - [SoapHeaderAttribute ("unknown3")] - [WebMethod] - public int TestUnknownHeader3 () - { - if (unknown3 == null) - throw new Exception ("Header is null"); - - if (unknown3.Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown3.Element ["userId"]; - return int.Parse (child.InnerText); - } - - [SoapHeaderAttribute ("unknown4")] - [WebMethod] - public int TestUnknownHeader4 () - { - if (unknown4 == null || unknown4.Length != 1) - throw new Exception ("Header is null"); - - if (unknown4[0].Actor != "hi") - throw new Exception ("Invalid actor"); - - XmlElement child = unknown4[0].Element ["userId"]; - return int.Parse (child.InnerText); - } - } - - public class MyInfo - { - public int a = 4; - public string b = "hi"; - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/DataService.asmx b/mcs/class/System.Web.Services/Test/standalone/server/DataService.asmx deleted file mode 100644 index d9bed23e33c..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/DataService.asmx +++ /dev/null @@ -1,32 +0,0 @@ -<%@ WebService Language="c#" Class="DataService" %> -using System.Data; -using System.Web.Services; - -public class DataService -{ - [WebMethod] - public DataSet QueryData (string query) - { - DataSet ds = new DataSet(); - DataTable dt = ds.Tables.Add("PhoneNumbers"); - dt.Columns.Add("name"); - dt.Columns.Add("home"); - DataRow newRow; - newRow = dt.NewRow(); - newRow["name"] = "Lluis"; - newRow["home"] = "23452345"; - dt.Rows.Add (newRow); - newRow = dt.NewRow(); - newRow["name"] = "Pep"; - newRow["home"] = "435345"; - dt.Rows.Add (newRow); - return ds; - } - - [WebMethod] - public int SaveData (DataSet dset) - { - DataTable t = dset.Tables["PhoneNumbers"]; - return t.Rows.Count; - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/DuplicateArrayTest.asmx b/mcs/class/System.Web.Services/Test/standalone/server/DuplicateArrayTest.asmx deleted file mode 100644 index 833d1459445..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/DuplicateArrayTest.asmx +++ /dev/null @@ -1,73 +0,0 @@ -<%@ WebService Language="c#" Codebehind="spellcheckservice.wsdl.cs" Class="WebService3.DuplicateArrayTest" %> - -using System.Xml.Serialization; -using System; -using System.Web.Services.Protocols; -using System.ComponentModel; -using System.Web.Services; - -namespace WebService3{ - -/// -[System.Web.Services.WebServiceBindingAttribute(Name="SpellCheckServiceSoap", Namespace="http://www.worldwidedesktop.com/spellcheck")] -public class DuplicateArrayTest : System.Web.Services.WebService { - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.worldwidedesktop.com/spellcheck/SpellCheck", RequestNamespace="http://www.worldwidedesktop.com/spellcheck", ResponseNamespace="http://www.worldwidedesktop.com/spellcheck", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - [return: System.Xml.Serialization.XmlArrayItemAttribute("correction", Namespace="http://www.worldwidedesktop.com/spellcheck/SpellCheckResult.xsd", IsNullable=false)] - public correctionsCorrection[] SpellCheck(ref string LicenseText, ref string TextToCheck, correctionsCorrection[] X_WS_ReturnValue_X) - { - //Fill Parameters - // --- Param 0--- - LicenseText = LicenseText; - // --- Param 1--- - TextToCheck = TextToCheck; - - //Return Value - return X_WS_ReturnValue_X; - } - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.worldwidedesktop.com/spellcheck/MSSpellCheck", RequestNamespace="http://www.worldwidedesktop.com/spellcheck", ResponseNamespace="http://www.worldwidedesktop.com/spellcheck", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public System.Xml.XmlNode MSSpellCheck(ref string LicenseText, ref string TextToCheck, System.Xml.XmlNode X_WS_ReturnValue_X) - { - //Fill Parameters - // --- Param 0--- - LicenseText = LicenseText; - // --- Param 1--- - TextToCheck = TextToCheck; - - //Return Value - return X_WS_ReturnValue_X; - } - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.worldwidedesktop.com/spellcheck/WSpellCheck", RequestNamespace="http://www.worldwidedesktop.com/spellcheck", ResponseNamespace="http://www.worldwidedesktop.com/spellcheck", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public System.Xml.XmlNode WSpellCheck(ref string LicenseText, ref string TextToCheck, System.Xml.XmlNode X_WS_ReturnValue_X) - { - //Fill Parameters - // --- Param 0--- - LicenseText = LicenseText; - // --- Param 1--- - TextToCheck = TextToCheck; - - //Return Value - return X_WS_ReturnValue_X; - } -} - -/// -[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.worldwidedesktop.com/spellcheck/SpellCheckResult.xsd")] -public class correctionsCorrection { - - /// - public string word; - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("suggestion", IsNullable=false)] - public string[] suggestions; -} -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/IncludeTest.asmx b/mcs/class/System.Web.Services/Test/standalone/server/IncludeTest.asmx deleted file mode 100644 index c64badce2ad..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/IncludeTest.asmx +++ /dev/null @@ -1,34 +0,0 @@ -<%@ WebService Language="c#" Class="IncludeTest" %> - -using System; -using System.Collections; -using System.Xml.Serialization; -using System.Web.Services; -using System.Web.Services.Protocols; - -public class IncludeTest -{ - [WebMethod] - [XmlInclude(typeof(ComplexThing))] - [SoapInclude(typeof(ComplexThing))] - public ArrayList foo() - { - ArrayList list = new ArrayList(); - list.Add(new ComplexThing("abc", 1.1f)); - list.Add(new ComplexThing("xyz", 2.0f)); - return list; - } -} - -public class ComplexThing -{ - public ComplexThing() {} - - public ComplexThing(string name, float val) - { - this.name = name; - this.val = val; - } - public string name; - public float val; -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/SessionCounter.asmx b/mcs/class/System.Web.Services/Test/standalone/server/SessionCounter.asmx deleted file mode 100644 index 50c8befc415..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/SessionCounter.asmx +++ /dev/null @@ -1,35 +0,0 @@ -<%@ WebService Language="c#" Class="Util.SessionCounter" %> - - using System; - using System.Web; - using System.Web.Services; - using System.Web.SessionState; - namespace Util - { - public class SessionCounter: System.Web.Services.WebService - { - public SessionCounter () - { - if (Context == null) - throw new Exception ("Context not set in constructor"); - } - - [ WebMethod(EnableSession=true) ] - public void Reset() - { - Session["counter"] = 0; - } - - [ WebMethod(EnableSession=true) ] - public int AddOne() - { - if ( Session["counter"] == null ) - { Session["counter"]=0; } - else - { Session["counter"]=(int)Session["counter"]+1; } - - return (int)Session["counter"]; - - } - } - } diff --git a/mcs/class/System.Web.Services/Test/standalone/server/Test1.asmx b/mcs/class/System.Web.Services/Test/standalone/server/Test1.asmx deleted file mode 100644 index 7219ed23c58..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/Test1.asmx +++ /dev/null @@ -1,60 +0,0 @@ -<%@ WebService Language="c#" Codebehind="InteropTestDocLitParameters.wsdl.cs" Class="InteropTestDocLitParameters.wsdl.WSDLInteropTestDocLitParameters" %> -using System.Xml.Serialization; -using System; -using System.Web.Services.Protocols; -using System.ComponentModel; -using System.Web.Services; - -namespace InteropTestDocLitParameters.wsdl{ - -/// -[System.Web.Services.WebServiceBindingAttribute(Name="WSDLInteropTestDocLitParametersSoap", Namespace="http://soapinterop.org")] -public class WSDLInteropTestDocLitParameters : System.Web.Services.WebService { - - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://soapinterop.org/", RequestNamespace="http://soapinterop.org/xsd", ResponseNamespace="http://soapinterop.org/xsd", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - [return: System.Xml.Serialization.XmlElementAttribute("return", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] - public SOAPStruct echoStruct([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] SOAPStruct param0, SOAPStruct X_WS_ReturnValue_X) - { - return null; - } - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://soapinterop.org/", RequestNamespace="http://soapinterop.org/xsd", ResponseNamespace="http://soapinterop.org/xsd", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - [return: System.Xml.Serialization.XmlArrayAttribute("return", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] - [return: System.Xml.Serialization.XmlArrayItemAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)] - public string[] echoStringArray([System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] [System.Xml.Serialization.XmlArrayItemAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)] string[] param0, string[] X_WS_ReturnValue_X) - { - return null; - } - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://soapinterop.org/", RequestNamespace="http://soapinterop.org/xsd", ResponseNamespace="http://soapinterop.org/xsd", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - [return: System.Xml.Serialization.XmlElementAttribute("return", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] - public string echoString([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string param0, string X_WS_ReturnValue_X) - { - return null; - } -} - -/// -[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://soapinterop.org/xsd")] -public class SOAPStruct { - - /// - [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] - public System.Single varFloat; - - /// - [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] - public int varInt; - - /// - [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] - public string varString; -} -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/Test2.asmx b/mcs/class/System.Web.Services/Test/standalone/server/Test2.asmx deleted file mode 100644 index 171f0ef2101..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/Test2.asmx +++ /dev/null @@ -1,81 +0,0 @@ -<%@ WebService Language="c#" Codebehind="BusinessList.wsdl.cs" Class="BusinessList.wsdl.BusinessList" %> -using System.Xml.Serialization; -using System; -using System.Web.Services.Protocols; -using System.ComponentModel; -using System.Web.Services; - -namespace BusinessList.wsdl{ - -/// -[System.Web.Services.WebServiceBindingAttribute(Name="BusinessListSoap", Namespace="http://tempuri.org/")] -[System.Xml.Serialization.XmlIncludeAttribute(typeof(UddiCore))] -public class BusinessList : System.Web.Services.WebService { - - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetBusinessList", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public BusinessInfo[] GetBusinessList( string Name, BusinessInfo[] X_WS_ReturnValue_X) - { - return null; - } -} - -/// -[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")] -public class BusinessInfo : UddiCore { - - /// - public string name; - - /// - [System.Xml.Serialization.XmlElementAttribute("description")] - public Description[] description; - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("serviceInfo")] - public ServiceInfo[] serviceInfos; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string businessKey; -} - -/// -[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")] -public class Description : UddiCore { - - /// - [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - - /// - [System.Xml.Serialization.XmlTextAttribute()] - public string[] Text; -} - -/// -[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")] -[System.Xml.Serialization.XmlIncludeAttribute(typeof(ServiceInfo))] -[System.Xml.Serialization.XmlIncludeAttribute(typeof(Description))] -[System.Xml.Serialization.XmlIncludeAttribute(typeof(BusinessInfo))] -public class UddiCore { -} - -/// -[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")] -public class ServiceInfo : UddiCore { - - /// - public string name; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string serviceKey; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string businessKey; -} -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding1.asmx b/mcs/class/System.Web.Services/Test/standalone/server/TestBinding1.asmx deleted file mode 100644 index 4345ff2038d..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding1.asmx +++ /dev/null @@ -1,29 +0,0 @@ -<%@ WebService Language="c#" Codebehind="GetData.wsdl.cs" Class="GetData.wsdl.GetData" %> - -using System.Xml.Serialization; -using System; -using System.Web.Services.Protocols; -using System.ComponentModel; -using System.Web.Services; - -namespace GetData.wsdl{ - - [System.Web.Services.WebServiceBindingAttribute(Name="GetDataSoap", Namespace="http://tempuri.org/")] - public class GetData : System.Web.Services.WebService { - - - [System.Web.Services.WebMethodAttribute()] - public bool RebuildTabList(bool X_WS_ReturnValue_X) - { - return false; - } - - [System.Web.Services.WebMethodAttribute()] - [SoapDocumentMethod (Binding="GetDataSoap")] - public bool OtherMethod(bool X_WS_ReturnValue_X) - { - return false; - } - - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding2.asmx b/mcs/class/System.Web.Services/Test/standalone/server/TestBinding2.asmx deleted file mode 100644 index 5aab05dc4e3..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding2.asmx +++ /dev/null @@ -1,29 +0,0 @@ -<%@ WebService Language="c#" Codebehind="GetData.wsdl.cs" Class="GetData.wsdl.GetData" %> - -using System.Xml.Serialization; -using System; -using System.Web.Services.Protocols; -using System.ComponentModel; -using System.Web.Services; - -namespace GetData.wsdl{ - - [System.Web.Services.WebServiceBindingAttribute(Name="GetDataSoap2", Namespace="http://anotheruri/")] - public class GetData : System.Web.Services.WebService { - - - [System.Web.Services.WebMethodAttribute()] - public bool RebuildTabList(bool X_WS_ReturnValue_X) - { - return false; - } - - [System.Web.Services.WebMethodAttribute()] - [SoapDocumentMethod (Binding="GetDataSoap2")] - public bool OtherMethod(bool X_WS_ReturnValue_X) - { - return false; - } - - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding3.asmx b/mcs/class/System.Web.Services/Test/standalone/server/TestBinding3.asmx deleted file mode 100644 index 1f18d8cf4dd..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding3.asmx +++ /dev/null @@ -1,52 +0,0 @@ -<%@ WebService Language="c#" Codebehind="main.wsdl.cs" Class="main.wsdl.Main" %> - -using System.Xml.Serialization; -using System; -using System.Web.Services.Protocols; -using System.ComponentModel; -using System.Web.Services; - -namespace main.wsdl{ - -/// -[System.Web.Services.WebServiceBindingAttribute(Name="MainSoap", Namespace="http://msdn.microsoft.com/vbasic/")] -public class Main : System.Web.Services.WebService { - - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://msdn.microsoft.com/vbasic/About", RequestNamespace="http://msdn.microsoft.com/vbasic/", ResponseNamespace="http://msdn.microsoft.com/vbasic/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string About(string X_WS_ReturnValue_X) - { - return null; - } - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://msdn.microsoft.com/vbasic/GetCustomerOrderHistory", RequestNamespace="http://msdn.microsoft.com/vbasic/", ResponseNamespace="http://msdn.microsoft.com/vbasic/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public CustomerAndOrderHistoryInfo GetCustomerOrderHistory( string strCustID, CustomerAndOrderHistoryInfo X_WS_ReturnValue_X) - { - return null; - } - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://msdn.microsoft.com/vbasic/GetTenMostExpensiveProducts", RequestNamespace="http://msdn.microsoft.com/vbasic/", ResponseNamespace="http://msdn.microsoft.com/vbasic/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public System.Data.DataSet GetTenMostExpensiveProducts(System.Data.DataSet X_WS_ReturnValue_X) - { - return null; - } -} - -/// -[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://msdn.microsoft.com/vbasic/")] -public class CustomerAndOrderHistoryInfo { - - /// - public System.Xml.XmlElement Orders; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string Company; -} -} \ No newline at end of file diff --git a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding4.asmx b/mcs/class/System.Web.Services/Test/standalone/server/TestBinding4.asmx deleted file mode 100644 index d2be3433f5a..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding4.asmx +++ /dev/null @@ -1,53 +0,0 @@ -<%@ WebService Language="c#" Codebehind="GetData.wsdl.cs" Class="GetData.wsdl.GetData" %> - -using System.Xml.Serialization; -using System; -using System.Xml; -using System.Web.Services.Protocols; -using System.ComponentModel; -using System.Web.Services; - -namespace GetData.wsdl{ - -/// -[System.Web.Services.WebServiceBindingAttribute(Name="GetDataSoap", Namespace="http://IUnknown.Team/ePortal/GetData")] -public class GetData : System.Web.Services.WebService { - - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://IUnknown.Team/ePortal/GetData/GetTabList", ResponseNamespace="http://IUnknown.Team/ePortal/GetData", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlTextAttribute()] - [return: System.Xml.Serialization.XmlAnyElementAttribute()] - public System.Xml.XmlNode[] GetTabList(System.Xml.XmlNode[] X_WS_ReturnValue_X) - { - return X_WS_ReturnValue_X; - } - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://IUnknown.Team/ePortal/GetData/RebuildTabList", RequestNamespace="http://IUnknown.Team/ePortal/GetData", ResponseNamespace="http://IUnknown.Team/ePortal/GetData", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public bool RebuildTabList(bool X_WS_ReturnValue_X) - { - return X_WS_ReturnValue_X; - } - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://IUnknown.Team/ePortal/GetData/RebuildTabStruct", RequestNamespace="http://IUnknown.Team/ePortal/GetData", ResponseNamespace="http://IUnknown.Team/ePortal/GetData", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public bool RebuildTabStruct(string tabname, bool X_WS_ReturnValue_X) - { - return X_WS_ReturnValue_X; - } - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://IUnknown.Team/ePortal/GetData/GetTabStruct", ResponseNamespace="http://IUnknown.Team/ePortal/GetData", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlTextAttribute()] - [return: System.Xml.Serialization.XmlAnyElementAttribute()] - public System.Xml.XmlNode[] GetTabStruct([System.Xml.Serialization.XmlElementAttribute(Namespace="http://IUnknown.Team/ePortal/GetData")] string tabname, System.Xml.XmlNode[] X_WS_ReturnValue_X) - { - return X_WS_ReturnValue_X; - } - } -} diff --git a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding5.asmx b/mcs/class/System.Web.Services/Test/standalone/server/TestBinding5.asmx deleted file mode 100644 index 55600026072..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding5.asmx +++ /dev/null @@ -1,24 +0,0 @@ -<%@ WebService Language="c#" Codebehind="GetData.wsdl.cs" Class="GetData.wsdl.GetData" %> - -using System.Xml.Serialization; -using System; -using System.Web.Services.Protocols; -using System.ComponentModel; -using System.Web.Services; - -namespace GetData.wsdl{ - - [System.Web.Services.WebServiceBindingAttribute(Name="GetDataSoap", Namespace="http://IUnknown.Team/ePortal/GetData")] - public class GetData : System.Web.Services.WebService { - - - [System.Web.Services.WebMethodAttribute()] - public bool RebuildTabList(bool X_WS_ReturnValue_X) - { - return false; - } - - - - } -} \ No newline at end of file diff --git a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding6.asmx b/mcs/class/System.Web.Services/Test/standalone/server/TestBinding6.asmx deleted file mode 100644 index d431fb52a0b..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/TestBinding6.asmx +++ /dev/null @@ -1,25 +0,0 @@ -<%@ WebService Language="c#" Codebehind="InteropTestExtensibilityRequired.wsdl.cs" Class="InteropTestExtensibilityRequired.wsdl.InteropTestExtensibilityRequired" %> -using System.Xml.Serialization; -using System; -using System.Web.Services.Protocols; -using System.ComponentModel; -using System.Web.Services; - -namespace InteropTestExtensibilityRequired.wsdl{ - -/// -[System.Web.Services.WebServiceBindingAttribute(Name="InteropTestExtensibilityRequiredSoap", Namespace="http://tempuri.org/")] -public class InteropTestExtensibilityRequired : System.Web.Services.WebService { - - //Added by ServerGeneration - - /// - [System.Web.Services.WebMethodAttribute()] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://soapinterop.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] - [return: System.Xml.Serialization.XmlElementAttribute("echoStringReturn", Namespace="http://soapinterop.org/xsd")] - public string echoString([System.Xml.Serialization.XmlElementAttribute(Namespace="http://soapinterop.org/xsd")] string echoStringParam, string X_WS_ReturnValue_X) - { - return null; - } - } -} \ No newline at end of file diff --git a/mcs/class/System.Web.Services/Test/standalone/server/web.config b/mcs/class/System.Web.Services/Test/standalone/server/web.config deleted file mode 100644 index 4fd1635aa9a..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/web.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - diff --git a/mcs/class/System.Web.Services/Test/standalone/server/xsp.vsdisco b/mcs/class/System.Web.Services/Test/standalone/server/xsp.vsdisco deleted file mode 100644 index 45c7bb718f4..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/server/xsp.vsdisco +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/mcs/class/System.Web.Services/Test/standalone/services.xml b/mcs/class/System.Web.Services/Test/standalone/services.xml deleted file mode 100644 index 0fcfe46cb93..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/services.xml +++ /dev/null @@ -1,4395 +0,0 @@ - - - - http://upload.eraserver.net/circle24/autoloan.asmx?wsdl - autoloanTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.kannadakasturi.com/WebServices/kannadakasturiwebservice.asmx?WSDL - kannadakasturiwebserviceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.esynaps.com/WebServices/eSynapsSearch.asmx?WSDL - eSynapsSearchTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.codemechanisms.co.uk/WebServices/UNSPSC.asmx?WSDL - UNSPSCTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.xmlme.com/WSCustNews.asmx?WSDL - WSCustNewsTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://arcweb.esri.com/services/v2/Proximity.wsdl - ProximityTest - Netscape-Enterprise/6.0 # - - Soap - - false - - - http://addison.ra.cwru.edu/orc/calendar_copy/server.php?wsdl - serverTest - Microsoft-IIS/5.0 # ASP.NET,PHP/4.3.1 - - Soap - - false - - - http://xml.redcoal.net/SMSSOAP/xmlserver.wsdl - xmlserverTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://ws2.serviceobjects.net/ft/FastTax.asmx?WSDL - FastTaxTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://xml.nig.ac.jp/wsdl/ClustalW.wsdl - ClustalWTest - GLUE/3.2.1,Apache Coyote/1.0 # - - Soap - - false - - - http://www.marotz.se/scripts/searchperson.exe/wsdl/ISearchSwedishPerson - ISearchSwedishPersonTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.xmlme.com/WSDailyXml.asmx?WSDL - WSDailyXmlTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.dev1.eraserver.net/REFLECTIONIT/Html2xml.asmx?WSDL - Html2xmlTest - - Soap - HttpGet - HttpPost - - false - - - http://www.barnaland.is/dev/puki.asmx?WSDL - pukiTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.hkwizard.com/WeatherService.asmx?wsdl - WeatherServiceTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://www.dl-me.com/webservices/dic2.asmx?WSDL - dic2Test - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.xignite.com/xoptions.asmx?WSDL - xoptionsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://wsdl.wsdlfeeds.com/holidays.cfc?wsdl - holidaysTest - Apache/1.3.27 (Unix) (Red-Hat/Linux) JRun/4.0 mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26 # - - Soap - - false - - - http://scores.serviceobjects.com/CupScores.asmx?WSDL - CupScoresTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://soap.systinet.net/demos/Newsfeed/wsdl - NewsfeedTest - Systinet WASP Server for Java/4.6.1 (Java/1.4.2; Linux/2.4.20-24.7) # - - Soap - - false - - - http://www.xmlme.com/WSElectronics.asmx?WSDL - WSElectronicsTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://arcweb.esri.com/services/v2/AddressFinder.wsdl - AddressFinderTest - Netscape-Enterprise/6.0 # - - Soap - - false - - - http://www.xmlme.com/WSVideoGames.asmx?WSDL - WSVideoGamesTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.webservicex.net/braille.asmx?WSDL - brailleTest - - Soap - HttpGet - HttpPost - - false - - - http://ws.digiposs.com/WorldTime.jws?wsdl - WorldTimeTest - Apache/2.0.43 (Win32) mod_ssl/2.0.43 OpenSSL/0.9.6g PHP/4.3.0 mod_jk/1.2.2-beta-1 # - - Soap - - false - - - http://www.cosme.nu/services/pop.php?wsdl - popTest - Apache/1.3.26 (Unix) mod_ssl/2.8.9 OpenSSL/0.9.6a ApacheJServ/1.1.2 PHP/4.3.1 # PHP/4.3.1 - - Soap - - false - - - http://www.marotz.se/PGPKeyServer/PGPKeyServiceX.exe/wsdl/IPGPKeyServer - IPGPKeyServerTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.alanbushtrust.org.uk/soap/compositions.wsdl - compositionsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://glkev.webs.innerhost.com/glkev_ws/businessnews.asmx?WSDL - businessnewsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://services.develop.co.za/GetLocalTime.asmx?WSDL - GetLocalTimeTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://ws2.serviceobjects.net/ln/lotterynumbers.asmx?WSDL - lotterynumbersTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.blackstoneonline.com/webservices/dispenser.xml - dispenserTest - - Soap - HttpGet - HttpPost - - false - - - http://www.esynaps.com/WebServices/DailyDiblert.asmx?WSDL - DailyDiblertTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://soap.achchex.com/exec/achsoap.dll/wsdl/IACHSOAP - IACHSOAPTest - Apache/2.0.43 (Win32) mod_ssl/2.0.43 OpenSSL/0.9.6g # - - Soap - - false - - - http://transform.dataconcert.com/transform.wsdl - transformTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://icuisine.net/webservices/RecipeService.asmx?WSDL - RecipeServiceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.bitounis.com/WebEvents/events.asmx?WSDL - eventsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.OneOutBox.com/wsdl/FreeFaxService.wsdl - FreeFaxServiceTest - Apache/1.3.27 (Unix) PHP/4.2.3 FrontPage/5.0.2.2510 Rewrit/1.1a # - - Soap - - false - - - http://www.ebi.ac.uk/xembl/XEMBL.wsdl - XEMBLTest - Apache/1.3.12 (Unix) ApacheJServ/1.1 # - - Soap - - false - - - http://www.xmethods.net/sd/2001/CATrafficService.wsdl - CATrafficServiceTest - Enhydra-MultiServer/3.1.1b1 # - - Soap - - false - - - http://www.foxcentral.net/foxcentral.wsdl - foxcentralTest - # - - Soap - - false - - - http://www.cosme.nu/services/convert.php?wsdl - convertTest - Apache/1.3.26 (Unix) mod_ssl/2.8.9 OpenSSL/0.9.6a ApacheJServ/1.1.2 PHP/4.3.1 # PHP/4.3.1 - - Soap - - false - - - http://www.ripedev.com/webservices/ZipCode.asmx?WSDL - ZipCodeTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://ws.cdyne.com/psaddress/addresslookup.asmx?wsdl - addresslookupTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.strikeiron.com/scripts/statistics.asmx?WSDL - statisticsTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.bitounis.com/W3CParser/LogFileParser.asmx?WSDL - LogFileParserTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/NAICS.asmx?wsdl - NAICSTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://ws.cdyne.com/emailverify/ev.asmx?wsdl - evTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://62.212.78.36/cgi-bin/WagAddressServerSingle.exe/wsdl/IWagAddressServerSingle - IWagAddressServerSingleTest - Apache/1.3.19 (Win32) # - - Soap - - false - - - http://slashdemocracy.org/links/ws4gotze.wsdl - ws4gotzeTest - Apache # - - Soap - - false - - - http://java.rus.uni-stuttgart.de/quiz/quiz.wsdl - quizTest - Microsoft-IIS/5.0,GLUE/3.2.3 # - - Soap - - false - - - http://www.zanetti-dev.com/scripts/zpop3ws.exe/wsdl/IZPOP3 - IZPOP3Test - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.gama-system.com/webservices/stockquotes.asmx?wsdl - stockquotesTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/barcode.asmx?WSDL - barcodeTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://service.graphmagic.com/GMService/GraphMagic.asmx?wsdl - GraphMagicTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://developerdays.com/cgi-bin/tempconverter.exe/wsdl/ITempConverter - ITempConverterTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.webservicex.net/icd10.asmx?WSDL - icd10Test - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.marotz.se/scripts/SlashdotHeadlines.exe/wsdl/ISlashdotHeadlineProvider - ISlashdotHeadlineProviderTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl - CurrencyExchangeServiceTest - # - - Soap - - false - - - http://demo.soapam.com/services/FedEpayDirectory/FedEpayDirectoryService.wsdl - FedEpayDirectoryServiceTest - NuWave Technologies SOAP/AM(tm) Server - Version 1.0.4002 (SP2) # - - Soap - - false - - - http://webservices.eraserver.net/zipcoderesolver/zipcoderesolver.asmx?WSDL - zipcoderesolverTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/icd9toicd10.asmx?WSDL - icd9toicd10Test - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.ebob42.com/cgi-bin/Romulan.exe/wsdl/IRoman - IRomanTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.sidespace.com/ws/fission/fissiondotnet.php?wsdl - fissiondotnetTest - Apache/1.3.29 # PHP/4.3.4 - - Soap - - false - - - http://www.x-ws.de/cgi-bin/bork/service.wsdl - serviceTest - Apache/1.3.27 (Linux/SuSE) PHP/4.3.4 mod_perl/1.27 # - - Soap - - false - - - http://www.esynaps.com/WebServices/eSynapsMonitor.wsdl - eSynapsMonitorTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.xmlme.com/WSAmazonBox.asmx?WSDL - WSAmazonBoxTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.west-wind.com/wconnect/soap/wwhelpservice.wsdl - wwhelpserviceTest - # - - Soap - - false - - - http://www.oakleaf.ws/cfrsectws/cfrsectws.asmx?wsdl - cfrsectwsTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://webservices.mp3.com/MP3Charts.wsdl - MP3ChartsTest - - Soap - - false - - - http://www.bitounis.com/RSAFunctions/RSAFuncs.asmx?WSDL - RSAFuncsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://soap.systinet.net/demos/RpmFinder/wsdl - RpmFinderTest - Systinet WASP Server for Java/4.6.1 (Java/1.4.2; Linux/2.4.20-24.7) # - - Soap - - false - - - http://www.ebob42.com/cgi-bin/DrBobsClinic.exe/wsdl/IHeadline - IHeadlineTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.webservicex.net/periodictable.asmx?wsdl - periodictableTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.maillocate.com/soap/index.php?wsdl - indexTest - Apache/2.0.40 (Red Hat Linux) # PHP/4.2.2 - - Soap - - false - - - http://freene.dynip.com/RentDB2/RentDB2.asmx?wsdl - RentDB2Test - - Soap - - false - - - http://iis1.grantparksoftware.com:8080/gps/pos_public.asmx?WSDL - pos_publicTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.framewerks.com/WebServices/fWArticleService/fwArticles.asmx?WSDL - fwArticlesTest - Microsoft-IIS/5.0 Geobytes-GeoSelect/2.1.0.1 # ASP.NET - - Soap - - false - - - http://sandbox.grandcentral.com/services/reports?WSDL - reportsTest - Apache/1.3.29 (Unix) mod_jk/1.2.0 mod_perl/1.29 mod_ssl/2.8.16 OpenSSL/0.9.7c # - - Soap - - false - - - http://www.webservicex.net/CurrencyConvertor.asmx?wsdl - CurrencyConvertorTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.x-ws.de/cgi-bin/msn/imstatus.wsdl - imstatusTest - Apache/1.3.27 (Linux/SuSE) PHP/4.3.4 mod_perl/1.27 # - - Soap - - false - - - http://www.esynaps.com/WebServices/MsProxy.asmx?WSDL - MsProxyTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.siliconllama.com/services/wsdl/ISOcode2shortformatService.wsdl - ISOcode2shortformatServiceTest - - Soap - - false - - - http://www.webservicex.net/usweather.asmx?WSDL - usweatherTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.forta.com/cf/tips/syndicate.cfc?wsdl - syndicateTest - Apache/2.0.43 (Red Hat Linux) # - - Soap - - false - - - http://clientservice.muse.net/ClientService.asmx?WSDL - ClientServiceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.flash-db.com/services/ws/siteInspect.wsdl - siteInspectTest - Apache/1.3.28 (Unix) mod_auth_passthrough/1.8 mod_bwprotect/0.2 mod_bwlimited/1.2 PHP/4.3.3 mod_log_bytes/1.2 FrontPage/5.0.2.2634 # PHP/4.3.3 - - Soap - - false - - - http://www.webservicex.net/stockquote.asmx?WSDL - stockquoteTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.worldwidedesktop.com/spellcheck/spellcheckservice.asmx?wsdl - spellcheckserviceTest - - Soap - HttpGet - HttpPost - - false - - - http://ws.acrosscommunications.com/TAP.asmx?WSDL - TAPTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.xignite.com/xsecurity.asmx?WSDL - xsecurityTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.codebump.com/services/placelookup.asmx?wsdl - placelookupTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.aspiringgeek.com/cfc/keyword/sekeyword.cfc?wsdl - sekeywordTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.x-ws.de/cgi-bin/eliza/chat.wsdl - chatTest - Apache/1.3.27 (Linux/SuSE) PHP/4.3.4 mod_perl/1.27 # - - Soap - - false - - - http://ws.cdyne.com/FontToGraphic/ftg.asmx?wsdl - ftgTest - - false - - - http://ws2.serviceobjects.net/pc/packcost.asmx?WSDL - packcostTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://soap.systinet.net/demos/ZVONSearch/wsdl - ZVONSearchTest - Systinet WASP Server for Java/4.6.1 (Java/1.4.2; Linux/2.4.20-24.7) # - - Soap - - false - - - http://www.richsolutions.com/RichPayments/RichCardValidator.asmx?WSDL - RichCardValidatorTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://ww6.borland.com/webservices/BorlandBabel/BorlandBabel.exe/wsdl/IBorlandBabel - IBorlandBabelTest - Microsoft-IIS/4.0 # - - Soap - - false - - - http://www.aspxpressway.com/maincontent/webservices/piglatin.asmx?wsdl - piglatinTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.cosme.nu/services/dns.php?wsdl - dnsTest - Apache/1.3.26 (Unix) mod_ssl/2.8.9 OpenSSL/0.9.6a ApacheJServ/1.1.2 PHP/4.3.1 # PHP/4.3.1 - - Soap - - false - - - http://www.cs.uga.edu/~sent/xmethods/CountryInfoLookup.wsdl - CountryInfoLookupTest - - Soap - - false - - - http://live.capescience.com/wsdl/FOPService.wsdl - FOPServiceTest - - Soap - - false - - - http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx?WSDL - StockQuotesTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.scdi.org/~avernet/webservice/yim.wsdl - yimTest - Apache/1.3.26 (Unix) Debian GNU/Linux # PHP/4.1.2 - - Soap - - false - - - http://beta2.eraserver.net/webservices/mxchecker/mxchecker.asmx?WSDL - mxcheckerTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://ws.cdyne.com/whoisquery/whois.asmx?wsdl - whoisTest - - Soap - HttpGet - HttpPost - - false - - - http://ws.interfax.net/dfs.asmx?WSDL - dfsTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.xignite.com/xworldnews.asmx?WSDL - xworldnewsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.xmlme.com/WSDailyNet.asmx?WSDL - WSDailyNetTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://webservices.matlus.com/scripts/sessionservice.dll/wsdl/IMsSessionBrokerService - IMsSessionBrokerServiceTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.xmethods.net/sd/2001/BNQuoteService.wsdl - BNQuoteServiceTest - Enhydra-MultiServer/3.1.1b1 # - - Soap - - false - - - http://www.gxchart.com/webchart.wsdl - webchartTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://ws2.serviceobjects.net/ds/domainspy.asmx?WSDL - domainspyTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://ewsdemo.webmethods.com/WmEWS/directory/wsd.dsp?interface=wmpayflow.sample&service=Credit_Approval - Credit_ApprovalTest - # - - Soap - - false - - - http://sms.idws.com/soap/smsservice.dll/wsdl/ISMSService - ISMSServiceTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://glkev.webs.innerhost.com/glkev_ws/HistoricalStockQuotes.asmx?WSDL - HistoricalStockQuotesTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://ws2.serviceobjects.net/fw/FastWeather.asmx?WSDL - FastWeatherTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www22.brinkster.com/horaciovallejo/netpress1.asmx?wsdl - netpress1Test - Microsoft-IIS/6.0 # - - Soap - HttpGet - HttpPost - - false - - - http://ws.acrosscommunications.com/NumPager.asmx?WSDL - NumPagerTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://ws.acrosscommunications.com/ICQ.asmx?WSDL - ICQTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://oneoutbox.com/wsdl/FaxService.wsdl - FaxServiceTest - Apache/1.3.27 (Unix) PHP/4.2.3 FrontPage/5.0.2.2510 Rewrit/1.1a # - - Soap - - false - - - http://www.cgi101.com/~msmithso/wsdl/mach.wsdl - machTest - Apache/1.3.29 # - - Soap - - false - - - http://otn.oracle.com/ws/otnnews?WSDL - otnnewsTest - Oracle9iAS/9.0.4 Oracle HTTP Server # - - Soap - - false - - - http://xml.nig.ac.jp/wsdl/GetEntry.wsdl - GetEntryTest - GLUE/3.2.1,Apache Coyote/1.0 # - - Soap - - false - - - http://www.webservicex.net/aba.asmx?WSDL - abaTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.infoaccelerator.net/cfc/rtf2html.cfc?WSDL - rtf2htmlTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://www.xeeinc.com/RateInformation/Rateinfo.asmx?WSDL - RateinfoTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.esynaps.com/WebServices/eSynapsFeed.asmx?WSDL - eSynapsFeedTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.webservicex.net/sendsmsworld.asmx?WSDL - sendsmsworldTest - - Soap - HttpGet - HttpPost - - false - - - http://xml.nig.ac.jp/wsdl/SRS.wsdl - SRSTest - GLUE/3.2.1,Apache Coyote/1.0 # - - Soap - - false - - - http://www28.brinkster.com/hegdes/NumberToWords.asmx?WSDL - NumberToWordsTest - Microsoft-IIS/6.0 # - - Soap - - false - - - http://www.richsolutions.com/richpayments/richpay.asmx?WSDL - richpayTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://server1.pointwsp.net/ws/postal/main.asmx?WSDL - mainTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://xmlrad.com/WSFindMP3Bin/WSFindMP3.dll/WSDL - WSFindMP3Test - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.siliconllama.com/services/wsdl/ISOcodesService.wsdl - ISOcodesServiceTest - - Soap - - false - - - http://www.webserviceoftheday.com/ws/soap/wsotd.asmx?wsdl - wsotdTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.ripedev.com/webservices/LocalTime.asmx?WSDL - LocalTimeTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://majordojo.com/amazon_query/amazon_query.wsdl - amazon_queryTest - Apache/1.3.29 (Unix) mod_jk/1.2.0 mod_ssl/2.8.16 OpenSSL/0.9.6g PHP/4.3.4 # - - Soap - - false - - - http://www.SoapClient.com/xml/SQLDataSoap.wsdl - SQLDataSoapTest - SQLData Server/3.01 # - - Soap - - false - - - http://soap.einsteinware.com/nascar/nascardataservice.asmx?WSDL - nascardataserviceTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpPost - - false - - - http://wsdl.wsdlfeeds.com/spell.cfc?wsdl - spellTest - Apache/1.3.27 (Unix) (Red-Hat/Linux) JRun/4.0 mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26 # - - Soap - - false - - - http://ws2.serviceobjects.net/av/AddressValidate.asmx?WSDL - AddressValidateTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://arcweb.esri.com/services/v2/RouteFinder.wsdl - RouteFinderTest - Netscape-Enterprise/6.0 # - - Soap - - false - - - http://arcweb.esri.com/services/v2/Query.wsdl - QueryTest - Netscape-Enterprise/6.0 # - - Soap - - false - - - http://www.webservicex.net/fax.asmx?wsdl - faxTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://ws2.serviceobjects.net/gpp/GeoPinPoint.asmx?WSDL - GeoPinPointTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://ws2.serviceobjects.net/gp/GeoPhone.asmx?WSDL - GeoPhoneTest - - Soap - HttpGet - HttpPost - - false - - - http://webservices.sld.cu/aldia.wsdl - aldiaTest - Apache/1.3.27 (Unix) (Red-Hat/Linux) mod_ssl/2.8.12 OpenSSL/0.9.6b # - - Soap - - false - - - http://www.inkostar.com/wsdl/iifws/iifws.wsdl - iifwsTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://www.nims.nl/soap/oms2.wsdl - oms2Test - - Soap - - false - - - http://www.lixusnet.com/lixusnet/AddFinder.jws?wsdl - AddFinderTest - - Soap - - false - - - http://www.xignite.com/xsimulation.asmx?WSDL - xsimulationTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/uszip.asmx?WSDL - uszipTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.rightsecurity.biz/NRICWebServices/NRICWebServices.dll/wsdl/Iws_Verify_NRIC - Iws_Verify_NRICTest - Netscape-Enterprise/3.5.1 # - - Soap - - false - - - http://live.capescience.com/wsdl/GlobalWeather.wsdl - GlobalWeatherTest - # - - Soap - - true - - - http://www.barnaland.is/dev/sms.asmx?WSDL - smsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.firelife.eu.com/dynamicflash/dynamicflash.asmx?WSDL - dynamicflashTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://www.e-naxos.com/scripts/enwscp.dll/wsdl/IODCODESPOSTAUX - IODCODESPOSTAUXTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - true - - - http://www.indobiz.com/OptionPricing.asmx?WSDL - OptionPricingTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://xmlrad.com/WSGeneratorBin/WSGenerator.dll/WSDL - WSGeneratorTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://xml.nig.ac.jp/wsdl/Blast.wsdl - BlastTest - GLUE/3.2.1,Apache Coyote/1.0 # - - Soap - - false - - - http://xml.nig.ac.jp/wsdl/TxSearch.wsdl - TxSearchTest - GLUE/3.2.1,Apache Coyote/1.0 # - - Soap - - false - - - http://www.codebump.com/services/zipcodelookup.asmx?wsdl - zipcodelookupTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.esynaps.com/webservices/YourHostInfo.asmx?WSDL - YourHostInfoTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.oakleaf.ws/cfrtocws/cfrtocws.asmx?wsdl - cfrtocwsTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.baxglobal.com/xmltracking/xmltracking.asmx?wsdl - xmltrackingTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://webservices.isitedesign.com/ws/chartWS.cfc?wsdl - chartWSTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://ww6.borland.com/webservices/MapQuest/MapQuest.exe/wsdl/IMapQuest - IMapQuestTest - Microsoft-IIS/4.0 # - - Soap - - false - - - http://www.pinellus.com/cfc/Cod_fiscale.cfc?wsdl - Cod_fiscaleTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.stgregorioschurchdc.org/wsdl/Bible.wsdl - BibleTest - Apache/1.3.27 (Unix) PHP/4.2.3 FrontPage/5.0.2.2510 Rewrit/1.1a # - - Soap - - false - - - http://aspnet.lamaan.com/webservices/QuranVerse.asmx?WSDL - QuranVerseTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.danmarinescu.com/WebServices/ChessCGIServer.exe/wsdl/IBorlandChess - IBorlandChessTest - - Soap - - false - - - http://www.webservicex.net/EMBLNucleotideSequenceWebService.asmx?wsdl - EMBLNucleotideSequenceWebServiceTest - - Soap - HttpGet - HttpPost - - false - - - http://wavendon.dsdata.co.uk/axis/services/CarRentalQuotes?wsdl - CarRentalQuotesTest - Apache/2.0.39 (Win32) mod_jk/1.2.0 # - - Soap - - false - - - http://soap.systinet.net/demos/W3CSearch/wsdl - W3CSearchTest - Systinet WASP Server for Java/4.6.1 (Java/1.4.2; Linux/2.4.20-24.7) # - - Soap - - false - - - http://www.codecube.net/services/xreonline.asmx?WSDL - xreonlineTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://webservices.tei.or.th/getQuakeData.cfc?wsdl - getQuakeDataTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://wavendon.dsdata.co.uk:8080/axis/services/SBGGetAirFareQuote?wsdl - SBGGetAirFareQuoteTest - Apache/2.0.39 (Win32) mod_jk/1.2.0 # - - Soap - - false - - - http://ws.cdyne.com/whoisforip/queryip.asmx?wsdl - queryipTest - - Soap - HttpGet - HttpPost - - false - - - http://ws.acrosscommunications.com/SMS.asmx?WSDL - SMSTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://dotnet.cyberthink.net/computerdictionary/computerdictionary.asmx?wsdl - computerdictionaryTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.apniurdu.com/SOAP/Urdu2.wsdl - Urdu2Test - Apache # - - Soap - - false - - - http://www.webservicex.net/airport.asmx?wsdl - airportTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://telecommerce.danet.de/axis/services/DocConverterServicePort?wsdl - DocConverterServicePortTest - Apache/1.3.26 (Linux/SuSE) mod_webapp/1.2.0-dev PHP/4.2.2 # - - Soap - - false - - - http://www.xmlme.com/WSShakespeare.asmx?WSDL - WSShakespeareTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://glkev.webs.innerhost.com/glkev_ws/WeatherFetcher.asmx?WSDL - WeatherFetcherTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.dl-me.com/webservices/unitext.asmx?wsdl - unitextTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.suiyi.com/soap/economic.dll/wsdl/Ieconomic - IeconomicTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://webservices.isitedesign.com/ws/slashdotnews.cfc?wsdl - slashdotnewsTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://www.xignite.com/xretirement.asmx?WSDL - xretirementTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://ws2.serviceobjects.net/yp/YellowPages.asmx?WSDL - YellowPagesTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.securexml.net/securexml/securexml.wsdl - securexmlTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://soap.4s4c.com/weblogs/subscribe.wsdl - subscribeTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://www.schemaweb.info/webservices/soap/SchemaWebSoap.asmx?wsdl - SchemaWebSoapTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.financialwebservices.ltd.uk/axis/services/bond?wsdl - bondTest - Apache Tomcat/4.0.4 (HTTP/1.1 Connector) # - - Soap - - false - - - http://www.xignite.com/xnews.asmx?WSDL - xnewsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.what-is-around.com/awwia.wsdl - awwiaTest - Apache/2.0.47 (Unix) mod_ssl/2.0.47 OpenSSL/0.9.7b # - - Soap - - false - - - http://www.eyemaginations.com/cgi-bin/getWSDL.pl?wsdl=WebFunction.wsdl - getWSDLTest - Apache/1.3.27 (Unix) FrontPage/5.0.2.2510 mod_ssl/2.8.12 OpenSSL/0.9.6g # - - Soap - - false - - - http://www.flash-db.com/services/ws/companyInfo.wsdl - companyInfoTest - Apache/1.3.28 (Unix) mod_auth_passthrough/1.8 mod_bwprotect/0.2 mod_bwlimited/1.2 PHP/4.3.3 mod_log_bytes/1.2 FrontPage/5.0.2.2634 # PHP/4.3.3 - - Soap - - false - - - http://www.abundanttech.com/webservices/population/population.wsdl - populationTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://wsdl.wsdlfeeds.com/odp.cfc?wsdl - odpTest - Apache/1.3.27 (Unix) (Red-Hat/Linux) JRun/4.0 mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26 # - - Soap - - false - - - http://www.xignite.com/xstatistics.asmx?WSDL - xstatisticsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.nickhodge.com/nhodge/finnwords/finnwords.wsdl - finnwordsTest - Apache/1.3.29 (Unix) mod_auth_passthrough/1.8 mod_gzip/1.3.26.1a mod_jk/1.2.0 mod_log_bytes/1.2 mod_bwlimited/1.4 PHP/4.3.4 FrontPage/5.0.2.2634 mod_ssl/2.8.16 OpenSSL/0.9.6b # PHP/4.3.4 - - Soap - - false - - - http://terraservice.net/TerraService.asmx?WSDL - TerraServiceTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.swanandmokashi.com/HomePage/WebServices/QuoteOfTheDay.asmx?WSDL - QuoteOfTheDayTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://test.mapfrepr.net/Encryption/Encryption.asmx?WSDL - EncryptionTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://digilander.libero.it/mamo78/KRSS_DAML_Service.wsdl - KRSS_DAML_ServiceTest - - Soap - - false - - - http://glkev.webs.innerhost.com/glkev_ws/UPSTracking.asmx?WSDL - UPSTrackingTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/hcpcs.asmx?WSDL - hcpcsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.framewerks.com/WebServices/helpfulfunctions/helpfulfunctions.asmx?WSDL - helpfulfunctionsTest - Microsoft-IIS/5.0 Geobytes-GeoSelect/2.1.0.1 # ASP.NET - - Soap - - false - - - http://www.esynaps.com/WebServices/BusinessList.asmx?WSDL - BusinessListTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://webservices.wolfram.com/services/SearchServices/WolframSearch.wsdl - WolframSearchTest - Apache Coyote/1.0 # - - Soap - - false - - - http://webservices.matlus.com/scripts/emailwebservice.dll/wsdl/IEmailService - IEmailServiceTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.seshakiran.com/QuoteService/QuotesService.asmx?wsdl - QuotesServiceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://ws2.serviceobjects.net/pa/phoneappend.asmx?wsdl - phoneappendTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/uklocation.asmx?WSDL - uklocationTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/icd9drug.asmx?WSDL - icd9drugTest - - Soap - HttpGet - HttpPost - - false - - - http://docserv.aurigalogic.com/docserv.wsdl - docservTest - Apache/1.3.27 (Unix) mod_jk2/2.0.3-dev mod_webapp/1.2.0-dev PHP/4.1.2 # - - Soap - - false - - - http://www.barnaland.is/dev/phonebook.asmx?WSDL - phonebookTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.xmlme.com/WSSportingGoods.asmx?WSDL - WSSportingGoodsTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.saintlogin.com/SAINT_WS/SAINTlogin_service_mssoap.php?wsdl - SAINTlogin_service_mssoapTest - Apache/2.0.46 # - - Soap - - false - - - http://www.wsindex.org/pages/wsindexLinks.wsdl - wsindexLinksTest - Apache/1.3.28 (Unix) mod_auth_passthrough/1.8 mod_bwlimited/1.4 PHP/4.3.3 mod_log_bytes/1.2 FrontPage/5.0.2.2634 mod_ssl/2.8.15 OpenSSL/0.9.6g # - - Soap - - false - - - http://soap.einsteinware.com/email/emailservices.asmx?WSDL - emailservicesTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpPost - - false - - - http://www.ejse.com/WeatherService/Service.asmx?WSDL - ServiceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.indobiz.com/IndoEconoCator.asmx?WSDL - IndoEconoCatorTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.winisp.net/cheeso/zips/ZipService.asmx?WSDL - ZipServiceTest - - Soap - HttpGet - HttpPost - - false - - - http://www.abysal.com/soap/AbysalEmail.wsdl - AbysalEmailTest - Abysal-webDTP/3.02 # - - Soap - - false - - - http://ws2.serviceobjects.net/gc/GeoCash.asmx?WSDL - GeoCashTest - - Soap - HttpGet - HttpPost - - false - - - http://soap.systinet.net/demos/FreeDB/wsdl - FreeDBTest - Systinet WASP Server for Java/4.6.1 (Java/1.4.2; Linux/2.4.20-24.7) # - - Soap - - false - - - http://www.webservicex.net/FinanceService.asmx?WSDL - FinanceServiceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://arcweb.esri.com/services/v2/PlaceFinderSample.wsdl - PlaceFinderSampleTest - Netscape-Enterprise/6.0 # - - Soap - - false - - - http://www.PerfectXML.NET/WebServices/SalesRankNPrice/BookService.asmx?WSDL - BookServiceTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://ws.xara.com/graphicrender/render3d.wsdl - render3dTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://www.bitwaste.com/xmethods/ATTPager/ATTPager.wsdl - ATTPagerTest - Apache/2.0.40 (Red Hat Linux) PHP/4.2.2 DAV/2 # - - Soap - - false - - - http://webservices.empowered.com/statsws/stats.asmx?WSDL - statsTest - - Soap - - false - - - http://samples.bowstreet.com/bowstreet5/webengine/xmethods/gcd/Action!getWSDL - ActiongetWSDLTest - - Soap - - false - - - http://www.freshscore.com/service/FreshScoreLiveScores.asmx?WSDL - FreshScoreLiveScoresTest - - Soap - HttpGet - HttpPost - - false - - - http://www.berneda.com/scripts/TeeChartSOAP.exe/wsdl/ITeeChart - ITeeChartTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.discoverdance.co.uk/zipQuery/zipCodeService.asmx?wsdl - zipCodeServiceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.jusufdarmawan.com/wsprimegenerator.exe/wsdl/IPrimeGenerator - IPrimeGeneratorTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://www.xmethods.net/sd/2001/TemperatureService.wsdl - TemperatureServiceTest - Enhydra-MultiServer/3.1.1b1 # - - Soap - - true - - - http://www.xmethods.net/wsdl/query.wsdl - queryTest - Apache/1.3.26 (Unix) Enhydra-Director/3 PHP/4.0.6 DAV/1.0.3 AuthNuSphere/1.0.0 # - - Soap - - false - - - http://appserver.pepperzak.net/bankcode/BankCodeEJBHome/wsdl.jsp - BankCodeEJBHomeTest - WebLogic WebLogic Server 6.1 SP1 09/18/2001 14:28:44 #138716 # - - Soap - - true - - - http://ws2.serviceobjects.net/pt/PackTrack.asmx?WSDL - PackTrackTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.marotz.se/scripts/zipinfo.exe/wsdl/ISwedishZipInfo - ISwedishZipInfoTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://wavendon.dsdata.co.uk/axis/services/WhoisData?wsdl - WhoisDataTest - Apache/2.0.39 (Win32) mod_jk/1.2.0 # - - Soap - - false - - - http://www.xignite.com/xrealtime.asmx?WSDL - xrealtimeTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.extensio.com:8080/ExtensioInfoServer/mbsoap/MBWSSoapServices.wsdl - MBWSSoapServicesTest - Apache/1.3.27 (Unix) mod_jk/1.1.0 # - - Soap - - false - - - http://www.xignite.com/xSurvey.asmx?WSDL - xSurveyTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.abundanttech.com/webservices/deadoralive/deadoralive.wsdl - deadoraliveTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl - urnxmethodsdelayedquotesTest - - Soap - - false - - - http://www.bindingpoint.com/ws/imalert/imalert.asmx?wsdl - imalertTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.PerfectXML.net/WebServices/MusicTeachers/MusicTeachers.asmx?wsdl - MusicTeachersTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://adrianr.dyndns.org/Fortune/Fortune.wsdl - FortuneTest - - Soap - - false - - - http://www.framewerks.com/WebServices/HTMLeMail/HTMLeMail.asmx?WSDL - HTMLeMailTest - Microsoft-IIS/5.0 Geobytes-GeoSelect/2.1.0.1 # ASP.NET - - Soap - - false - - - http://www.quisque.com/fr/techno/eqimage/eqimage.asmx?WSDL - eqimageTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://xml.nig.ac.jp/wsdl/Fasta.wsdl - FastaTest - GLUE/3.2.1,Apache Coyote/1.0 # - - Soap - - false - - - http://reto.checkit.ch/Scripts/Lotto.dll/wsdl/IgetNumbers - IgetNumbersTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.webservicex.net/SendSMS.asmx?WSDL - SendSMSTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://wavendon.dsdata.co.uk/axis/services/SpamKiller?wsdl - SpamKillerTest - Apache/2.0.39 (Win32) mod_jk/1.2.0 # - - Soap - - false - - - http://webservices.imacination.com/distance/Distance.jws?wsdl - DistanceTest - Resin/2.1.7 # - - Soap - - false - - - http://www.barnaland.is/dev/personlookup.asmx?WSDL - personlookupTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.esynaps.com/WebServices/WhoIsService.asmx?WSDL - WhoIsServiceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.xmethods.net/sd/2001/EBayWatcherService.wsdl - EBayWatcherServiceTest - - Soap - - false - - - http://api.google.com/GoogleSearch.wsdl - GoogleSearchTest - GFE/1.3 # - - Soap - - false - - - http://www.esynaps.com/webservices/codegenerator.asmx?WSDL - codegeneratorTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.flash-db.com/services/ws/barCodes.wsdl - barCodesTest - Apache/1.3.28 (Unix) mod_auth_passthrough/1.8 mod_bwprotect/0.2 mod_bwlimited/1.2 PHP/4.3.3 mod_log_bytes/1.2 FrontPage/5.0.2.2634 # PHP/4.3.3 - - Soap - - false - - - http://www.webservicex.net/RssToHTML.asmx?WSDL - RssToHTMLTest - - Soap - HttpGet - HttpPost - - false - - - http://server1.pointwsp.net/ws/finance/currency.asmx?WSDL - currencyTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.ebob42.com/cgi-bin/NumberToWordsInDutch.exe/wsdl/IDutch - IDutchTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.lixusnet.com/lixusnet/HPcatalog.jws?wsdl - HPcatalogTest - NGASI Managed Hosting Application Server/2.0,Apache Tomcat/4.0 (HTTP/1.1 Connector) # - - Soap - - true - - - http://www.oakleaf.ws/cfrsearchws/cfrsearchws.asmx?wsdl - cfrsearchwsTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://glkev.webs.innerhost.com/glkev_ws/StockServices.asmx?WSDL - StockServicesTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://ws.acrosscommunications.com/Fax.asmx?WSDL - FaxTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.dl-me.com/etoaservice/engtoarabic.asmx?WSDL - engtoarabicTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.webservicex.net/AustralianPostCode.asmx?WSDL - AustralianPostCodeTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/country.asmx?wsdl - countryTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.esynaps.com/WebServices/SearchWS.asmx?WSDL - SearchWSTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.flash-db.com/services/ws/flashBarChart.wsdl - flashBarChartTest - Apache/1.3.28 (Unix) mod_auth_passthrough/1.8 mod_bwprotect/0.2 mod_bwlimited/1.2 PHP/4.3.3 mod_log_bytes/1.2 FrontPage/5.0.2.2634 # PHP/4.3.3 - - Soap - - false - - - http://ws.cdyne.com/SpellChecker/check.asmx?wsdl - checkTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.xmethods.net/sd/2001/BabelFishService.wsdl - BabelFishServiceTest - Apache/1.3.26 (Unix) Enhydra-Director/3 PHP/4.0.6 DAV/1.0.3 AuthNuSphere/1.0.0 # - - Soap - - false - - - http://ws2.serviceobjects.net/sq/FastQuote.asmx?WSDL - FastQuoteTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://glkev.webs.innerhost.com/glkev_ws/Currencyws.asmx?WSDL - CurrencywsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.swanandmokashi.com/HomePage/WebServices/Horoscope.asmx?WSDL - HoroscopeTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/UDDIBusinessFinder.asmx?WSDL - UDDIBusinessFinderTest - - Soap - HttpGet - HttpPost - - false - - - http://ws2.serviceobjects.net/uspo/USPatentOffice.asmx?WSDL - USPatentOfficeTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://ws.cdyne.com/ziptogeo/zip2geo.asmx?wsdl - zip2geoTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/icd9.asmx?WSDL - icd9Test - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.xignite.com/xquotes.asmx?WSDL - xquotesTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/BibleWebservice.asmx?wsdl - BibleWebserviceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://ws.acrosscommunications.com/Phone.asmx?WSDL - PhoneTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.esynaps.com/WebServices/NFLNews.asmx?WSDL - NFLNewsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.stgregorioschurchdc.org/wsdl/Calendar.wsdl - CalendarTest - Apache/1.3.27 (Unix) PHP/4.2.3 FrontPage/5.0.2.2510 Rewrit/1.1a # - - Soap - - false - - - http://www.xignite.com/xEdgar.asmx?WSDL - xEdgarTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/globalweather.asmx?WSDL - globalweatherTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.abundanttech.com/webservices/bnprice/bnprice.wsdl - bnpriceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://ws2.serviceobjects.net/upc/UPC.asmx?WSDL - UPCTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.bitounis.com/IBAN/IBANFuncs.asmx?WSDL - IBANFuncsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.winisp.net/cheeso/books/books.asmx?WSDL - booksTest - - Soap - HttpGet - HttpPost - - false - - - http://ws2.serviceobjects.net/ev/EmailValidate.asmx?WSDL - EmailValidateTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.net/ValidateEmail.asmx?WSDL - ValidateEmailTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.xmethods.net/sd/2001/XMethodsFilesystemService.wsdl - XMethodsFilesystemServiceTest - - Soap - - false - - - http://ws2.serviceobjects.net/whi/WhoIs.asmx?WSDL - WhoIsTest - Microsoft-IIS/5.0 # - - Soap - HttpGet - HttpPost - - false - - - http://arcweb.esri.com/services/v2/MapImage.wsdl - MapImageTest - Netscape-Enterprise/6.0 # - - Soap - - false - - - http://xml.nig.ac.jp/wsdl/DDBJ.wsdl - DDBJTest - GLUE/3.2.1,Apache Coyote/1.0 # - - Soap - - false - - - http://urljr.com/soap - urljrTest - Apache/2.0.44 (Win32) DAV/2 mod_ssl/2.0.43 OpenSSL/0.9.6g PHP/4.3.3 # - - Soap - - false - - - http://localhost:8080/ConvDocEncBar.asmx?wsdl - ConvDocEncBarTest - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - true - - - http://localhost:8080/ConvDocLitWra.asmx?wsdl - ConvDocLitWraTest - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - true - - - http://localhost:8080/ConvDocLitBar.asmx?wsdl - ConvDocLitBarTest - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - true - - - http://localhost:8080/ConvRpc.asmx?wsdl - ConvRpcTest - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - true - - - http://localhost:8080/ConvDocEncWra.asmx?wsdl - ConvDocEncWraTest - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - true - - - http://www.abctext.com/webservices/SMS.asmx?WSDL - SMSTest2 - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.barnaland.is/dev/names.asmx?WSDL - namesTest - - Soap - - false - - - http://www.webservicex.net/isbn.asmx?WSDL - isbnTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.verbix.com/cgi-bin/soapx.exe/wsdl/IGetInflection - IGetInflectionTest - Microsoft-IIS/5.0 # - - Soap - - false - - - http://www.culand.net/WebServices/bin/WSMaze_Server.dll/wsdl/IWSMazeServer - IWSMazeServerTest - Microsoft-IIS/5.1 # ASP.NET - - Soap - - false - - - http://63.138.157.107/av/wsdl/ITAddressValidations - ITAddressValidationsTest - Apache/1.3.28 (Win32) PHP/4.3.3 # - - Soap - - false - - - http://www.quisque.com/fr/chasses/blasons/search.asmx?WSDL - searchTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://survey.rila.net/SurveyService/SurveyService.asmx?wsdl - SurveyServiceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://greg.froh.ca/fun/random_bushism/soap/?wsdl - Test - Apache/1.3.29 (Unix) PHP/4.3.3 # PHP/4.3.3 - - Soap - - false - - - http://lokeuei.malaysiandevelopers.net/magnum4d/results.asmx?WSDL - resultsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.geomonster.com/GeoServe.asmx?WSDL - GeoServeTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://nagraj.hopto.org/axis/services/ZenQuoteService?wsdl - ZenQuoteServiceTest - Apache-Coyote/1.1 # - - Soap - - false - - - http://www.ghettodriveby.com/soap/?wsdl - Test2 - Apache/1.3.29 (Unix) PHP/4.3.3 # PHP/4.3.3 - - Soap - - false - - - http://ocean.cse.ucsc.edu/soap/getCAWeather.wsdl - getCAWeatherTest - Apache/2.0.46 (Unix) mod_ssl/2.0.46 OpenSSL/0.9.6g DAV/2 SOAP/1.1 Catacomb/0.9.1-dev # - - Soap - - false - - - http://www.xignite.com/xInsider.asmx?WSDL - xInsiderTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://webservices.geomonster.com/GeoServe.asmx?wsdl - GeoServeTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://localhost:8080/TestBinding1.asmx?wsdl - TestBinding1Test - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - false - - - http://localhost:8080/TestBinding2.asmx?wsdl - TestBinding2Test - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - false - - - http://localhost:8080/TestBinding4.asmx?wsdl - TestBinding4Test - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - true - - - http://localhost:8080/TestBinding3.asmx?wsdl - TestBinding3Test - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - false - - - http://localhost:8080/TestBinding5.asmx?wsdl - TestBinding5Test - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - false - - - http://paracite.ecs.soton.ac.uk/paracite.wsdl - paraciteTest - false - - - http://sms.smspoint.net:8080/special/services/Sms?wsdl - SmsTest - Apache Coyote/1.0 # - - Soap - - false - - - http://webservices.instantlogic.com/zipcodes.ils?wsdl - zipcodesTest - false - - - http://www.boyzoid.com/threat.cfc?wsdl - threatTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://localhost:8080/Test1.asmx?wsdl - Test1Test - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - false - - - http://localhost:8080/TestBinding6.asmx?wsdl - TestBinding6Test - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - false - - - http://localhost:8080/Test2.asmx?wsdl - Test2Test - Mono-XSP Server/0.6.99.0 128 # Mono - - Soap - - false - - - http://www.rzg.mpg.de/~michel/SOPCWeb.wsdl - SOPCWebTest - - Soap - - false - - - http://helena.europe.webmatrixhosting.net/Morse.asmx?WSDL - MorseTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://iis1.grantparksoftware.com:8080/gps/gps.asmx?WSDL - gpsTest - - Soap - HttpGet - HttpPost - - false - - - http://isnpx1158.in2p3.fr:8180/axis/services/AMIWebService?wsdl - AMIWebServiceTest - Apache-Coyote/1.1 # - - Soap - - false - - - http://www.dotnetclipper.com/clip.asmx?WSDL - clipTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/aba.asmx?WSDL - abaTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.newcomer.de/WebServices/Lohn.dll/wsdl/ILohn2004 - ILohn2004Test - Microsoft-IIS/6.0 # - - Soap - - false - - - http://66.165.154.102/fax.asmx?wsdl - faxTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/RssToHTML.asmx?WSDL - RssToHTMLTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/BibleWebservice.asmx?wsdl - BibleWebserviceTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/ValidateEmail.asmx?WSDL - ValidateEmailTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/icd9toicd10.asmx?WSDL - icd9toicd10Test2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/stockquote.asmx?WSDL - stockquoteTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/icd9.asmx?WSDL - icd9Test2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/hcpcs.asmx?WSDL - hcpcsTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/country.asmx?wsdl - countryTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/barcode.asmx?WSDL - barcodeTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/isbn.asmx?WSDL - isbnTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/icd9drug.asmx?WSDL - icd9drugTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/AustralianPostCode.asmx?WSDL - AustralianPostCodeTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/usweather.asmx?WSDL - usweatherTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/CurrencyConvertor.asmx?wsdl - CurrencyConvertorTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/airport.asmx?wsdl - airportTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/uszip.asmx?WSDL - uszipTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/icd10.asmx?WSDL - icd10Test2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/NAICS.asmx?wsdl - NAICSTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/SendSMS.asmx?WSDL - SendSMSTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/UDDIBusinessFinder.asmx?WSDL - UDDIBusinessFinderTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/FinanceService.asmx?WSDL - FinanceServiceTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/sendsmsworld.asmx?WSDL - sendsmsworldTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://api.ecommstats.com/services/statService.wsdl - statServiceTest - TME-GLUE/5.0,Apache-Coyote/1.1 # - - Soap - - false - - - http://66.165.154.102/EMBLNucleotideSequenceWebService.asmx?wsdl - EMBLNucleotideSequenceWebServiceTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/uklocation.asmx?WSDL - uklocationTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/periodictable.asmx?wsdl - periodictableTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://66.165.154.102/globalweather.asmx?WSDL - globalweatherTest2 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://localhost:8080/IncludeTest.asmx?wsdl - IncludeTestTest - Mono-XSP Server/0.9.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - true - - - http://www.webservicex.com/EMBLNucleotideSequenceWebService.asmx?wsdl - EMBLNucleotideSequenceWebServiceTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/icd10.asmx?WSDL - icd10Test3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/hcpcs.asmx?WSDL - hcpcsTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/isbn.asmx?WSDL - isbnTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/AustralianPostCode.asmx?WSDL - AustralianPostCodeTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/fax.asmx?wsdl - faxTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/aba.asmx?WSDL - abaTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/globalweather.asmx?WSDL - globalweatherTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/UDDIBusinessFinder.asmx?WSDL - UDDIBusinessFinderTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/CurrencyConvertor.asmx?wsdl - CurrencyConvertorTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/NAICS.asmx?wsdl - NAICSTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/BibleWebservice.asmx?wsdl - BibleWebserviceTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/ValidateEmail.asmx?WSDL - ValidateEmailTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/uklocation.asmx?WSDL - uklocationTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/stockquote.asmx?WSDL - stockquoteTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/usweather.asmx?WSDL - usweatherTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/icd9drug.asmx?WSDL - icd9drugTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/periodictable.asmx?wsdl - periodictableTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/uszip.asmx?WSDL - uszipTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/SendSMS.asmx?WSDL - SendSMSTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/airport.asmx?wsdl - airportTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/sendsmsworld.asmx?WSDL - sendsmsworldTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/icd9toicd10.asmx?WSDL - icd9toicd10Test3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/FinanceService.asmx?WSDL - FinanceServiceTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/country.asmx?wsdl - countryTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/RssToHTML.asmx?WSDL - RssToHTMLTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/barcode.asmx?WSDL - barcodeTest3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.webservicex.com/icd9.asmx?WSDL - icd9Test3 - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://projekt.wifo.uni-mannheim.de/elmar/api/ElmarSearchServices?wsdl - ElmarSearchServicesTest - Apache/2.0.48 (Linux/SuSE) mod_perl/1.99_08 Perl/v5.8.0 PHP/4.3.4 mod_ssl/2.0.48 OpenSSL/0.9.6i mod_jk2/2.0.4-dev # - - Soap - - false - - - http://www.webservicex.com/TranslateService.asmx?WSDL - TranslateServiceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.xignite.com/xrates.asmx?WSDL - xratesTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://helena.europe.webmatrixhosting.net/LetterSoup.asmx?WSDL - LetterSoupTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://localhost:8080/DataService.asmx?wsdl - DataServiceTest - Mono-XSP Server/0.9.99.0 128 # Mono - - Soap - HttpGet - HttpPost - - true - - - http://www.javaportal.it/kservices/JIPNews?wsdl - JIPNewsTest - Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.1mdk) mod_jk/1.2.1 auth_ldap/1.6.0 mod_ssl/2.8.10 OpenSSL/0.9.6g sxnet/1.2.4 PHP/4.2.3 # - - Soap - - false - - - http://www.tilisoft.com/ws/LocInfo/ZipCode.asmx?WSDL - ZipCodeTest2 - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.quisque.com/fr/chasses/crypto/cesar.asmx?WSDL - cesarTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.quisque.com/fr/chasses/crypto/vigenere1.asmx?WSDL - vigenere1Test - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://soap.achchex.com/exec/btrnsoap.dll/wsdl/IBTRNSOAP - IBTRNSOAPTest - Apache/2.0.43 (Win32) mod_ssl/2.0.43 OpenSSL/0.9.6g # - - Soap - - false - - - http://www.costudio.com/WSLinkChecker.asmx?WSDL - WSLinkCheckerTest - Microsoft-IIS/6.0 # - - Soap - - false - - - http://www.webservicex.com/geoipservice.asmx?WSDL - geoipserviceTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.myweb-services.com/server/ShoppingBasket.wsdl - ShoppingBasketTest - Apache/1.3.20 Sun Cobalt (Unix) mod_throttle/3.1.2 Chili!Soft-ASP/3.6.2 mod_ssl/2.8.4 OpenSSL/0.9.6b PHP/4.1.2 mod_auth_pam_external/0.1 FrontPage/4.0.4.3 mod_perl/1.25 # PHP/4.1.2 - - Soap - - false - - - http://www.closerfar.com/dic2.asmx?WSDL - dic2Test2 - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://69.194.99.154/av/wsdl/ITAddressValidations - ITAddressValidationsTest2 - Apache/1.3.28 (Win32) # - - Soap - - false - - - http://www.closerfar.com/engtoarabic.asmx?WSDL - engtoarabicTest2 - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.ingig.com/channels.asmx?WSDL - channelsTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.javaportal.it/kservices/JIPComuni?wsdl - JIPComuniTest - Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.1mdk) mod_jk/1.2.1 auth_ldap/1.6.0 mod_ssl/2.8.10 OpenSSL/0.9.6g sxnet/1.2.4 PHP/4.2.3 # - - Soap - - false - - - http://www.quisque.com/fr/chasses/crypto/hill.asmx?WSDL - hillTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.tilisoft.com/ws/eyeVeri/eyeVeri.asmx?WSDL - eyeVeriTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.strikeiron.com/WebServices/SMSMessagingService.asmx?WSDL - SMSMessagingServiceTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.strikeiron.com/WebServices/taxdata.asmx?WSDL - taxdataTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://smsserver.dotnetisp.com/ServiceSMS.asmx?WSDL - ServiceSMSTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.quisque.com/fr/chasses/crypto/crypta.asmx?WSDL - cryptaTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.netkoder.dk/postnummerws.asmx?wsdl - postnummerwsTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://addressmeister.bizware.com/service/wsdl/server.soap.wsdl - serverTest2 - Apache/1.3.26 (Unix) mod_ssl/2.8.10 OpenSSL/0.9.6b PHP/4.3.6 # PHP/4.3.6 - - Soap - - false - - - http://server.dotnetisp.com/webservices/dotnetisp/src2html.asmx?WSDL - src2htmlTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.myweb-services.com/server/UserApps.wsdl - UserAppsTest - Apache/1.3.20 Sun Cobalt (Unix) mod_throttle/3.1.2 Chili!Soft-ASP/3.6.2 mod_ssl/2.8.4 OpenSSL/0.9.6b PHP/4.1.2 mod_auth_pam_external/0.1 FrontPage/4.0.4.3 mod_perl/1.25 # PHP/4.1.2 - - Soap - - false - - - http://webservices.mio.it/sendsms.asmx?WSDL - sendsmsTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://server.dotnetisp.com/webservices/dotnetisp/codepostal.asmx?WSDL - codepostalTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://www.strikeiron.com/webservices/medicaredata.asmx?WSDL - medicaredataTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://www.strikeiron.com/WebServices/dataenhancement.asmx?WSDL - dataenhancementTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://server.dotnetisp.com/webservices/dotnetisp/ville.asmx?WSDL - villeTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - - false - - - http://webservices.wolfram.com/services/Integrator/Integrate.m?wsdl - IntegrateTest - Apache Coyote/1.0 # - - Soap - - false - - - http://www.javaportal.it/kservices/JIPCodice?wsdl - JIPCodiceTest - Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.1mdk) mod_jk/1.2.1 auth_ldap/1.6.0 mod_ssl/2.8.10 OpenSSL/0.9.6g sxnet/1.2.4 PHP/4.2.3 # - - Soap - - false - - - http://www.strikeiron.com/WebServices/datageneration.asmx?WSDL - datagenerationTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - - false - - - http://localhost:8080/DuplicateArrayTest.asmx?wsdl - DuplicateArrayTestTest - Mono-XSP Server/0.13.0.0 128 # Mono - - Soap - - true - - - http://localhost:8080/SessionCounter.asmx?wsdl - SessionCounterTest - Mono-XSP Server/0.13.0.0 128 # Mono - - Soap - HttpGet - HttpPost - - true - - - http://www.xignite.com/xIndices.asmx?WSDL - xIndicesTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://smsserver.dotnetisp.com/servicesms.asmx?WSDL - servicesmsTest - false - - - http://services.aonaware.com/DictService/DictService.asmx?WSDL - DictServiceTest - Microsoft-IIS/6.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://www.xignite.com/xCurrencies.asmx?WSDL - xCurrenciesTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - - http://xml.whereisthatip.com/ip-location-service.wsdl - iplocationserviceTest - Apache/2.0.49 (Unix) PHP/5.0.0RC2 # PHP/5.0.0RC2 - - Soap - - false - - - http://www.xignite.com/xHistorical.asmx?WSDL - xHistoricalTest - Microsoft-IIS/5.0 # ASP.NET - - Soap - HttpGet - HttpPost - - false - - \ No newline at end of file diff --git a/mcs/class/System.Web.Services/Test/standalone/wsdl.ignore b/mcs/class/System.Web.Services/Test/standalone/wsdl.ignore deleted file mode 100644 index 6029d5f41ba..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/wsdl.ignore +++ /dev/null @@ -1,39 +0,0 @@ -http://mysic.com/Webservices/MysicSearchEngine.asmx?WSDL # Url is not a wsdl doc. -http://www.w3.org/2001/XMLSchema:locatorSoapBinding # Not found -http://www.transactionalweb.com/SOAP/globalskilocator.wsdl # Wrong WSDL -http://paracite.eprints.org/paracite.wsdl # Wrong WSDL -http://www.atlaz.net/webservices/GetCurrencyExchange.wsdl # Wrong WSDL -http://www.transactionalweb.com/SOAP/globalocator.wsdl # Wrong WSDL -http://soap.amazon.com/schemas/AmazonWebServices.wsdl # Old schema version -http://www.compkarori.com/wsdl/discordian.wsdl # Old schema version -http://soap.systinet.net/demos/FTPService/wsdl # Wrong WSDL -http://www.c6.hu/ws/huzip.wsdl # Uses rpc + literal -http://www.wlug.org.nz/phpwiki/soap.wsdl # Old schema version -http://www.sid64.com/soap/sidrank.php?wsdl # Wrong WSDL -http://www.cosme.nu/services/smtpserver.php?wsdl # Wrong WSDL -http://www.forthlink.gr/TakisLib/TakisActiveLib.WSDL # Old schema version -http://www.allesta.net:51110/webservices/wsdl/YahooUserPingService.xml # Old schema version -http://www.siliconllama.com/services/wsdl/dConverterService.wsdl # Uses rpc + literal -http://www.onepercentsoftware.com/axis/services/EvaluationService?wsdl # Wrong WSDL -http://www.nims.nl/soap/oms.wsdl # Wrong WSDL -http://webservices.matlus.com/scripts/whoiswebservice.dll/wsdl/IWhoIs # Wrong WSDL -http://soapclient.com/xml/certService.wsdl # Wrong schema -http://ws.xara.com/navbar/navbar.wsdl # Wrong schema -http://www.cs.fsu.edu/~engelen/magic.wsdl # Wrong schema -http://www.agnisoft.com/soap/mssoapmp3search.xml # Wrong schema -http://www.cs.fsu.edu/~engelen/lu.wsdl # Old schema version -http://www.drouet-web.com/webservices/soap_cdtek.php?wsdl # Wrong WSDL (empty) -http://www.dotnetisp.com/webservices/dotnetisp/src2html.asmx?WSDL # Not a wsdl doc -http://www.dotnetisp.com/webservices/dotnetisp/ville.asmx?WSDL # Not a wsdl doc -http://www.dotnetisp.com/webservices/dotnetisp/codepostal.asmx?WSDL # Not a wsdl doc -http://interpressfact.net/webservices/promotionService.asmx?wsdl # Not a wsdl doc -http://www.interpressfact.net/webservices/getAds.asmx?wsdl # Not a wsdl doc -http://soap.prowizorka.com/spam/wsdl/ISpamCheck # Not working -http://www.interpressfact.net/webservices/getJoke.asmx?wsdl # Not working -http://ws.cdyne.com/ip2geo/ip2geo.asmx?wsdl # Incomplete WSDL -http://test.mapfrepr.net/Encryption/Encryption.asmx?WSDL # Error -http://www.bitwaste.com/xmethods/ATTPager/ATTPager.wsdl # Not found -http://www.freshscore.com/service/FreshScoreLiveScores.asmx?WSDL # Not found -http://www.orbitarium.com/schemas/ows.wsdl # Not valid WSDL -http://www.drbob42.co.uk/cgi-bin/Euro42/wsdl/IEuro # Not valid WSDL -http://www.transactionalweb.com/SOAP/geoserve.wsdl # Bug in Mono!! diff --git a/mcs/class/System.Web.Services/Test/standalone/wsdlfiles.tar.gz b/mcs/class/System.Web.Services/Test/standalone/wsdlfiles.tar.gz deleted file mode 100644 index da51b4cd77e994de923039ca1085801dea0e1043..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367789 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%0Doh--Ur*7tEtFt6%&#Qn0SWinc8SZ+W!pO z$5e5m^wul~mg@+VSjJSnn;uD9bf};klbQB9DvE{Di+o};o^0-MiooK1V%2?dU9RmI zAzhw{-EY)6&A*NK|KsbNf!6mAns0Wel|8HzP0Oku_7S@rd5ywrhbNA72R9dcVKhyLa~t^rt)OE zda;?x#$fYQ5|dvHlKbSfbz3WQK4h=m-j66bw>}vP*xT}*s-dZX4|hLrP3|28&h*_o zUT+M+(DwS(^34@c*@F>Z)$9v>{k_Grw#}Ea`1}VS=dv^9^70B7Pv-fj2PF0CJL~Ej z@8#>7%?EFTL@zxib0~b=2oxo%Q%W8q5?;wYjR(PG_w-I-<5vlVi;8vIRb0=2M(Al! zUz!Wqtai9W{V0|_=qX!IL4!6e=9JQTaxp)kPrR^#FPtz2n?^6VW~a28r`*4u_O`Wj z`)tCr!1%lR^`rNOoF$LZkLn(WI9<3(E`@%WHs(GzT)pKST~Y~@ms@sb=30{nL%)P` zCC5}V%g!?ga#QCP9ky*=Ytvo+geqnMUrOa3sOZCb{_;sjzVWMgC;j@#aTF`kfoBTW z4zfmuUhNCIpe@yh?sPLh!qtvd@SHpu{X;vkYx;;|E5i39mv7hmM6Kvu4BiuOuZ5qs z2SdK6U9O(?bgK!O7WZptw}t78?cs)(WzO+%icwR2i~E$Hn|XYA_tqdZ`effrM0Gi+ znTE;e>2xRweAbt0P$&QI1#na1-)Nbk4ZwabO@G;Nulu&@dSA=8S@pG=b7XP2qj}%1)B9&)+NL}Jsx+@K@3(z z6$Q;6kzb9+5bd!J!A@?gMj!Eha`hHFN+=Q$Jflj0Uo~W(e*Ho@(vbfHC;*5AEI>8D z*5>nN$Rhk$0O~x8l6m8>0&`Om#Eu$=4u*ng?xMpU_)}=SJiQm&rlK7e=B)&B3m_n*J|s?1arz%>YGfxc-AN; zdX)g3qK@sHMlNZ7@1+AxO#2kB?glLR><9q-QRDNv|eR@byrsE3#oR3A+G z3Y|JL{wPx#cj4|-=)`1%uQ2y91%2V>outWj5|y?Xu3}B|Wn%*KgMTRwGpj&~&y{?} z`5kVmq?hw1pYPixUeL6J+jq3#(~~c(qWOz30(guW%FsiueDiG3+Cfe-yKuKJ2=cUk z;aA$Y(yvoLk_x*2DRBe4UVndRJP9Mzd$p5^%1xPuO1wzmMV4 zJ_UcZa$Y(-ie+>^C+izsk?(}!nY|Ky5WgU7fV8~T0EjL=oB~(L)3QoyK%i+ARa%D2 z%pWxd7M;rEWR4(9(!ryf&q?kTDihb@UnC5@Lt^ehQ8vxMg$i{iBJ{drSTm~Nc{g_u zh4DdVOQRr1Au4982^1zb=)C4Ud>mt}Ku|WI_T`XHU#NAVm^SOGNy_O8@78(k?=9*2 zZsI}4+o(E972Ooh6!90nTE`5PIJ4Mz!#L=f2j0V5&V;8i>udzw603VGzJ_nPW&2~6 zQ1q*y4~CWA2|8q+!$NlCu;k?d9|ATWHC2s>Z5bhxW>FJ6yYtsWP>3>Dw6Qr6TmA28TLA#~;gA6?AacpyicF3*A{DI$^HzrSs*Rv8FrwpM`<08}PQO zv)0t}q4j#jyH(h1#}?)L!rAvd=QX#lrba5?N{JXZ|G= zc~kbZ@$#q;ml#Q80Vf(yHwI(FgAq?QmY-=kwu--Uvr$Vp{csv%VF{{iyBf10Vl0OY z*p8--{(Vqg2isDxm`+Gy5IXhL`3y`@`BfOZJ&zz#^xVTN)>sdv-JaTDB!MxBVIyn) zY*Kn`M4f5U#_?xqT7-gq?y7{0Az?_KeuLxCp~u}EQJ|M(3ZkA z;l$-dd04?|Xj6Si%erNqGBH?I^u2&8N2HznlLra+I%l!a@nM2Ane!Lh#Uh3rG9>A? zbGS7FVuT;*2CK(ss(>V})2Yh_cnYp@BD)F0bvty&kl@d+I^eqW*75Ka>cc@5m-3`z z0PJko=vEvq_7XawIYLY{lod8D$sly&UfZX*v--w}*_b~XW zayZcRw(Z2sKDQsv!yt%J^o?egwPx4G${+*=+t^UpTXUy9A`}qn#_X2g60gSk^PYrh zg|MgDV}pnSzAm}8vB$ApY9_aMoz+h&>d@OCPK1>eYRDo20Smpt#p`|b$CHc z3ACIlA~Ygg1sfA}wTzE<2=w5GUj`(zD7qSjj4CNiyd%E#DflwWe8a;pmO|481!>Qb z8$vF#Q%odOb0R|+>)ryRV_Y&9*9<_nTaczGrn5gx01ZEcGA{(8`Xmd1xm40a&W$7! zsUQrJisu(d;PZJ0hyeM;5KOC4oF=)HFe@wk%Zz|u6xXRAki{4uPIXio5a)76n1vm~ zFL2BbMI0p|xYji=%^!otTTQ-X9Gosp9ve+agR-}`upd#>c_wq9fN=lq01Os2le}pi z!S9^8PC6c`JC(t8?7{qI88T7%soPhW=s_lum(fGUk3E@jY+^Wh&ay{E)l37wp?j;SI*&pbisI8Smr`{r#U@WR{r_-RxkCQg$C z7pL`6Os_Wa=5nc`NU*2%$dzoexzo*5%ahwtI+ixhO0Klw+L~F~C1<$?my_9tN#!r^ z%8`s%EVmnw9C+yHkbXoz@+hn|er&mH2V?)>`a9*&J;#~G%wiTn(Z34aNm)x~tFt`m zCg-ONAz@RPwT;EXYScQW0T(>9LyZP>S#g8Kfgt2)#{Jg3hl`Pj@3ok!*=T{6Ghu)i zyfZ6A5w?H*Fl1WU^>akQzPuG1lZ$;adb56@6rd>$VE%+>XEGd|Q@)A6VS_(a}MGlCIUMi)IV zVQI-%nSeN2^cEIcO(cIjrSqxo?F8*uTVa;J0E+~>Q|8y$7<;~(F@wuXQ zQ`tEy5mtqus+7A5c!0iqT+MA*N3L1wg#A=R+-&qfMy_cV&$hc|(f9{~9gN#yX7qf& zT4N@D(AIHTzXzj^ZW2&6Vzk+F8@&r0GE=#+42x5aUsI5)PKL9KdPtCG18I@|YG;@g ze_ebTkmxir%nRF}jjNY!W5Op+l)etkP!-V~7@@Ga79T7x?E7+vK$&Yt;E28B8Ps#K z&`PIBQ8lpH18j!zy#LYc#9?GXwmLd?nsY{f`m}4z9FBKUS86-_0jaA2Z2kS&IJx{} z7^T>dpvQ;Kj|_H(1~z|l|HkS|4-d0;bia?OF;%w3yS$RVo*e9}^y`XkVW;0`LkCA6 z`Wl%fXa*^a&T1wt89yU+*5Hw)cUdiA##^VxJ^3<-1=9!;nBWj`>tWpfuzH=bqLm+M z=>xE&YqN_eAnuF{%nH`9>MqzHaM6nblN7z^hRs8;x(b7VL%Gd%A18tB_*jbW+zeQq zfc70Amm)YojJ>nZr0Es%d*)T|Q9^>RYCqN9`8*lkRu2WNE?3IO{{r!WtrDWQxl#H@ z@gx4&_@{Ye+BSf-f4(Q0KfIOs(ChOV&mfE z_1T@YLK=Io@cUhy^-L7Dq)+B1`}7{<^Yz^QgXP=C?+F7qrcC?(mw&jDPCWU){^1E~ zD^2&ENOqy}P?Jn@8p??d0>M!1xVn2dkB;1eS7ycr#>Y}pDrU9fy@^Z{M z$}o-UfzVL%15>AJg?=Z6_R$5dLeNFFrt5#X_v(@bglgB?n)}o9MJ0vG=le*}1xa6g z*v^)%r~5*tyKob+c{8|wM-|$_5=ku;E&}qAB*6U9c7Y$j0KFTa9vk5C0urKU4-U)^ zh`yDWy(^T*4{K0UkOX$|<16mXH`M@9wPEx%2sT5;H)JAWu~}{wqxl1R_O!i zGDIq$hCyCdjga5g1YaTljaXV)=H6+-fpvf*?YCp?=8ao`umYASQr8v6$@VRU@em1YGPz5cPN*#~-ogy_^qTR6NKO{mv;9*rPVX)aSe=tY| z>vawc+Q5~{0sugMIY(9&NS3>cu%af~V{|e{HH~;O>=0f74*d5)LoL;(vA!hpZMaTj ztQdwz4d-u{i2&9(x@zaAZ?^HX1QpZzBiiCZwqZ)G=E6OFEX^zBNUntVkSWh26Y*x{ zh=Jdf#b=3`c5lNn7Gnp7@~F$4#glf&$qa?9v!BEW#{3Wd<*Twq1Ntj(j9d160k?>z zu(G(WR7!RowvC;~O5b4G@|`f^w9xN!2b)i)K@~B|l@0!QJ0Xi3G%0W{;6)*%5m@fG z60F^pgtHu;Yu2Fq8Qq6!M;R%iC0(ddFk16%acVsNEPAd9-Ct>PRKyO2>$bgBQEzA5K0C>= z|9(=uUGqlX#81mehR;`QdTRi?mVi43U!ygs=2gZz-5`+0Dn4x(P~cgCV6-a}F&iyj z-E~Qbgm7-7v{WHAqt8YyHA8>sP``5bPBOaL5YY!1URm`y1U-Ed-4!3(>^1O|R`faW zq)9d{dC_=ILIK43vDn4|rsbW!p%uIz@k zO-$2tWtEq|lsWl;g-H&JETG5QD?4*`m19gEj&89!iKTQiJ=zzN#_J7HDTbCC^hfeC z_-`WnaBDiDu5Xd5&ENjPwm>YGIy+PcvD$m|H-YdR8bUV%2VEo#Ck*-%7))x7JpyZ19+p*j z95Wi=y-{sE?U+%|1-?yvug5Dzyt-ho1r4-JD~%5*+q2ICEm;|B8$ zQd0s8ahW|HV|(@UC*Lx0h0y8M2;2Da;OAWReZ{|-ub&9=@(3^Y)KK@7IJl(Et7XYu+=?|^+kUTpS%;m#s?Zl2kZD2VS5`P^C0h0&Ps9h)|f!JjchWfkHtN1oXDNv7sM*?lIIh>ig- zq6RN)ntTLn`6YFTZPQi*u?+c>|M)d&AShcFf5|Xcs_|0rd~*be70qa2fL%I49#QM= z#39k_)OPgEqbsz~Y`3&LqK|sdRMKD>=CQ8BrvoJ(HS1mFFD*`n6n-b1}@6~iaQ{a4`6F-0l7%G z0wukWl_A!f#`YcX(!wRYaK?43S(dJCg&}^coT|rRQofwLlv=!KjV4rwW>hcGf{lQF z6ypoJZBq%1H658XSG_pagG`q_88y1r1Qt`2UQ6Fd&y`wmb;50xX43UlGoQN>*w|pu#iFa6Q!#V zQr;+fCm($Lcd90;uqo5N{~{Scq+D4Frh?=fO2;X?_}mxZC*Xo=6EKu2Ia5aONUJPK zxf864uN^l;dB1oRua!y{f~R?Rt`Kvl>*amg4A+<`&a;FK9i&i{`U+*gB1E#9hr1B3 zad&Z4LPb*2mU16M+COn$XX;?13sBYz7GFE>!q8m1#cFKRPD#F#cLd2<*x*f7ttx0o zvHA4(;`KOv+1Bpma_?k4u@2viPsw?c^-z=Cs;Ywh>B37^(kE(>s`@!LVz3Dvc5G9x zY1z>9eazoQ5Qpo6Xw|^9HLWx()66rqsY}?BrNk*e0B;gYO~j0)!cHYb)w9l0u+5EQ zs!l3}qREYwHT)5^QP9p874F^7)}D#?(f;3>+p?goMu1#vFcUi%!ek3rHjAcNkd^M^wR$LFex`^JB)=V$AU! z^e6g)T{)PFY*>I$kw_Huyee!UY?3GAk^EY)K56R8r!C+vb*rmL_?f!3z2%p+D}>Q@ zj*}ryJOx46H`b9)`m~KGL+ur*FPP>oHeiC}*S&YW*<}a02R7RG43X7c55BIzu4&XP zowdvA)1*!>UH>K6BeY)_SncO_b?lcl2^PYn zB8TLB5h~fAF-8yhsz{muK#TNblgkqKiS%$~Z)pqj%fu){GsFu$#?6m?+XZWFp5_>Osx?DB6S|am7uPvy zi`IOiCGy?Pq`pNYcVWN^Di7{(zP7q*xR22hdPzi3Fui26`q_x;VX?lbk;IPf6$P6J>JNTx zAN4dQ8n&8e7A8s~R&XuF=Bc(ppebE$5t_mpPcFuq#4nMB+8Szl*fIh~H7;wegwcXO zRTfy;j2f?Q2*zE-{04h93Qgbuv+cr6J1SaluS^ofw3u+qzLZrKE+$tr*1>P_#p~ty z9QVa4=&Kc`ZlW6!Vo+hk*(LU+yxv0T7RyVw5`QOqr<=p!C~3d{M9{!SsDqqGW?QiQ zpG(4UHp~Z;sJy8)p^jzXs6gvg*vY!7DEn#Ln8LD64A@@Gu^M+|BZm9mwcyqup=*R= z+8iQdW|I3{h>N@tJ#!iTC#Y<8Dz5=+c8ePM9^NOti;@+}*AuBuy_XrGcKYl5gLn-h z;o^i!S7Vfl#v84adMY{r5`RQ*X8qpUaJjUN&gFULQJWywn9t|UtgVOH&s?vtmKb45 zfUAtm(p;*GM&=ll!8Y56njpeX0ca6Ni`R=OYm}K|eU5GPtVLAJ_Sd3N7%x=dHGIUw z1fHuzngVJpo(-vTMDtF;*yjdQkEv$}k-L^k$uhnC`DiBE=5XP#5Aov%iO0voakVJh zNj(YEf9!y@{LhK6u@$N`vwjU=*bFWb<}7uG!{V0`XGOfd@eeY7V~Ra`QDq1Q+Q}3vFkNxtuWzxdc>r;v1hW z?T90=LaA~qFyK(}mjDDuDXDUap;l&C0Ost7Rdq@y1A`0rQAtHFB9q!j(R7p>3a|Xd z;Kenx&8~!~m#8!6)3~BF6|phUde@O2GTblVfV7#KmCR-v3H!$U8xqhnkUB%U?5E ztkV_%tC)7j$TWaCz?|+FFEb5*PPbW#2a76g%U>fGw>yf1qZwYyU$=0}JjYZ)oWBKw zv5uYOKI{;lY17lTg)kE`-XmI5@uNWUc!XXMn9R!*6tYfy3L6q;V8waL&8kC?i!B6H zkHGC>U(qnuWOBKO4-r`hHQWzaCjtaiN<@9bUi=nHAyB?x)Kgbpl&UK`dt>n8aHje^ zr`M@;tiAxcUym6rL}jhnbpGWHj1=BkCw^opPJlH9e>k6d>`967T#f^?0bM^5jlOkV z19{CmVcT0BPH=}G5ZKJ-*$A`G@&fqTaoH)Scw<-#;;!$NSupOec=PAgI>nvkl8%S3 zQ^0$F+Rs)%Hx-`gDZDIrRqC4T_HLjZ^n!DBwY9r@+lS%@pie%Y84R`iPt{My79k}S zz;>zUp&h_;UI>OSU-4hQPk#iT8~PqJmBHKjz~Bug+fOlDP)kHl$CV)P82{;nLboiC z9bw5qU!)_;<{5x3Kmdo0@Mx$2 zc3HrIS%e+C@G)laikG=XY?v=(Dk{J3-FPeF8jvL_6-Vqvbj@ChiMQ2R%Za8eEG^Dq zNeeXC>HG?U5t5Ov=tr`^c8vSVsV;=0D#2cif+}dy+;}t4IV{%4KNm&QSq5k;t$6h` zS`;sCy);1&`xGe=whpj-YN3vHo!OtEn3#S&ba&5k26u#~MmN_L5ym;FEO2b_3wTlL zPiKW0*lJ&n0i=!rpan=5-$A*E-8!fIV!Hlf1;|TN?eWKrKi&q!(RU`)Twy~w%r4Pl zS&fT0gp~rtoCY`&^nyej^?!g{TQ{d&kY@nkRtk{;`YhW*HLE0@J-nRIAB~667D4|4 z^zEjyeu+$c%U*HKyImC|qolSE9%EwFSB$IxYGzGFHd?FQ7|C_aNTkV7jjKz+pQNXb zLb0TStM~)jCge31pV%yY)dO}8nVJ=$Me~=N5V=4lRgjc@{b&r7Cys-rF zjD@3!V-ow4E*+p6f)>=nSR>hsw>Be%Owv~IcZb{a+`E&xnabjVZ<~=x#Kpu zU?h)VBr-ed(zjDH!AG;c5YWnkuT$T?4`0CmVC6;M)0Dh^hCs3lO$$@b3W6zo4%yK>fs4n&@nvYsK4MbY0NaLJ$4}NkFF4LQDbT2}V z=9S}iY8jwF_#sP$ToCOu!Q+O9Xf&H~KH9mS<&NTrS{I&f2*s@fjxn4=DNz|whV*C%@VgK|2_OaDGCK>|x6|SOV zDpo>r4-5eNJv-CizVnU!zk79_nCM>yDTaE1j$)IHU)GZW9$eAE~g=m-t3)WTRWMtVuol} zqJ9B|64K)aGoIs(tAljdd;=g@J~rqN*x(GUqZwJz2J;?g;Dp15?W<%W1?N}uh6#3c zu3>>%;Q$wdyND@D-i?Skda#h*X^slo$oW~jP<$-DE~MNPPkV0k=sq!0ydCDw-|Rrk z+FRvqUzq^BtcywX?@x1<*%LqYLwRk>cW+U`3(Vm6^(U5Dp*?#AmX!w*RBM7*uAuJh zwM$*rBP~eZTO~|<`WK#&DT@_(8X)M@|k}Obe)#M^_nTHMO=7 zPz_MMu=fj+o_IR6YkxN%9n)7mwZ$pu<62dOFPpX!gZ z>A+TJh*FLuGWy*n3_iXrPy%2-ib*wJXn|f(-0Z$1D^E5gNYnKFNa6lb zG>`h&n)cZ(JDLpZVKyZ6@bst1!tJ#spL>LwOMn$_kc&1*)+8VDslPvOmyYYlBibLP ztQbjew9v7_BRbVq;Ui@P98hN~-?j7Y6Fk zOX17z-?}f5Ru7`=6`70+%zhW4vfs%>MdjJi ze*d4SPyM|?<`!slvOtn;fAPe7%H@=a7&thc$&RC!@Rw^-JJ&kbiYFl6YBugAE?)2T zv&nn#@K4Z(hw=6Q9rVfB%qEmyiV$;%a1Iv!HzRSytAo-!mX@=S)*IG^USgXe#btFm7r-Xv&XlNfI54f}yb4WWLwS z3LuLizwuIY5?_=9O!741B7w*HQb8@ko#0kI;*EbeAVAWZW43z3n6%WKdOkFQU8L$3 zEbdJZdYhuDaC1OAv@{Ld%q>3zeFc8z5d+q2TMdZr!4=UR33~Vo!=4+32_MoOQ~_oV zh82N?b_Zp52n)joWc`?_{}U0?&2Lfv`#3NiAp*yH*$3J`a5l_vC1-H4SS601Hs`Ve zaLI}?n=ymd-|wt|gvsty9zkheTKIp*Z<_&juhKZv-wo1F?{@kTkfbUt``0WB#e)$!)tYk-9^ZSPp3DYM%KK zpHFw6FS;Mj2zJ6NHM}2Uk@VY#T5cH-aF(-6a*5$?wmG*iW>2u7d8mQ%FrMAuwK_4` z`1KF4TWq=nZ?QU*g)D$LoE7roK6*RMZ&P=o>nOh zpD!ukA!;c=;JEm>FyJ($m+~ie*TKS6jx%irw&J+_smPhn9uBiWxvtZi=;4-(dJ!7j z5ee`+aQgAv-*{$m_W}oA^uV1gzFV;OXasz^J|8u^M7E~;>x#qaH8RfvyxJ{;qM{`gKpYj?EF zBPx_a1#6&;WsNQZm>=PBGi{*iMXc}7iV({0vQD_U2hMn#$1h~bwV^9p#XRlSOxk1) zQH_g?mc_FEmIivt;I|UR6uG%x=DMLwuzYBvk&|s((*wHJAWg2;Z?k{p`WGTpwaI}Q zqrNQSXqn5nd=GC&yLC;QnL)Hn8*z8WO-_ZGWeXZnzjB5hjl~=a3s1^wtr{_*qDCnm zkR7~bCB@knJ-eXI8%s#)4f28O8hlA`+6gRKUd`mw6*z6JBn@r=_9QYu5!-AcxMDpT zF9!y`>Id=Z%as1nNUd58Z$08f?*162)dEA#a=6KKIt{~rIV#n40wZlEl$sN=suRXz zwl8|o^K<^%iV^}(7Qx$glRb*gtj0U*bO_8IBO8TA@PPYAcA5yeE{ioLRP3!h^LQG#(?<3 z2>Bb;SddpJB0X=hm6%m-t*%5RN`r%9ZNm&=+{vqt@t&bI($yGH=oc1`=d%Z|WSW*I z#u1#Ls8aP*aTZGS1?MeaLW+tJuRJJV&lH%t5mRyKJv5S3WHL_*FrDfDcbT|a`FIiPJ>}Wh_-7==CMmy_F#uG`^ zGYKb9?`A>|(z*J8y2fhf4wEW+w=<;xs({kRMIsxFoALZhtgAagpa>Xh;J5p{>V=8&R7e=@S2N)pYF8&ebsF)qYR2X5nT6U z4bgP%C9zB3nkz64@oEg9Dm9V_j67G)UuY;d6n%Ml&&-0%MRDrPD4FQDg&blYl7<8r znwCK1gICO#XU@nrMKW|76X9U2#IQb^e3l66+Q8-I7kBWq&>M5sTJ?dz1W9feL2!!MPmK{vO@_*RVDspRp(p0Y=ImBYUeI?s(OI-xypQP`M3B4 z*nqM6TK6PBxWWwNCUR@+lf8KdGCra69*Fv;?U&Paa7q4Jcn?u4!V<+oUX>v$Vl#zu z!h`(=B<0dV?XS)?$ivC%4P<|^;ABq^->ZenwNWL$DLwc*Y?R$=Egdj;o38CLu&s;| z@k*ox+k545!k2f-GD?E(uo?@T{;V#QRsyD<;oUNY0pE{Ru`L16;|Q&=OkS=RID@P{ z&={++N-0jep9VMPN_&9_dlYcx^7lTWo$WDP^k2{g&b<)8$~Zvao@jEyC`d1lP{&b! zm(ajm41od$xKX&IM6-C%N~%nI?vGoBtQ)GxUDwaPc7ZFvd_-inE;7O%_*nMba zD^DlJHIzQ!bk6W-SbBY)o3oM6-L&~}8X~?)$ke|j3-V-m6g^5=#6vYt#~4jCPYd}o z4O;#2kvD0SqU6fc^jR6-5{%Ubv9O4(&+5u-{zgQ|&dDMmQD{Aa=Sy39ix&I(gJSWK z8db~)XDSX$G5Z_qBsI~9UR0|ps5jK!-$1RHRp)pE1u{siNn<;0|Jf}y8 zNagF@&)Dm8T9H7h!bVJr^aNto#hR%ztBT6TGXsIOYoue(ZPV<>mC# z^Rtex*psQ4r`XQ7&css>w%E_y$wCGC|Cu{0dU@%D=3QMqn+^#VqZfKOyL}!vm$rK= z2FMD*w?dc-P6B7~8tz^Wb7$Vx{tqlq$_+PEUMr*2|h*(s$mJBHc^$^Rg_X%PfA=gd{DdcO`U9ffTSXFoO zyGOq!i?D0)`bC%{v~10F%tKkPqZ*yzJo@O+Xu2sAs94;ccRti{M8;7HW#dh6G!N;M zx6sR-$%mtq~=LfJied{ zSjU}pTKt~n{>hX(xA&BX>6U;t;Lh}Pd_vLTRr6@E13^fI3__K6FY&nlbn1{(cBe!N zq$g9>RKJLfJ`|=gipCwRdp!Oygyl9*%1&_lmipdI($sf~_fqj_D}IuLFf{*34o*`4 zBnO+Sb{^`j04Xu8gnmnJSC_TA{ZvRPY>yQYI0DEhxk_tm;`koN)E??|E_n0ok3O4Z z27dhXn2Tt%tDs}INBg|NLW4DemSuypNxZ#q@PwmV&J^{bE_$D{9jI`4-jiu?!_%os zoXLNc7kM@vm%Vh#HLI)|%JG(mb&1Y0QCwYA8q6}Act;5_8qmJJzHw$m&x^hzP2^tV zbIfL(Fk}G-cYtMigLast-+%yHHju!2jXs2NwCH?QewMG$#RqOP9<9jv!0bCWmET@u z4b{J6P2-tyd#;QgFYEzKI(kO{I=9agR86b75^HXt&$cvMm1^L#Q(I9CQe9VxByNqTQgrc{reD6`^jV;S0Q zHGYy7P>B0NKwd{FPk6l@{Lz$ecs5@|3R~?5%C@TfTo4%PQ_4*;G$#jB3zO`J4sUeAoQu3mpSPZ1oe z;7;%J{+^%hSKCEf{wnSAVib(sw3dwfD|t5;ruKZrhzb;>of#9gBDUp0Rf`Fm64h45IhXjn(LwvKilVx`C(e zzOB8(_EaX5tA;j+4`+Ag#?|!D2A^C%iAvp+GbKN%IK@Ib-8%$KpJ#muTHN9m3~3gV z<5vouSMht_RqPeECwQCf#rOB>d;Q^vJ&iU-lW_7wDm8an_xAc={8fRxjD6-;Y9z*2BvAd9|0 zWwiEmK97z3mXlsu;yYdOW54b?(_qL~l1Q$0R!{eD&T83ydtgZ(i-(K1k!-MC?U)LY z`!oaQ#?EWsOE~X+OhnJ{k;hDmHJLH=R6YVYNn;{~C_GpztT7vmGG-twsY0er|1Qdd3f{AH8BnkBLMF1{_rx&264NgE^_HmwwQ;b{_N)v%GjS2(-HfT> z2`m;aB1NJszAI#u1U@B!u>8-^%3%3W!Yg!dJT)+q3lfK7^-TT&3nLu|)apcxMN7PH zG!31^e~!3)93FnC+)gDWqp9Jc?vT~H(&i(v2BMrO=c6=CCPSqP7s&1=K8gb6_h9OW zc7I&QwmD!Y^fi8`W)4Zl+qm~(*{BzS{pnFcJW3ls`uL%@zwTEk z+5KW;gwI%U>154sxr3~n#C)b))Yg0+L@+z@W~HrMedgxHfbjwb<0V&!NhK;d7GiJn ziN2_=c5yn`UeBV2TXRYcUvWSqBK@w3o#-zd=fJrG&UW?DJMSHaCSYqV-&s9HXCK5p zK`XqX_7I_FS&`?X(>Pj0lDveBA}jZLAWu@5{g$)Z?h@EOl!&8aqsxN?4hOPhGePqv zIJ{R@u`xSjPQ*ceQZQn5ODanZfRiYf$taP~wBctZhh1LF!0^x8=@_lVHDJJ4G1{QXgEZg2~t2mK$u~wgTo_KR^QMWT1G+|#)k?k9p_BnT;Fkz z@g+{i=-5OORwZg)oHhCQ6yo012#W?hbI~MWZ!F2lDcrRFY&z!783LOO1*$5|Pk8@f zDRuqk+ST%A7vj?~Ya=|PNxf6i8)?N=Y}MuaY6_0Y8u|nI1O0~MgcR4rVW)mhm@~}P z(p-1$6G+{{IiuW{6PRG?V&~HoQ^svuI0?Bq`vOnJ`S-n+4XUStaIM2=g`n%CUeX3c zDU7;@Lb2q#g?wVwNWx_a;ZWbN_<61R)yzL<-sTnaca@$NnXE&m1DPD0IAS_nMa#vE z=yP<~iq{>O>bFFvV=+js$|cW*V5E&{9h$|kg6eZrk2y5S*h|-1z?!O=>YW12z$^+? z;+TeYE$O1R7A13*T$C>BDfF~dTqoj+6%S#ewquM5ieN&u>qB+}kufntJ$}z(W>>Ch zSg`t!vCbhW;~885!wj`72JVPP7EWeY;;zZ@(+O-ILkYui0^Eqoc9Q0wv7R}gurgdW zvzvIla`rA@9wi2z##Hx5&CD6U4QLZN5{`Ny3tdT}>Tc4njJ2}&ga zW?Csh$_C;~OY@NOkt3DYPzXxOS9bP;9oOdMfQT2z41)zMAq5icH8P?NB%CtRIl+@? zN1>58w^(>a3kSz_H0`1QzKP1d%869 zR&{oSkZ5(whXT>$j{Pt@4`xx6LUd4n3pW%^ow+sQgzaMHPhJ&x{_Y(8NIA`$b9Yla z>MmVhWic}7z%=;4D?oPmJhTs(n&c%M*dYljwym&oKZ!s<-2f;=mJHa)8`aWJ)lFDw zf6f~=Glc3(JH5HijUib!Jn+O&rhNyDqH4hGfH7t)M^5hf)QhF_oF?ogN3I7)phO9? z{@b3vWlGZloR5va;iVBK-tiVF=UsW3h0!Y0mp0%le_4MLy6pR&AhS;ZHl6#QAd@8I zraB1rl&jR#Pi${sZ%1bKuSVkbaYt1|@BC^fiaZn>fv4(r^saf=GAHkzm4hkdpv2Ux z0WV+{?*OA5-byb70*$=NzCnek3tJF|XvRedN|Mda{C24BX zI+#h1_R{^b6j_mR$CiYYT8`qDo(|U+iC>#{WIz;y2U4%YrT>*K7Idq& zsK-QCmSVnM3I``tNWlwX^j=09q}Nd8Wv2BT^Y2&_(Se|*EPp7nEKw{!UVa<`SYf@q z7Xv_+=#1!isL^2za<+sydD-6!Ngkv@;m5vEbi$Z?LJw#=dXGsU3Ju2^QVrMM&Axh} zmq9NH0rDsTdw}AM#=QU;F8V=`H*T0KZ35&fKV#ER$n6IIa}--334p*$_f@;Rp700i=2I@IL$_2r ztx`P1eJUXYnFc=uZ0O%A{OE0tMLiyAMD3>>75GcEBTg5TVsn2_=HU`=pPXutt^kj< z7~Hlbb%M%I9a{>hDDIai@CFVrStKH)f+tA$pJ-36yx=I5t|xN{q&cdF#FAZ(q`_8G z4_|VjUH%HQld~-6z_|0KK-+-j+_SwGq{obN1TU;GA<^N~xKG`yRT6k6`@V9*94%>M zaPw*)c3i+w>Pm6ZUX%?zNa$z&MV5uU$4H;C2;WIpmG6*{1z*$1XHGXVKlW1%kL3kk z1a=U-pfuh1TLOHlbi*fag>!C8abscKQOimTaJRIbEJo6)HNG)Ov~8b8wVd$YGJ>f5 zNMOj}6@aX<6-ookez>x|BT4qrUnj3Rg$D;`tPxxn=T?#xjk7TZ178btUI(WKH)YIn zTt{;d5fC4MUeAGEKetd5Edr-xG&f7bMOo1w8PML!cV!ZI8RYTgV8^-a%1J!|xQ}wO z8`J3x(XzMaSJz(5O8J z#l+8-!_8i_8fBisw^?AyDTBLgFY}|U1lVd$veANbTo%0SWLCYT7xq-(so{UjQ+=7c z6AExB^0}38WSM9@8E38Hdo7&tT2Rhtm|lXTo7L-BypHZ>6yTGMHe_pBXr>(Rg3CE~ zb1&Ad!+o}V?Ub|bmnUU{s_y#sYSH?(X@2r=YF7e0-QT92y_FZrn4^a}wU!wyjs)n|UH$ z`TAdUy<==I@fx;Ux2v|>Rok|0+jhHZ+qSKLZQEV7ZQI6bPxpRzPIBJle43fee3@jD znYn)VeLeQI3v*=bDB_iIP6&MM*um`9x4*4#UseR7dHS>B8VxayWK^;bEue;BQrPxx zI+b6w`Kp-06HvB0mC3b?_5SEM7(c7ac{6x5pd+2mgHDCCgmowIIz`p^Qu2aVmZ7o_ zL-9PlZZVEEAqPon_Rt#-iWePuvvUDTE>bpf#^=Gu$;=hdP8!6wN&f!6rOwb6eFgP> za!k9O|93x9g5r_k)H$isUDj^wYu0uJ=frk(e$wKR?V971w!5(POcnspLENG`O`gc( zhRi<8WQXVZ$948h?(fU$oQBfx(3_PFyl%QsEhOJ5)?utD@05s>`j8S;u08w-dNh6( z%LwQkhAWaQkKACp4z}+R|Es=v7$YE`dUXZibq{hu*AMWTk_C}(NA6UerCiZ}UtzS%dRW6SbmPIpU1{4JGf&KTQps!Eqbystw!`^64_UA7|FWZf z(k|8=z)L3rq8ywp~=a3&fDQGBHEbT`J2FJ;i%xz%wre zy4}p-w%_~q&hk3rArtMDefQ!t8F#n;5Yb(m7$=jxWWGYtb$%)J=O@ih@hMEWQaqe4 zZ1SsTd@m#fieaAf|{jaX|9}CX2KENHlZ@zy}(R$Mu$n4 z(*U2Mr=<1ALn5APukRG4+8F^fOHR{IFwX)N>uFO{m1WLLjD6JeSgG3NN0?()Q7~Sj zHh*~;Er&LNh<9U}75aLnA8G6E%XYTPA);XF(e?}Lc`N6HY^s{KhUe#H(1+WM#(*Nn zghIvk&XgWM5f&gR?DSSzidnk zW25YsTT>6``r5h&IQ|-@ZS9RsT#J6pvUnDER&7;+AXi2n_$r9dgy)e54EsJ0`MZxK z|M!dEcb?n#1C+=WuL9C66>e>;p00;YL+I zU|A1PD?LP=XEoRBYG6ypM`qaUjm@@GLDlgI)%68i8N9Hy?lR_t z$85B`UZ3b>20R^e-@5Rv{UT2m5QPW?{OV!HZ{`=nY{Ng|gpjT{eKI={1Y=*sL9*0u z(pumG)ms9K=$ivClz9#VM53W47qzGy3RH>})o^HjPuY?}s89#Fps31SLfDX3k>~U> zm+|lUef=5g6qy9SpID)=pdmTD@Sg!6!siOw?5PFSenwR`eFQ4nZIa`G<~^mzxbud9 zmut}4+EWOqD%I8U=;QJ~f?S%KuPd1VAI3il%a`t*r-xKfJfqJS&mdPZF>wKq!_LWw zfrrU&dTjKDa1c01M)~9;*=>qV{+1nYMw2~dD>mUHFbq;^e9K>UnCtRb2qp-N$69@w zF9NN-Zgf}FGv%&s3cmSze!jcvS~PARQXZvxwJU;%pmc5&4n6XI6&v7*ktlWb>vu%X z<4o8e1&eUHB7k|0q&Ste94QSQ?}cJ6*@?%IQ*8)V?euocQ#f1nspS7bhZs^59sZ;+BWM@JP~7{YFwCniSBE9nMf*R zqmZ2{=Q={eF1}v8nlb?(5?O@fjq-|@lL&(h6jAu^4;b<56lxxOBjCj1JE}W@28K=h znCKRNH2G8JGplB{V4k<~$TV3jQLS!|wZXYbIz}*4fKJ$IM;cVS&N@^1K6@@a9Hd{b zTyW`d14lyq&}h65CyK91(haD-4dS9(r&vNlLl? z^hJh|a*{vA|J7tC$H~ZtKDeKd@xd+73P&J&%Fm|DV_+|HUHzQB4y5QgoC3cHz~1mi zx8^G8P`%TKjT|;nnvCpsE}XIy$dJ#v1=-cd1_QHB6&Q{M#!`=3EuT%XN;1*P@D5W2 zHg#pIdp0ysB{EYNem-ZNQkVrkGQg6@zw9Lb=DWSV`>Q6atIH~7Bmq9LVJCh;B{3FZ z6U+r_qNpi7dTeQ1Z${Kxzm#bL&R(obaD|kyH>&qg+UED9ABrFXEYIrw7xua;-ii-tX}p3( zVgWEI^v3BZw8Id2;`)Q5_a;rU3}g`lqz0Am`y&>Jr4^$*9xc<#zF;t@x?M@t!t@4@ zKC_C5TMam4I*X#aF3@bk9gHG3jurK)v? z*(xQS9!)sW2eqb3eU%^DJ$Wu1v5YdOA{z!5Jyf!>N*PuDsHHm=Ibs=l8mCM_SX;uW zu(d|@QJ>5poQu~kBCrT=o#Jb*s0@RCtrji^bXbcYNl;9jRU>MtuazavAMl>6Sz<@R zF(=+-NWNn0DkQ36Qc~faNnWBJ@G;O4bMA&GcG;X7Tq&|ftj!9pGryr4#waqQluYdj zk;yc!Uj;{<5$^CgICvGh`5_q^O(qvo^Kk;^tWY|KBJjSPAFUzk1i(GNWD)raUavu# zDA~L^l%61Ecj8NH*V(u%GjW@GT*2i`T`y$XrCa2RZ)3I-`4znB&y)Xx37+GCrU>tt zN%2VOX>EmW%^xd1)=ZiKAp3Wt9qkaIK4ZKYMbm6 z`{ya``zQJgYxpWcsmO{d`lEOPnWDOISjigCwVt$kXe8r>H)9z3I_<^rRS+evZUaWK z#oLOM0!44|{;YoOt@Y`^1#ZCUlj6AzDUGolp6vwPTEU&gDg{*(5pdQHAktFIE6KbL zs8~4*gtc`SoPy+dti?>%Sck#aS=Nw5BqYtF_<0MyH{3$uRx!w?t_3D*zS$A*jn%0#yow)TR6>KvZ^HE75V2yChy@z<0AN-59qiy=|?>X zZatKB34fp}UCM%c4-}v^|4(@sxhpGu{5ye|hO6jW0iI_QNcB>h{C9e`4-nk!IPZL( z-1t;`N{2v~8<_zF{3W2Or9n!6VK!iAeGjFQ0I3$Z1pnoMX;vxj_i>8*ObvM}(2EnA z#%*gH=(pJ2QE*kGsJE++$3-?+4>9}BSeEk1Uv*DggvmZHf;9fN6~}C*jE&qdDpacY z5MDoYBkz`%$E6eh5_Y?%u<+Idj>Y_|rp*bA%Y}vv zQL*yW6Zwg^I!GSHnC#>?WPcd`QF7vGme5PGMcGdYDXg1K8pao|Nh+o+(b_vh=eOx_8_zIIMb|iMzFomBF#ID#s{hq-1dz zrLNS^I|jLS#?+hFc_(4&qNYEs3T!@0i-!`7yVj(|1Z6>G7o;t*Ez><=!ZHYjm+&JY zu1aOO(O5QpB(Y?2XXI@ogku&QvY32TN+3+T08(&dU`2`Boh$YIookQTOj?G76qIo2 z0aX;QAtY=TJ2Lh;YXeSfN0;4?XS5{%_CuQe#5L^=Ow6vi?mMv;4q>y~N(5h*;pl{G zADHexGz{=vuuN|8?Lm`xCU#%dk^%EaSRMG1n~BP_SQft41A+{?eJ6E$ioV)Oc5ON$ z*$LmJb0+2CWZjX$b@i8*HVJDgd@|HFg_#UGlQi6E8b7i=FJ-DmyahrW}ZSfKkWw_STwVi(Ef{zn`%NWWN+-41}T`0bYM+ zbJOoJz8@$aBj@B%u+90W5`5dul@el`{*Pj4ep;1AFMQ#fF5);Z<$*@~oIv@+$gFUR zxpTg>^fJX$0W7v=m}XC-*xtOTbTuSx)nb7aB4wN9sbPpM`+T>>u4wYM(rFFjSkD zXKKJ>1vn(LXwVJ^)qq<+R@H>potIg_6<9XY-IRxVs`FtN%{A6^sPnFsvj#6K)D($Q zJ26+^tP5OFuF^8F@J7f&+K=4DXBH`l>BSRj7<0%rdTsrh72835Z2n`9_88eI?>D;W zpS|9BT%!qkJN_|M-WR+<8hbPAy}%WDvhB5Uu=q818WDS`$KXXoY1FP@ibsUoL1Lty zJlal3IsWh|k%W!akgv!)qy(RE6bb_nM51P$k>2@3)lGzxcGxW`D9@P{1}qp%CDg@B^k0TLHU5Qy29MFo0D> zN0YTzS{q}y^cjcN!Rm4~w^>`_Lg$^QIOoj8lncu>mh2&tIUM+nerS#q$24E#exsmV z=1xD$T$rp8#vK;y;Rd#QZm*W}j zBCsqR5uUqKHeu@J@D%~7kZP(X7z^3Z)E0w(O5uE*?7i7t=UWX&ESI$%($K66xk(<1 zUT<{1?U4RUSz`}MJ({rG>z+hu9*~Riy{uE;ndaKQJobQsbG$|ye5l>rv{q_PH2i|# zM3zTztQVk#tS@esmy(`1AJu4YgIJx6aClf7b-uBA(iDDu(f7CzQv*I?OvBjAxIZ~> ztN9y=aPYU}$2COltFrncK`+o{);5}(!@|OrM!}YsEE)8@WcqcRi{1`8SrbFSE}FZP z*1Yx@%zz$rEo}0ia77D z?mePA+DBe62djdpqA5%nM1H~b#Mz@TLWu@v*=wme*scjg2S1dI;J4d}oEnSgk=~BR zF+3FC6Fm}x(XC1dhf9R(h4h&3I=M_82Yr%7)*p2y<5zEh#DbA7(&@BgGZ-)92)kqtIAJG_6R1 zvnxkuf`h0bOG}dX@3Cw(kJ=muw8DMB-6lXoBh&o#Pst?6J?xwaEekBFz?L~}j29Sl zKxDzo!tgVbOqaXC*&pW2L%r^`Ie0%&Hgr0fM)b<$q`1f@_$kksm5jME)1x3Uc47Xw zruxyXiduVov@Xjq$h$_pIBX9HWQiZXv*$MQc>V2co&=?I6))w?k##4DIy7PhkffS% zy^^|oCPMcqPv;_ROUAk>0k7Y4KJ|-_jjADO8UKaPmD+qMV}U6-xCrW18q_Zb;{onkqg zs$wLUnlQSxT)wrWl1aP;`rch*Ib2iG=PWfhxwSu^hP>f<-aSI~&xAhv*m2D5I>)G5dC(4=J55$04+Qqla@k*g+4Cr4P!knM2}VkS_qi7r_2GBOm!s1<6aSjl2yK<22=B1_=Dp_+*%M z`I7kz>Gfr!iWCg%@}PC)EIsL?x@c*%9WqY`ZXk>GHIDW5!5Ni?BfqUC;^KL@)?SJ%1ygGLlZqJBCZN0M%#t>#{^WXFFJITO13MJE*SFI) z`;NNB3&^nu(+%p6J|Y=jOD9&2?- z{7OVCoZDH$ZR{MGPIYJiUCnQMoP+($yBbyQ(wn8GNb%a2HMZMm>%X13KccHzrF?nftwxSasB96`pHwW$p}1 z(%C9BNP(y{z>9zyJT2$sqO zw&fJW|8zjsMf56j6~*u9{`^Y5M|+AMsSpmM7a-ka<}HeMD0GNGX%q1j!`SfZ-@!rk zM)E02KckFagDbiG%2lo^1EM*iiGnqt+dDtDnJHT#_Zd4oUUfpguX<6b)Ra4g!k=*- zm^oFn0X#HHhK-;ET4BF3$~;Pj*WFz6uv^+({Q=k5pl0}I4n7&2G#MNT*GWURth8^i zh^Vav2Ag3mE!C@7WJk$pG4!Y{MS{)nQ)q-VHak>O+6k<0&u(L}PvnEq!DiG+L(WK@ z+9(++Vfz3t4od*OY)L-RB+u5V-7+Sc}BSI3QT zZ`4*P#_*N!M^Us0|NrpD4c=K3#JD(h@mg9Eia8_Ap%vbQapSFsodX^*G_<4f z2_s+q!P$RpS2F*xT_yf)SV7;N#vu<~K^J#>UQ7^^-$Y7uz1dC0DiMPIv0Y8ujfLPZ zf}X7Fxf`r}I2n4?mCnkT%M7PEQ)9D#&+krhhxsTs7a{r3>hs^0m*BAUF zx|*8S{kGxK4F>YRv$nS5H}WgNz&%ihkJ~Q1-g9fqESS6GVRshuAV-yXJe zcAe@Thu^0uvUn%5*Umf6bR-K6y2WlS1Qj z_I_?%G4F8#VQJmCe=SGQ=L0+4V+xH1*b9#;x_|l9L8;=q-Kc8iwZ&1%bHBva-hLK% zIpI+A_?^E~1@)@nL<2ZH`@nYaxRZUJD-S-Ck1$?oIHCStVNUEv z%7WI04Xr@cp@K8wX*;8zS?mVmOGeHHuTx!+BbD7??%^VG#-4(&xBB%{WBoZW@$WA{ z%~j5Zo18oL>y7Tt^Bx8?frFN!f9OIah{5mvQbZu%dS2!x$!2p;Z)lVr^AG+UhIMf6 z2VK~0SJV+D5A}kbf1qd(oC=srUjYLQ@EC>;i0-*~_#AG6ha(9Cbrtl~u#N8x19daP zZhDMq<7Z zdL(s6U=Eg9Z27;j6k?;T@Wqx2&BRIz(@i|kyaWQp$ORd^B9V)xGOpHLuh^cO)>r@G z0-m#@Z%80&uihIEfCK{d(k|zE!=|Y$a&y59y+NO4#w-*%$*&8_KWG3oLV>#f>tv|reQ63X7vxa=G<29%+7Ht>m;A>)K^X57RlW5lQQ^>$!{*4 z-0pk$qJDOmt$%h#OJA3AfS_-dVP?%t|2RV0G|RzHZDjM6U|AS)eDI0OoksaoO4;Ua zC_W+vGbh>Vg+8MWMlTm?2^1qU)3ZbqGD^CtZHM*iP`y{Otq5|D$q}KSk_8lUK{2Hi zesWJP+Y(m>uHPhzb*0ku7s_)&MCKG@3G2O2^yT+}j5{_S%m*e7YD8f!IW5M?E zB>ovrZ4N5_Hd_oTw#_}YA{xd7g!?zEX|QKhBLtA2$p4f>+P1ru<(JIkSJciaF4_^i zP8cM+EF_CVK0c^hzPAE z0+;L>M=6C@VY8At$OTU)#8we*a>g5*L#UWLyRq;{COQ+PuvPZ6pJUk+886M4rM$@4 z2{zwWM<7HVTZ?hx+b5UOXu7?;R{c9nb~c<=ysR`|NpqCiYF`a4!3bF^(E)?`ND#`h zro;=6b-r6&3S-_v?Sg6zgrqZKYWF}#3tdD^{jz(*N`dK88VfFkG{42@x2DmRWOaWEgq}}$3(TfIGB%DQ}1Y(cW zbK}9_2m%5De_IUzT92vqZC@`+8^dYzTsRR2?QE8bzgHbllIklI___}p{b()`tKi1~ zZa#j%apKav-g~RtC6|gE?obtrcD94HO^BV-&=U~-Uy5uR+B z;AGd&Oy8M%y(MXsVoGUL;x2CEWLz-Hm)A@Y<+{Egfd9iL!(dy!J*s!x5{Z&F`{|XOG?YKa9inTT+MW9*UCI z!?LHtS6bX9tSM%%=&be+nng?fXlx?i(d z=O5Cv7rZD*sRq?~Q)#s89XDv0o`@v?j@jV2~tkgDH+ zI5JLkC?Ll&Rw7qEmleiVb4*3;v;`Lbx1=j6GJo9;(ZF@l{pngX&pfd`o08{&AEy?l z#nhB|U%2T415LrCa!#4wR$a7h4+owMyKw=VPwM}(49PmFWevu9w~U0^gpQ4dp59(X zO<#fD>e;KM6oj5TizU#g<#$axJKVZ&uW+pjqbtQCRP=HD_{#*1JnceBku-bQ6oK-~ z;AoTg#;_lYHAHZMoV48l3$o;rUiA^DDK>ugL>4ySFG{r42>HqmuX0Jw&I!l~k-`V-w0?qNqO}OMGkF6F|Q??)Vsu*&Bx# zFfWdCh-swO{e^uZG;q&M8pbjiDM{Ks>t)kEu6X%w58`kOmY z(YjsjpgGc2&6p^4JAp=bU5v);_^`NyeuB4_g2JV$Ux%F!p^%g%dADq%F43mGw%o%yLec~BI1zf-<%*PU3lCd{3KO#--C0whJ*mZ}G!&}Bb-rdvCC-$U z+h)s-i8y`|OKxhKc{q^)v=2E$&U2$jaAWLHZ?^reII#5BMLD72#A&(d2PLW8w*Ne0 z1~U4hF5<|lVYK~q%*}`#e(;PZ%yom)OYvOd?;7`$cekijsVp*Nn*|Ai)LdK|qwT?X zsmn7>23>)1h41e!hkemgar6oni?swa9qkrYP*C4iF}{pwZ`$8nS*Xjh0?vh}k{v?# zn4B%5O3gz88Lh|+y8!dfNb|siN~&yBgf0u8FOz<%PxSQM;;x>QCgke#8N~JH*C8WG zYax)kWM)Fe7I3kH!z%PGPUV;NoaIAK8e3r*j0AEbQM`;5Lcs%;TOM*sMv%X-cnB;^ z*1?Wae|Wi$Qi|mWkCujH2#;d(4${N7jsplqgdUHK?1D-6-qD zCfbvbD^Yrs2!EDuO_rrl6w60utFpyNBZ;F;F0h-Gl?ha({Od6sD5Vvxex*IYhAfV> z%9%P=MzKT4YSqN$Lg?s&f~xgX&9!7$V_0pNePu>2PRHK{IEJKhS`1>2Dap)?y(*LF zX_gvS*{umoV?h*E{fbHxWc`-2B2}0_;mZ6@6r(LjNJiN|bWV~I%8K8n@FOjF+jgDn z=LZYI9lKd(vKBDGE(XR!Sr+6>9om49ijbc$CZ<3fn|`obP*TW1b7fPzxdI1gsvk|8 zuu>?lN2bkgvpVl z=zoJ*MhqB8Hs7r)t^PHw*4C0sLl#eeuKUT=gKo{>zKr3%zOWG=!Khiy2I){8>ZgLZ z=!2EVZJCyj+|4RacWB)?}qq1+ebGYWTwz=3qEtY?Xh|qtCi2sr+@2rGIhZn2I zF}f-z1uuBgN@O9F${-AVY`hFEV{meoiWpcaz84@D%?#7db8e(10Dxh5=?=Z>T4I?B zNOQ5t`8X5B=FSD5hi8c9vFgHUN&ue637(Kr2jxIXDeMr)D!X4~JZ5R!W;jlnPqa1G zqr_fo=c#>1in z-at{HOkTtO`hg(;-1nfX;|b)fv)mq~b>=`m>x=DQwSC3-dKKp1GZYn^uZfj4M@ElCCS`t#HUL`^9bEe7>e zWQ-uOsrmUG|Fgzq4HgpuT2gel3`OZ!QR9&xTr!_8*^=zeV%NqCs)EgWlZu=-64O^A zS|X@if07;#VTwIfgqiHYIZHqfsU@o|pS5pVqiq>Hl{+Ow9?77A1w1l}NV>K$_gT*% zuE@sgC*lzt!%D&QH&xc1`ap`tX}gc%VDt0u-vj6qLx-E`-FC9SA-@_o)csBS*d=|8 zo;kzZG(TVRzJK|;)aWum-6}uMs1Kfm_~I94ur~u*HmpbG7U+?WV(vZd$AFZyh+<9%5V>4<$#hgRLUU3V>*{#Wk+;Qtm#JZ3E= z6BU5W+VPk+c7;IrAa(rG@wX)GA;Zq={91GFfC7f~&pLTFeqP}acD-lmh2}9E{**x~ zdIIk)iH7sdd8U`N^DS`jGEs*BI!1@#EI!(c5}yPObWRL%I)or z9SjjRsJjh_JtQ{eJ;MMniTew3#W0qoXvW>ds=t{sgVPJ|Kza5 zwAEdcVO{ytXBZn5`Y2?p5M3*cJu4Zk6q-0;&t9c>9&7&|MgX!xYaaRARq|#9d6aA{0Kb(W* zIT^W>zF_$uV-T?_Bz4?tU2Xd5dL}{A_Rq?W?-mmg6PL-vB5?4!WaSrP8$8jM8l03) zAs(#(C|r-j3^9Y1X7mNDiZqTwa4>!ZAnHE8Tx06hV-KdF|K~YOyDNqYztNxv4m<2*I@+`o6iZ1+9nltR_D8(bL#Y3vdO~P!&{HLbUu>?H2sQZQBOvhIa+6X`9t5mcVN!(f8 z=5gACH6)XV#jan~e0`~yBO}c+CxjJR^cII>@;3+gH!)5 z5M@?$hHP9iiVCxv4z7oi36+{FDI~<&dZjeun*A`x?sR&A0sD^t0*S&otDDU{nr0Ra zf7@l}$~@uvxDFVMQLnmnz341r@)jI*$Zg)OEyYQ(C^`f_m`BB1*1cznPI3+9g3a5B zCtL>13sFvZIk(=&4F&7zvgFn5l=Tl^k9eIVLuX(A&|Vx-Ih#f2*K02PodZLniDC}P z)z&HPHBCoXT4P#vw70%k6ITpSLI}YM$YJ?vO2{L+G*MOyGQ8r{E2d)2+pP&7xkiR0 z#C{8J$CLJ3_gb8EJFNTV>&u-e3Rg4PTMcDfP(AA^%RVRB=A1fl zB-*^xL4kKLpa4npmAH%Mm#unXJ*TOo&u1b1NDgRaD+ITEc1BOTQBA!9b*Uhh#9KXQ zpp-XK{qnG{=*8FF;iQstKI|#{Re8k`Y-*8q#O3ZX+UKT}@<)*6jT05dy%ni#tPN^kJQU zZ;^@%__#Y$6o5Sn>$d)~07K7%7V?A~v;P;aifGbWR9%92(x*aLn>DYHhCQ{KmFWV5 zFb+K_{{T@f7e3@2ERu|BKw%Ehu&QQsZE5;*TuS2x3agjJR3tM!9!iqYWuHB`x}Eg5 z*)Ru~b-iRH9xfl%sGWy%y2pmFL+P=FCKCkLk)Ao7E~qmJ2pyPtwA>?U>y~nxcPSbO zq3LuYu)DeO4?%~c(S*wK77dm2qkA(e%81Rm1qN8VI{B@3H23oxfor#drTD;S(A9fs ziO0H``F_`FFRzE(;2uY~jBpmq8dihH%NB?=>il%yCAyf&|&#P)Hj;36G@mx$seitE4#hJ##K=nWPP8|Y#PA-c%}h64;4m{61Y zBW{IbiSpRrDpSHOl<%d3YaVk_qG&_^O-^u^wY+wEC{>}wy&Q{{?dcMWueIF5>xC!s zL45uC!Vy;Gu9S!sQ>ehoef)`>UkO+AHi}kl8P-6RyUHZP4u4Eh#qRqct4f6UoF0^c z7{Wa|`&;8P+x|uU_z~uU){g9s4|lSXk`e4kzu z5^F1%{X>WIfrE)@!--Ka7ZL-TLuawa8E$65<|+1?m!YhPLQ|KRuFC79k%Vh;K#4uYLrHgK}crFOm<0dO#wn*Y8l_iozTgJM2ebmqYtQlH;@E~(*I@-Jr&fnMKnx?eygalFXS8xER-o4C*$D$*= zTlxh{%n~Nk!^LrM6BiAz@x@AKVZwy?$~dyE4D@6r`4I|7;DA@ff5M)^U`vIfTj&QB*6w#VsWbvotB(oaRVzwYCt4~7|r_kd%Icx!@zb6A* z{HrM5DgEa|1I7g|v>}v=h;!|R*$`nX?`^o31Kd?g!nErVhKh*tY*&R45ddca1{J*q z3?<}n+P~ZcF^$QEdfM50aJWUGEtb_CPJ-(mE994+9vbogmx(|~E?#Hx4kD$5jMDgo zF2?pUN0-5fS7Isj)7$Py0B<|N-!%y-JN7VHQ*(x~X#6@}Q~Vr}lDqGzzn(Lk?$y2^ zcK0;|&TKV{HRtDKzK~zda={DU)kO$brEY8CldlQ_f~9o@q&}Ps#ORW1H7kVG@IRq5 z-}-`G%xksqH=12{bAxJ?ngW)@tGV4*<||yBZHHUoF%O)PI_{Fd^_=M+yee37)cjJ^b?D?hiMd+)0w2AvAO08-0=(j&5Wpmc6#^f~^3ysD@H7Ruq zCo)h=IOlSacN~=lC0RIABt59)BQAo-Pb4Adj6AK^5}KRs`m+vcG|1j$zgGU--i~nT zb2llppRlVD4OjVmOvl*H{G+x6?fTkv$N!|y4&{uGHP}^l-tPAZuiAJV0F(igb-Qna z__mI+ZT6DYkt?%up5KV{R&!n8JX1367q;jPe2u8v#X)Eloqvzhjk?K=Qi7GbOPf5c#%%->U1XK zA9&E}*tQ(r5f9{$eJ2AZ|RJ4DQ^Ty?>a zPHg9yRF7;@u$44u|FlcF0&KJ|OvXC_q#~um7BdTH(SsH)b>y86g>*K_1eCxzR(c0q zAxwQ69-!!7Y-r{Isvua`B{C?UW(Ga$KlPYHg&#LGUEi1!1BDovx;{_+0Fr zz0f-|m7UOEmL<}1*JB#hC&67!$ujRMD8dYQ4t%5Z$qQ)G(i#IwhGKT77*p7Qxp+q- z3Dem!jG1~zwfcbo>W4ZPjWaN_h}&09%+?djm8n&R5?K&@e^}6=WzfI1O~;;D>$UaGG}x@64gMa zXSztZ^P9>TvvU}gfe`oNy;63e6@%)`S{LF<8MaJH5&z7JUxJGsxSoEGOc$7XIH^l{zoJ z{*Ug401Q)U6W-RckNrId> z^nLUmdN=|2y~x!#yLXk-T%kGp%dD`TZ}&|tg!KB+%e=d2ko6uzW0lKX{@Gn3)n1bm zxn>XXC@T#v{v3afv|jw#f4R63ynt>;=4~(x9X{FH4$A1=EMqVJFdKQM_n?EE=?WqS z+{Kc@Ur^UotaWg@0a!d;DsF5=u90Eg23F(`<-1&BwlqRFvtb4M86ZtgZr5EQ-w(Fe zC5>q+v#e)ZXz^{)i{*%|B29`q89ML9xJkS}Jvd&}nc{4minvE5T^HnwdrbwIj^X4o zbk259Ighb_#UdTE8H>#8SbF$$Q}cXTdh=S26%qtw9F+n0p z{0uNNgx6y7{kWcXN-AB(SO3p5V1T|3oeoN#0gC43jTJp|G~AbL*`5r=V&qRpiX4+w zJ`p9=IC9z8S0b47qPe?JX4sVs#cIVz&qxG^xh5SUMqK*ZKr|QJ-&3WL&VG@G_KSJs zTS>`&Q*_n|RYF`ytaImqC47dI5;};s6A;2`4h?)-}7@cmp zNx9Xqcr&3t^?;3H9A$j%x41@e6rDypT|t{DjW_ zmxP&~9{*nwM)%==Ntg@&iRGRgT>1aw;kuJthmGn=a?kB$aRV44g0C2D+ZO^<8UpC^i1JNTWt3b387|eF0l}-n1c~O zFt88Xa=#OfOnW#1VSu{hT^rkcnkiing`$9j`ANt8RPpqcA%W^fh-lAZu9BJxkrKSq zku~r@-ZPmj(D6Ck$KuDg65VIR&5|xVbItYpO{O?>IKaSQzNs``C3I!qX-_AS@)PAq zvnAP5L?CR>fxt|>BUsVMjP>6$`v6_quNf6W14 zu~*3|VwCrP#fV`fc$xRCjV*jq-A=Z`49C8yq4=qS?v@VIO$*fx1vDV>MSK|0T-X4c z>xk>$Ql6aCMnZp3(Y-L@1^@Kn-W}^yb9_NNW5oYFCsY*GRS zfN6pwSbw;a0L^leb%bp26ag>|XI$SQs0hiDDsq78tZKnHWQ+WHodB9{pQoNoKfGuT z?fBsT>Tpm;dTst9;`Q@5>;?xiJ(WG70)rG}eKZQjmEf9ozS9j$CO+rLQok!3jpx%( zm}g78e~kf_&;Lh=HqK3TYYgFUl6mUV!%W(uw*El|h z2`-n7b5@O-&gYxb!sfIfT($vEJoYpjvk7Y^cS{Juh==N(X>$CttQ?pE}7Oa`|t6Sv5mRY5Ra$X zoW}*$w-!TY9lENf8Vnu>-0O&En2kwPFq}WI&6*EdHfK4i3zsx@;%Vn8A?s`9fF|cs z6uYvt#!J>NYzWmy=kCmuuxF!oq*Jr&J2wg`K+jCVkcmXHSul%RW!S^Ms)i13wTgz0 z6e|r4fIIrDSf2MMIu7Kt21KJSMyKj@hpD5K4Ht>M4AhZfPZ0*JUk-D50$Odxc;80{ z;ElzZUO{UI8Ly8^s!z5hx}6!SWV;C`LQY;xFHh-b@30B}4SPw1eb}bk^J~IY+HP$a#t#lWmP|b`3Khv3`a{?_g#WodGG1x=UHl z-~Ch-T>i-4CX!Xx+#eMzk|wMNzND9o>~{*D+|7?ilqxac+0$4d?O7Esf5O*w%Qr>PtUcTX zVivtmt4in3o7IaBhOsCgUGEn5_-qAx0E=3=h!a>d5_uQty09gjM{#}BUDlxjnu77sEv7sv)4Yn&NTkl$k=eggL5DPkxG1at zdf_KVbPJ%DcK&w}Hx=@k-a6C9Kr$7#>PIH#s{|FNHVZ#Mpg5c8Ih!j)${RlcNJff8 zQ?k}>JY;PwW{TUL8#5Kr3?XSWD#nvz`Z!I)J#&nniqf`1v6ls%aZ0RO*~KOT#*l-f z(SUS3m6#-oRme)rf%dyG1$gSy99RpYKzbIxnd-<4T!1k=cUCLYxjhF3Pn zG!2vVIyDof;~&(aAOwd>KT?7KPncsO5;RtYX@cxrDAJ-UBBlaB_zv&OQ;bgy_>jlJ zAay84l1-3;9iK6O@jogNObo22ky$zpKm2HQ*e_9sXHQxvffkf>&%rDBRr?bQvl$v# zV*xY}tI4?}z%Hz}9u>+=nw?B|ec_Qh?c02_mf}XB$_qDQtUOeeFg-Pc-AVyDrxRzP zS?HP%7Q#SC0J;p%!Xa=ks8{FcXx^x)YX_XlXxV#c#4~ep`&1w^o%BvZN*P`j$>QXh%6q-eRvQ)FY!=(t^qV?qAR+7|p2$3#}(I@7jf&fqGo9lSeZ zZo5h9=b2WGoE0xY_4gq3M0kX-<%3Xb{meim6iHPvV;J;r`}RcA^$Q9ldivi$A=8sGo^j z$$MIe^*9M9{#7>hrzF5vt?p9#FOkp1GCEr`I(8@xZ%(i;V{k(H%#B=FRfxSKM-5pb ze`b7wP}hM}?c9q)K@>4|t~Oj8XdrGi z!7_>m#S`<^-Q9CC8|t50ARY!W0ITnCJ=@YZnzP+0^2%B=d^$>0Ina#J)C3^F!hYGP zvry4@=p*f&xxX3r^fy*&IA`1r=J4 z21h9W+!yjijtyt_H^3Cr(PLb48ya{vEV3#-ir#{#15LOB(@ z;l3iSF8+~4=d_TKD{mjNPgWMf33&4G@&O6MTK-Ryw9V&#P115ba(+toL}rxKsSgd- zK&+U{-t&Mb@GBw6@a#=Xm9CxQ5ECN+V@_(V&Hkm#`D&&$DxRSW`*)3mzPP6FGm5)Cz84w+) z>qys~Z$uItpG~orw~FXv45ulGK72`DcaTAAuEzub#M~k8M4;~8wY-=S?NKFbqr$=zQp6Pq3;R#uQy6gQK3ZS!vFwD zs~$2Fh4|R6#pvPNm%B7z%P)cas6Xc-C^X^Mbr5|Fk$?)SRl0c6oF#{UE5$*~f`yy|H4;`A+<)x4MqYH&Ja*!BqYqns(%; zT8g8h+2#2>*(ePke`4_QgI>a!s&>fdg;?F-y*}tSd?=yj+#@Hb<@zO=Za8a)d->Ay z4qYeI9mndARxwSHr=Evg(007gwi+s$4s*pnO3Oc)>GH+>z7=w+qN;;AI0&*`uCwLf zPC$P`(-!q6J$KE{lD76rbY8_|BIovYqKVwcl7@65Jts~7h$BC`D=3U>`_M-n9!DF! z+*esD@SrIN*BkR>V=}Wix{JIBs`Gp~LG-?fnkp-P>#6wroZ1$>%|BPG{!FoQR9F+dcx?l<5#UQG6cn-n%dK8HwsFZ{iZ63sBLX9E>kM+A-BR-ws%VZ z0rj~XZ_9-sAx&BFqm=941U|>9mB4-NIqwe`BhPmV=^x&uwC6nI38t~NQyQRj5f<+a z1OVwvoWj=mU%q&vM)A834S>z3)vMsai++n2a_4)mr;2kL8auBGNWml(-L?8S{&M`u z($@5n7EBHs6`lmXbvUzXUqvv*tGB>=U4zd33W~<;9&YarT2kTitn1$cn$zCH8F&K@ z$>rU_o=addx83;^%XZz^4}(QLiKSOhZg+#qxVnp21ds878b1 zl*aO%=9RHzr5qElCQnX^m1W`L#OG<#Scx` zt37DTL;!ZB7LwyWA@a=j&}Mst|C;_?EJV6iNFP{3<<>V}TS%B@{VjK;i_jmxt-6ZK z#sUw8UFY1ZrgL8L_|ViUP|xADH+1&bhW{;4cYFp?IM%ccJw4PYf~IdJ>xO z6HO&7kMA#t(MbuVdlA1LGTFs7xR1pDZdcH-71d&Dx!3>s8=Z{J_Df!Mx(k|aPMprT z(?)AGoi4%1GH6C}PZ~Ct9HJ$?3<=WMU}>-~!q{f$2Z)QH=0GARDeod>GL0Z{BVn@M zY}CJmgByu%T{Lbgj{47KPz6uq-%Qx!A!@PIla*_khze{(j>uo8zi0l+O%FNcX=TyM zgGjm@#vz8V^C=ApoqzSldd}y6EyioE89iVGd!owX#YCvTWSMF3CzWyN<`!Z;{wYtG z)NI{}utTH7vM;_I%)6AVp>i~KczHiRlP|VuJSg1tQW2ls3T&rsWxPE!qk>p;kVICTW`D_vshHY>2lfv=QWbv_Q z70<>1jG=kj(LQ5tteNjSyU1>eB}v#jEtf))_D|-oLKn($mBl?LG<4KoiGJo5W|q zm}ZGgUA)21*md2Tui@LNB?q7hUheMKFz6_11O8~g`NIEJl7dW4iNyzw0#y{m#qe{A z8jB&-Zh_3tvUEh@P$0vpntaUFK3In7Ogj*b{0B~63BfL#XI9|DHPzl1BDl3pG^QzdgyVt66X3oga&`87w@=^gb;@9QRtNN49 z+WpDisE*6EO6O22;7Dh>q^_0mubO3?|4v@((CFd1gdoF&WZl5QI#E?M!T%17ZsV7? zwKJ!Yz6!R=3U`jqZ9$>r*~{o;bT)9d z@JDy;&5h7-oK3$NwF@{wj04bPf~4M7)fzIN1i{ejNRZnlHucHG>&AZ-OC6jg-|m0%-}XYeRJ$3Ie7B`F8bHD?Nr6aar}@z?zm%j=|{nt=pTy%+_rszIK9%&79VY@Sgj3O zI&>zYa!o>y0YcBhpKfyja*Zm3zvHdjr7}}(W3_&`uoOAHyKv7M9Ct0tET)(e2euDb z^3!dfk5%mCu?G)b*;nFQFoQd*fh-7wBp>5qaD& zN%Gk}t0HSjiBh-i5Y0|fI0D#Yo~zgc*TT?n%KlgBNy;~dcq5nmw}pLH&l?Y2Aee@^ zQ%yOxkO?i*mlpqHF%3;25ab5R&LQey7e3{J&Mk4~Lj$Ql*{^)wApLEgtDN$WX^Ov! zJr8xt{#?W+N4N>9)^ibf@fhcQs8On^?aQ~}}-YpFoGjp=hnQrC?% z-VR)P6m31!ko(j`Y&My*VPUyyyqCSb(B*Kx?Fa80oHDu$-4s>}F0-(fn>V0SIyKL5 zg3A>T`aNZh(v8&0T&vD&HmH&m`%ZrdRrlhE ziFQI(GV^$ z`BeS7lijPH?qI#qi$dvi zrg^#1k2kAG0K4ZmsUqi>!5UPJvgIs{dEi#~j|!51?3FtLGy1p+bZ!nrCzO)&DHI>9 z1MtyjO}4vO!OX(-BsSOvxlsgR()MX`552VE8p+N+bh ztk=R|HCUsvnM_%LA8+x80a%q*cg3!-h9Rkfx=k3MkjHYFUo?um%ErPlfmqVJP}WB+ z_X8v?E2ywgv`qE*H`|=|_m-(C!UpBAF$M?5-!nk$*XmHdd~85Ws7o8ZMzS|JOUPt@VF;2T)AgsY17{D_mqMnJ5KJed`f~ zitx?mzis*-=?0XlHAaM^#JAEzqNMxU;^wL`*Crq*E%LaZyZ^A-(EMgz%TpoBLKlN9F5) ze={WN?+~U@`MmReIri6jE{{F^Gp-+B9Z^p%p8arIn87qKgW<17xM#Ph!9C~6HsE<3 zb7wtRH+!`#na1B_C6=f#7UrhM=bLY8dW^eGx-gBIesTQf5yAwiPL-{hvGVaD$4?t0 z6ddq8`=Me8;){lzB8~#|-_SliN!X>+VOF>~>~VAy#{!b~^)Nh#7n2rd=x1%i#+5>p zm(3X#*-|Ra%FJ1I51Z9pmBS`_W+ZLYF;Nw0uT^vnai7X4O|9h?EGDeAD%w_((X4aJ zC(9xgDYoylR}~R;D$o4y@AYyqu5{eW>GK!lR#Qz|X~D#$D}98U${~~%^)^z?JI4YC z$13!7-qpizWctpHdRZA({+o#qzPSTL;x29QZU0YkH$cFq2;>I=ATcKfK)jQ}Dc6QK zuIHV^a$!I{46qi)&kvF7@_Wkc)HiCUykuK*wm*B(G6f*P-L&X%-xC1P@{v2yfnI;a zjbnM9q1P*L4R%D`Tf3;v`Y?JjWiaCQV`eczCw!84nqZ)%P?oeC2qaqme%YV>>`sAx)<% z^OE>E59}+_>dl<{U+Hnsb=EmTdN>euk(5(-nuZA{T&58IcjwmJRDB`^iBi3%*B_`s zq{9RTGxev~p@>r|QkA~AbE0H36Irps6_+!dXqWdtvc(mRbCNQ$Pr+#ld9E`!$z!;D zGF6zRHvk9@@lZj*OqZ$wvX$b~%G>YkPXuXYg`JJV7)H01J%z~_%ybH@bhK`ZcV%z? z)hc0n|EpEj@BUY-bi4)CDi@%%oq}~Z)lyKaB_`6%#Ph!wSZLQW+v74&pd#WbjYo!h z{477#iW}0xHTi{O;-S1t%tSjOMX7*?afGI8#WnJOW*&lZlxv3b)75!11TiHDWIR%^ zjR?{9V&W0t%_?T@n9=$*xfCXzep~)ca>hcQN=~jF*T?Qjl>Om5#G)7*YLV7+W94yv zUHA7$5Qz41rq^x+vI#oLt1 zuS{P9&VzyrFJ!+{jNmTu~;|LX(%tSIpBEe zq67qw`1O!zKt#se3PROJy%JSd$2QHs5?%WPeb{w~VmXIEcv@|h(_Ab8;Qs~Ex>;G8 z5~uSS5Og-pia2n9UJLHwV=yx}*Itp0)%xOKZ)E``@i0>Y{?t*`b*fmb^31v&`8;DdQ{QGRgV(4{b5haQu7@sOTXye7QDMwW!SxOJlhxq z9FMMK3u65hhSj7AZ(@xmA^W+y?hIC@sd3@CH7vG6@VeX!Z7Y}$`l!r%B(w?ckJf5) zdW6{t${b#8p*e+n!y@W~#r5_%Q|}vhf+1flo(TpB=Wibfi+(PK@NYJ>rRBGY=Jprk z5(3i4J?3?NHJtynj^kXThBwLCesLdt&v!xhi`ixc`9GAavC*j7bFn8-&qpPo^j_DZ z<%ImC5}UWl`&U2HaB%l6zJJ(X${55eS-Dk_)8cmQ@o2CVi3xw?%T|cmMe|hl4q9c3zTk%o~MIp zXB#Ny0WFzcF=XMXBeBV-76Z5riV=^sqYnA}E5iRLEW9K@-pblRkWwRppGL+^P@;Mw zr6~Gd+?jHk?P~bpEq>sngD z1FvjQrnm%@_h{tpEu9*KXMTLe1^Axv6cY*2jbFSRPPp34BxOxo+M9Xg)c%;`cPm{^ z;d4W830t!4{@LNupgv?LySk}e`^RxAubYmD>ya`Qlfn3fN0( z`5^hU9roenNIV5t{H%wD79IJgL=;Hx$cJ(tnxid3vckmO8ccJdwk#I8s#(-pqK1$> z(M(&7WiHEOWkVA=^T`!hFsUlg&owC5S~)|G2WP= z-Pc6aL?vhw*hTVWaxiwvmoDTnTOp;+|HhK%tx;Hx@rm793<*2(tLdFGd9U#P59!*Y zKBotA(EbsH9~@AT4H4|VqS%>8?{htU$UG)sJQw)q*w5V{dWd(wa`(fXjwtfwmJBgDApxUI`h z&mye3L*J`;!f2vI3&z=;sqyj3$yhM$^;>er)>x9VoQEs$L#)QtIvt?H{`c`$ksyWk*5egrA5;LEv2bp{; zktQn5a~H7{Y*$I9gTfRG7SJ?La>(gx9E1r)c`q=9+2CJNny4ZtQCu&TnJ?9d#h*cn zm_LV_q*h0Zi%#XnkQ4zIl&6}Djz4&+ahMV&S@8oDMZ>AJkd+Ut=Dr3NSh@729b{y( znBktNYK#$%Y}z`AJKuei+NVOiO(Gp_5vznL)J7J~s3{qpE0u1NFkM|*CVnu-#I6eQ z{*!X9n`h!h$1($5c}@%!yV3F-V_$^OWUar&vr3c#pLv6IPe;{ImG#mKjvS-e#F-r>PD*u~^&t?-4bIJSj9AqY;fsiw00Ud|F4O6df!%2V!@G`UQr5;6J zG5+D{iIiDycR2#2Xv)c239RZ~NuMq2k&(cVrG>FzB`sPFJ1BwNQO}4AOZ!1{CPM>F zKSd6YvixgGq-l&KPUx(GqpP%)kxm&=2NbhON=~RHa=A`)uO^t0}pta0Dv3$E{NN+{eQ5OM`alEH@RrOkTdj}H>LFNuLJO$ zZbw`pc8P`RxSGdRwr=RFHfO8KNqj3xZt6q6PI z5E$-ju(DV-1IT_qWX*7~F&&SSI%!=~UnN)38||__6EBdjUgySwqnsT#*an6_nSGgoP{y%N&^pf7cGvx{pYIRTcy)^{Yk5)bJSNCFaLG2|oovqP_ z>S&&#KdCbQToDNTb66g7;Ofa$vcdOcy<8LRaP&SYP#Z-n;)GI1%Xoqg=NGY#)bSF6 z4pa2+Oc*P5vGtFgdpK12hr#M->ykoPOd}OR*UG%nbM>fgL*<>xlgTpdhbv%eO~vsWXuz~?bK0n} zeu76UTmZc)SQ~+xiLDGC_A>MR_nvW4I&%e)*Y*;adI@8z^;ZZw1&*LK4 zpY@1Lx*a}qC7vP_ICD%394!F)1FYB*FW6^W*)=RGZ|@U>1OF_(kLRCGo|==mWH$cW zYHa60uDVZSZ}%m{yHciE5Ng~nqLM!lPWG3XUwk`}%#=N{sf-I`5ok}Ug|WJ$ zvb>hSVG`o|=OnZOV?F~c=b8#{lzD;0h&@UP90o#ATlho+2N?+wPRo)uFmBX+O|PbJ zbziz}ga|Ecv-bLpk(7CQTpz)!x{HDgEJj#=F*9+!RzH_kI3|Of^9+PVIP~|*We{z$ zA`!3z_z-V@gv{pqMN=2Zh}Z&Y(|(E4&LGEa0Ww3;DW()tR0-zdlblWA7s>}it|daW zdf@$j{S4_MOf2$3RJ7$L&}^#yC4Z+lFhZX#qBcTg`R^#hlzS`cpVg@nJjZ^Bp1NRP zUMh(y>8Bq?(5qoC5)sg+QJ^i?4&XN_0Ei^o{%Qf!5 z&qIxrB)B|^bnMzxkYdT_ELoYWWmr9R2VMTrA8BG82DEYM)0-~TCJv6Lm)SQ<0=**ydrY)o#qGY1r#Lof>h-8&GS`{&>NB=)l}H47eZ0Vbuu)v=P}*Y4d- zd>0933ToXjA1_v|Asi&iy^YvX-S6lnrTpWcfTKK1o zdNJ?b%|EREnaD~e85TgYc}6`9O?WinL+zWLe%qDlJeez6AIFvXT%-LTSDSb8IM`|p zpefBb!-lmK6T!|6EX0Ze<-5}I^6k7b^*j2g28#zW2LyU zP^=u3*|j1t2ChMi1wSi=hz?z&9SAw9Mr!*{D=!A@N(-7vuudwGq|G#Ntl&Bve|MSD zisA-c4mO;LSv8v$H0a7G>r6-wB7u^nJoIdFx-iTPbsfu%9y-mFTgWQD(SdIbDh|@v zGK48f;LxStR@E?*B0A!R3Og!Xe@zEpqpc(GMsks1+VN~;twKWQ0qHI?u=IR0e6go5 zt91oqhr0#!e4Zo(yJFk~e8Qi(1B|@`(xc!sX|VfxHe+Ne_w;C!c#IwjEk=$(yX|TJ z3GjLQWG&DM>~Oq=0;~&q-BqPYqvH8rcYn3CX8;|6tJ{%O+l)Q^LcQiUf;7^wPkwn9 zATQ+rMW!4u<<-Be8EVc%cS@bscaTh9!2R*nQ>a?sPAD+p4?j@CK@|xECCKO0U)}7u zd%)k`o`gU}^6NFj=K#S2up1{Z)V~@eO67xX>bw)-HQzeca!{h>*${kwsU2B!DTi?XpeFg6);Crdgj4s) zS}ukaMYFp@K^LdT>kMB=3_aw`Z~9(dV7QSEB2l4S@V5-+Hjh& z%PzY3OYsPN_h`>ZPbD-?tGU3MoLnN^jE{9lXRi&sF28dZ!2Gp42<)=E$ovNUzVBC1 z`FQbFa*NqP1-AvPXCDBrz0eEaTpOG441AIQ@&hYb^d8NK`Y=XghWh%`vyJkC2jM5W zWB={L)ooVMZ;!{);vfRNhNKyPQF_t;YuKfyjqKZ2VF>XPHub5@) zAlSs=O7F`E1krceHoaBw#KvEmhHn11xJcfF-qLt80k)rhertG7*e)u zrPrulzc+6Ke_sRJ9P50YfQQxdK~ww2Y^0%<|9c>~8ri0N*h5+?ZM8KWtt9AAdx9M= z+wU`uNKe)sH+*0_%m-&X?k~TN6~n+;>pHb) zs86YdQ2%X|8$1YK(H{G6FNomXyM=~y3K!mxcB=uMehvqQu=vlecS6x)-DijwMEG2_ zm!3aMwGP!0JKh-0?L7xtV&s`%&G<8W$1meV%8$VdV3Y zI_%NV@0X|3Va0NKeTHMaT#!jr!$_6^1~Q20xgrtx+6Pg&V`W&Bz?ORW@Q z7{8}o^Iwu8{(Ucd+?Z`t@9FwAyNu@+TS9QjT36pygmkKrt*r=C!g{)XMz+Dhe>z(F z&Ufsf7@vJl;40>BJ;{xmHI@Yw^$7+t3mjW6bY?rRj(({Vj2S*s=~|@>&ml?4bz`Sz zAN$JHD14m(=rN@Kq(vvQYK^{l@Su)WBDKPmJ8()Dv(L_Hv8&PBjg2z;%==)hYJrmtW*KyWDGgGpR;sa#sk3TVkh^f1O;C?D@wlmHYZ3G>4E}{P&fgg! zqgDxH1EVjmL@|R}HcyXd6 z^Xte{9F%~|1g-(qAEw*GEd{duZhgJE+JGi5x9^J|!=I~(?sq<)%P)X^7n?RmM|XB0 zE000aD78|4HQPWS<#n&&K=lOy6 zebat-$3WT!{b}cnN+9nV?(dRkzZmx(zr=Sz_doaDzrA@nfQhCp_T?p^sr|~^AEiw1 zGvDxemI;J}1a`=XVc?P)!CC4?$b<7E22`rQdUrR+p3Y@euO*}Je z2A>0n6gRqSE|zSVYUs4{G|K)1d=0 ztmU323F2)jX(Ude=<~^PQ(O|DCrRmF!A{(`3L;fWWcafgN?#fFs?hI5YMKQCLq2-L z|2=$9LHeTh5tk|nQiBx>HAY^6CI?HB);Kxg3-grV!H;KIll5S<(u^C|(q?4Ckq;ly z(1aCyli78=fW8}e^xc7UC2wLx?$+;1+&pdX@%=|QaRh69dQgI3jui0gyL6C0i$@8U zkljysv9|oAxDh}XH1)^|e;0AY2)|i+1A23bNY$=oL8+O|qWr%!C5&fTAJ~|{`Vb!d zRfwtyEh{rJ<~mF;pdLt@fm}#Qo{@}3SHxt*(H2tvud6xuC>X?5Le)VZ8GD1FZy2ae zz5thq7bEqDqhQ3R)&kAP>A<21vqEPwEI=o+{C|6sx%>`sv03QA9I1r$LfoT86g=Tn z;b;s*MBsJ>`pSq=J->1LX8l)`SMd&B=smEBVkLA+H=ADr+3uQ~MSb62ri6J!upztq z^ebtXd{11127`VCHo0*uIRm$!U><@rZO7oGTym^xV6Z zWo~)JpLdO%Wr^E18lLc^r;}VYSX3Lu^MI~&+Ou22!P7^w!tK3tZKqYX;Ar^c6pL4V zXo=T6(2p|!gKQ-3G0lV-9#hkxh|u&M`ys}DPWUm>c;=a*UT)UHFO8B&wR;7INTWSU zlqn_gX)J|I$>y*$CE|?|$%{Hhje)kfKy?w9wbdg%xT!)mji87{3nxQ-bGNS> zu^>H6Qgoj+oQQ<%oQZgT#@H*ewl-aV@elaGOF9;LY6H<^j2MTA?XPbKb4S7?X3uH( z;^WLc-Ovw-W2vvc>xEo~Y9ddZimt8KOQ(!1ct4d3KM$)DNaiNSOaf=Cz)rxzqR2eH zvC%@T6{l;3eu&T1pfHPh&|ty1_R5CMIqIm^nJysy^o5E3^Exn51-`c^!lcb?@J0Db zwdDT@;}YO2`xOEN`JZ-q9!z6`JyCsVrhnkGkKi!sv-kWP%HY^=DJY|<+10ERmIqWP zu?!)^@$Bq1i6oX@c<5G!(G?@2=BFci?U2z$I(A-hSmvzZ{|`9Zf<8& zQBjM1k_NVn$UFx!%OTtl`1}nV-_0kG-Dt-oGT5~mUDj% zLG4S0l8rjx37>n5+f|I{Fp1{~zGvDnbrU=tx7_6pmz~rdJ8J>t62RiXp>M&w=zQ8h zF#6$OogIhi`u!b$7qbd%j-!wg0r_@YNnY?eOKr1>D?vwQsSq`&iq% zt@d$~$S)Ni0&nN%B_HolzZTcDb#%hx`&*GU2VPT7e1pH9YMTY_zwmfoJPkoPztL;e z-LZeHm&!__@@k~m_B3$XBK~e2>MT>wxc=kX65Rb2^?T2u`lv@r;}!s#kh@$eqwmj| zHl`1AVtp=hRP@qNLq9!tLUOsvS~oSg*)PYt{=owt6PTc9Hzp)$p5Bk8TLcIes~hi(+>fg90HR`bj0o|ML3s+N zl+eG`(P$TiX`!i^p%&IrmPNjs$&3D@C!-9mNr+OPT~L`4_h>^D*ZFQ%xI?C= zdf`alNM1#Iul6%XXDI8k5WRn899uzqK?%G9W0>XpE~=N4Dwh?8q$9Ve+I&SAE`y&P zts2F+SIQEa86PEWj5SiYieu7Pkvu}#ZA5`Lu$nhJS`u*?h;JXe#0dwyKEf;mG0_M= zx*0(KNY^{S-_t<&%DT^>+tSH#KO;X>JEMJtnW!bCjlWvU1Zo50p4(n$#ZQ!H9sOsS zYHz#;fp=Uvik0nAB4&mF#?XN-$qr<8KY%#ch`WSbI*024M8#}7;ik)1DiI75GjYNh z+$COhkw}rDlw4;ScZUETSsb1-GrMSXQoC{AAXP~ow{>xqJY%C)&PD_)$b~6|oPIk| z7c*H-kP%>Q#;3C?So;*~PL){jEcxD^Drr%&wCZ)fW9ihw%blgwUIM!`dwQMA6oW*S zQ3Cmz@hwy@<0H8so0fMH96a`UasestuJfyfoUNC-t`;i-#h3CTKLSkFlnHYF212|{ zj|_u8{}N$3%sz?P=!(o|4}b2~@IpFdyt_`Z5q-7nt|V_oW3+`D0LJgd$$A#sDB##WW?&ML#vlkoE* zsnatCk%=|x{u|-*fSV=Xo;E1p$WCL9pd1S^lpfW=2@kNWnKCMiH(Ja1ZOV1TzHR|X zKfF=?`nC`39unT9|1V**u}R7Xg1B@`yPvr`?a?G(+d~#%K;&Cs6X+sTi<-*g90>oB zOZu)<}W!3g#+G8Yd;9%Fl_+HqKD8>Q4y zj>E2pzBe7HuZY7N4s^z$c1wCAdSMvFCu+A@6dZ09M40Pv0o+_9LXzU6f?Dd&>eK+! ziX649v;Yb{wXxuYZvn#ygaH-|C+;s8Z3Hs`G=LYlX#7v@p8!fpToUTTK2wqh2!i+CGyA{7adi=2ylVodbk@m4``*Aau24Jt8r?&sHU zZRzhWsFbB!8U#YaBW#{_Yi9WEB>SxZH9+XjuE z3;A_*tu!v#-za^4&3}rOOUnO}ozp9``9*N1BrBuTDUf_x1ke2Hsv6^WM`S~~3t^#X z02c))P`WPV_C!Up4Is=fpgbYrs!$HJ`@L~a0&fV)o}c|5X-m09_Yb!LzB59YHFXsC}ng(@}km}iKImpX^u2? zv+zqn=l+~V-=Q|}|H)g7+8)nJTe>8;B=DpoWRK#(oEB!5x`1M`NNZ%Wyphq)g&b2r~ zYV)U_+$qZA#8hoke>0TN>Z*ID+Ovrb0*X{!e@)=j0Yxq5wXp*S^WoJ4mY z!*tI6OrBq9UeIkLW`&m>EopZ-Ng7PCa`{GegPPZm;&il==Mn7{j?DBU)w-D3^w%f) zRf6}vc`lr|#&kmSX`PHze$>k;MUh!6neacYq=zV#KM1=Cv<#S@>1m41?pzRgc1~T& z@gTY9VF`K|b$>Ptpe@6Piy^`<8SL&Igd&~{yVmVP2ky9m*Yz%Z zB7EOC8~ZzPI{_r*!xR3Fq(r9B+{2~WcSR?c4xm0#DssZzL%$@qo&dh|)cTc0>k}g| z&g)7ordmL1EIKyT>HT_GmD>Y&n`qjddw9Z?F><>-`w!ocfBUIJOUE`GniA)L8qkB${l+RfQ0?v2x3Vs6IaroQ+HavOb z7tj=avqt#cNjdFH5IdVlYa_qyB)q5-3cckN%LAek%#9N0?nK#OO8K4k6O#=Q-S=| z*NIqqIOM?lBM!8zFuNJ3tWYISet9J;&3}6ry3wKUo1~kXn(($*bkNq3^kAqj^EN3U z`^Msqe3lcyCW;msT_yK@$}wWdS_Eyt4kC@F5Y?|Mzfdv zFva^z?^3aH1Ipw|o%d)F(Au{$5Fx-N=p4otfL=yRim2R4pVvE zE^n0ym%Y3$Q(^lmF&N6JinVuEun{M8U|yko*bjyVAKRL{ewzcp=r3p>ILLwbUW1<5 zWw;Hd-WAc~6&$zH2;_ShtfbBNW(zG#72N%K*KI^OE-2Bh75|=k zzs|I8SYd-r3OtNNo3h>hqVTc+2RiN;81mNCx13;L8c1MRDSL0$^&5eIfsxe{2F_&m zx-VmD)7jLVf5dtV*$iTL8ok|5i=*%+?-nR0293ia=C1m5x7T_3INQA2p|5u(f3<^| zJih?UmfIn=0}Nxca|f9~Z)^_}r@}WsZU-OUfvvW*iifC8_?pk)5{r5shik1$_^-^=df1*^O*P~ESbIsDG~ zy61CWRwja1y;%KpUYKHw8sO1hF|c6eUoH@SaL1A9`k$9~E@szm;Nbk7;Jn5yX(oa> zmz5XLIbO)4BVPf#_0Ny^AB2*~Ms*eUAlKu^J%AZg1JLP*0B8mkquXZ%vO2`>0s?ND zgx9z_J23AL{I+8`8NX+DT{Bqsq~5uY<@@|ziM_?O=F|2yrJ=6h`nuo-|2yx~J>%>B z?v=pPc}Xl5-TTuAZCY!S>n_iV(6c*ok75^pf&Bhgs^|?_oN}Bl!8vmVqd7K5Zdbp1 z?$ORx>*wcKz`Ol3T-e6g1tC}hGQ{7N zfcVtV+uuN=!<#eH}ilIbPnn?CJS167}wF+Gq)%c!E15a1I`EcVc_=LVX z+);aA(&)^ld(GpW$^9=&h*vXv4x%07(^zz&ktle_?~2EC*T1hzLan_@K9q1L-nWr8 zwjfbx(Y?XWpM$a|UIH#xe^5RMcyAcKI%JM?_*nb_I=OV+^>#v_!X5ocd3$Sm_c#>Y znXIUXp0Ogks2ms65TNfVW`iZr_M^{wVfqC^X2S|X4mFI|KY-u7hYq48K^@-ub$ry^ z&BB~-zM;_f==Az>^BcTkztoFcN(z}yUvHr7r^eE8n#X1KnBKqTLe`oxecql?FP8~}s=IA+m-5 z1K|vPvgiN9*f|CF@xSV%(sw^v|G3*P}BkLP`-AvE+NCb-st2eOw5J z(He2|2&%E$mCj*w1aucp9i>Fjc)ZWG5gf_ zFwIh{EhMu^%wIzaep_+OzcK&?=(73baV^6M4#c1D#=&5`fQ zsmW!FNAB@(0^x%IBW?XQu?YBb^n~`kv-`nh>CxE=VJa8P^`*LlxTaGYnz4g%Av_<( zq23fn&s`)BF@Nm`0Z)!td9>*V9z0F_fc_(?au7h zW^eu%gOHkW^SKEAdPc6~x6OpKJA>F4=iiXgnXWeU{&r39ijF1G(ro6X1}rxC7AC(} z$}PYJMu~o%r>$+6>jwZL5Pa5XbUOo`IZ)d0pa z((~TYYF8H-zZYpSyW3nHKbjcIg=AA`cVKmO^Z@EXteVtEcsi%{z9-iQL-hh)n%|!5 zk;3>w=5DSgvy!p_eM;|L@m>VuugGtWCNZB+U_g9q~#|f5(ol~ zy5kaIIvF4v;@{hqJPrIB09dH)0r4D#iCN0Db_sp(^IpcLcTvxkqGh zbGefD1&Sxk#|BaRW_(4gdt{i&0fM)?2YM{|Lq5#98+X$$Z~JGym|Wl~hbIKhogfnZA#1Xv7U#{Q)KZ zYUXm?Z~dVYF!K#S39rq{=K|5!)S>f#mQ|#n3utz2hw>A`8oN4St~2JZl~bjjz9I-D zbVa20>N`Q)Rpr|SYAQGO-T7*}eyeDySOC;0NUPoeK=90Czu@>Na9RkVs8o(=^ z4@HUv+b0>cM;T2<>d_;9mTi?#@=f2nU}CJy-o6FP;&fj|laDe`Z1@!$MvI$u1S*%wH&e z+282zWocBCE4#v_obWV3mrtykRw0vX z=TZwH9ezqT_o+}hHFON|Jn5p+@y=a66>T~GQ|+6s(mIt`s3aVxpa-v^JRKxMQ%$TI$Rye z^+Ke7{*>Mq^*Odvf47Yq&W>(}M5SXeu=RFj4{nHS#P(m#F*G-GNyB|xuFSawN55k} zd`@~p7knjglfG#UGkuj-vZ%By?2UyE#<%ZYiW$QU7d(Gr!0x*_?*kx4oSS-vWGG-T=U}h6ok%n@)kEa*x#lRs&8DkvC#S=`Y?jJl>HMxd?iK4~srU zJP0QUcpY1gxDP#U+o~$(+)-mYyL?IpXU0ym?iOY9O_OF>N7IC0s5=nBPoxWWgY_9| zYQbXWh0fK^2?MAXp7W}pL0Wp0%LN24Lz5tc`maA}X;k?>nl7_7cbd8){M^Ow4aoB` zS)KTl=JWn}H9xo)*JFT|-tLC`kI%s-T096)8zbNQ=@;~Ivwi}&y1pX#@8o-aXAztR zVShK9?pV!(gT|*;5rDOB_u(r@2C@AL<1uKl>L-Ca|7NqtUEK(^V`X=Glgm5S?>vj= z)dFDtDil@FuT?;S30Jdr*^OCGi?D3wh?qZX=$TS@xs*mY))*E`7t$uz9oQ)<_I}x_ zrx;Zk>MXv`XJAytBrq&2n0ycmxqGM?3*J|;AJ}&y)<^7%=}_Q zo-(pWiBqbN{8KqwQa-d6C|+z|J4$$LyZ;*0mD7#^FI%X(FK&9aqycgXR-+^a~u~49|i?t2m!&fO1-EL+Gtd$Itp9*+tBM8E|vECva_DKaV}V7 z1s!M!CMlJMkQMz4{xR|E<0jSR$+%cYLsF0Fml>liOO{@=rb?yqK=j{e)*!5v1nf3* z)jF)2ikea|Oi@uQ2)Z@o3YC~h)f+N{^7nCqd_sqXsJr2+c)Z_*5Iy;%)e(3)_1=`Q zTBs}?y6w@ETJb~6WACZ5&xuNQdTTJN{jmiMy+y1wpt!<%*DqA$i%m>6U1QT!XD3%C zBvKM6P8yNK0PB9?w#x3qDN$MI1vpEU)~iHAF?7OdebuMaXB1{#UGkDgRHi~-xvHV} zlM+`;+Oru)GuG7x7Ldfr#?eRR)nb;fMCt0Z_Qkei9Svib#$s*_Q{LH%>v2PE&ty%F z243-qv;xGk;-cddE{;=DHM%;a}PyFnx2R?6}o^lGlt*G;U0ldZlw)6npiKOxIqG7PU z9|RwNc91Nm3n#YRIvj>C9-kyys*3e1Nt+{Y`=`-zDr%VirbfZplv_NA=HsXLJ+E?R zvhriY6ZuSapQnO!54C)gvsxDk&6$eKzdQ*VxlfOBR`ISr9jSW~+}Z2?OtX@E9wUh# zzha{EE&BOD7h3*3fq2AG{A3zo6D6&PsWSw^tmbPjw|IZX#he4pEkT#tC)aJ)9x#_i ziTSrSxh8E*s}Mja4Hu&RfvtT2Mkm12h8H}F!RKT=Ftv>J-R1Lm%jt3qn2K2aGZkN> zH&#(*R5mZKkW;>pe=o$(J1Fm5>(na>PaKZ4gw=(|4kQ__%rACM@1##D(9cHWCx_EX z=+@;vE`_oy?t;#7M{~V*K`(K00kDeYbN{R;U$*FOs)2Y-)AMCx^$1X32R)r|bQXW> z5cPNRxDbPywE$u@!6`ukcecs$L*M>t1-~TMXaADPAF-8-GrP?LB>V(20`M`3{1cA! z3SZ{B|JB%3$IGI>RNe&YbsKL{hpzzysBg>|W;ZGPzvH??!mihvRjd9AJ_=pBV_d1e zKT=tE1Fi6NeKD2refLA3)WJZ1zwS@8w}$Uzul3xB+#*~BxolL97k3Vg&GdVA2hmY% zJiO`Diyg`dsF<+Xosccz*O~kml*+b`ug9dtBLo{ILlDOS7sp{l1X>Ue37bs;~0t zi$0Z?>KyOBGG0s@O?_~O6y+y2y52#{nNtVa$&~xs1xe6~wA*&Kh-*byb&FItgnL2U z7GP!k!qhu_yYPMyKHM9i*cqP17RMH(J2^CFzAI!Qc0b zV}-oGn>*s{kMSz~0dHSrAHI7+(}{n5cRgR;H>2Kbxf_$`1F3%( zW>_pQy{R)l)Qu{wOk0Y{CQjl-=ISrU76ZZW+)p{0EHahl&CoCRwYaeV=b|2OU)l0Y z`iMno>f1n?pyl8Hy`eQRF`O~$d;STndWdsRz=)2b7pP_NlHK~^~rHJTF z3`bX5773O9G>oMT^9oB|i$w`@l4u>G_nLVV&aI25@=0=zLCU8bTKDfw7>UZYYO;~k z_ewU~w+N7TRouhR9;ISS7{Gpgc*AicznEg2Vq`SWp;4FrWH-f_p=?TC=Z^U|)j>V5m*um#}WVNw~VzN_`#6Amm7 z6l2Tn5{nM0(iJ!Mgu$QuY2&fGRAIr0M8WEb6IB&w6%4tSu=|AZkQlTzmj{!L9@&0%8 zc}k`jEg3Z_nPnd5_@mXsw;Skf20J@=3CD+fsX+4tC{36O=>~~F>jHNTn2t(Eu|Q|+ z`FY&)Vq=N3BKT#g#q!ska4d_Xy6HriEVE!)P~tP}g2nVbO{Qpf@y$dm>vtSiD%eKC zyFzsnR3_!!A~K?(R8CKOP}6=w)#-oIj-@KcCp9LXi0`*{E^o^@_M9T{Ho z@a+s{$;JB~F14h8lk&;7s#6G-L$>7bL|ZCOn56_?)f46FWE`pjI2MKKi?Jh40fdH!{B9d zzmJRMkLNJ=dU)7SOsn{0K8`(s7EO^S(xwi0z}ij9|) z`iHZ#7|?|e5e&(~1l(wef~u|ry6BI#9KB;$j|W~0bFaupCoGVqFbupf>BNU`ml8;o zQG%zxO1cq;qLDwa4J5&M#5#JdKO9ZHE2Ok`n;gmu_Lv*NQDupcx3BZrVN^q_n&@38 zOO7kFFO}$u%&9p0KQo~ht46eoP}hrU*Wp|roto%oZZ%lo@oY(4lX`Y}qiTqX_~I|m zIwxtOZmo5YWvxyjE!0A2h4s4lBQ;o?Nh}>LD{UlK5ELdUE@O8-cMUn*q<5US-`$&v zc*{tZCn(3=R-u5yk1t3LAve>fVf^kkDvviMYAoeFuXq!PG_0|CmkYWxfrtCIDIFX)_4TwjgfhO;z`Cqa_IqL89Nb+VPCcQWY)kesi116G5) zZsm;E$5No}r~=(C)DN$g{nVXSAM&f9b1aZ%{<52c(P4qEK?hn{eO{ci_3?O=oborQ zRu`@{1pE@P;)|&3zeupf;|F3}#np$9?G`mu2O_e?yfw}IH_CpRbz#3hveNwW2%+QH z)C=R2%iaf8fF&awsyh3#=+bY(C-7?3f^hHytekwToPN5lD{H&nKuQBG;cvD7x-P3R zfF(Tuwy7>F94%c2A;;1`>p3@;%M(y91<9JjjAONE{{s;ojYNbXkxJ z%gFpzeNrR+8|1A?w5cSe$176Ok0XMu$@U(myihv5OBO@Q>k|EIn*`||a)~e^$#?ZW z*Tks%86oU@4AW6zmi+9GrIG4SqLlK~5VZ0_q4H$SpT)$cFpc#jnSJ$T*{Rrhs7z}U zK`O=A-_0&4-X5I|5qA`&FB8^D8;y~Y)XF?zH*zH-Cc(4jn<2l(2PP3xTb^WM2HXv+ zE<272h^)%7@WfG}2eN-Cy}6aftJjUy*rTdQahmld=0!IxWi@n6ra11MR^16S?kS=p zLj_mMJ4+rw{R>8myL+B?PAk$;v66PU)IAxXh-YISCpb&lqsf=b=!+3~eig>Y_RI>4 zrip*kFzU-_+A8|oB%|K=X-Jmu`RAhu<>;y#FD{^1-0N=%FUc>~?(7b<(g)sm91hsm zSHp6h^7J#m9IXfQpQZxz@Hp5D4w3YJpp3+>G@q3b%zaMww}t4dnb3=+fa7|CLdt&}f1sU0;xk!USBO+!pu=KLV zx`qt4w)1E}&Lqn+750wKEBaUMABpiNy@UHo80=Kshh@Z-s^x#bp{jE+4>UmLTfCuMDS^@utNFsm za|=hP(^4X3q*Q1IQb(mJRHol#1XU^$li7Z&U6xlBD~%ZCGo)O{SD2KXax0<+X|4>2 zeZKRzE_Pb{X?%~n{cgRQSJefWIa%TE0N6Hmb_mV^O?TMm0JtYV&2GTe;rHA3zjNrX z(xVCJx>{E? z7omC+ye}|e*X_kz`6tSbA;i2cRGNQW`O1~cnsQUD)EHWcj(#N<3+WJ57_JS4TLKTE z4NnMD(?)ivtBAx0+${-3l7=*4WvPw(7q*{0Ee!o~AwawfPg)W=f7xM~Cw1MMr)kYv zx$d-x41v6#X0la2LKo>8B&o$;u?ez<0Wg%?26<%tBz*`>^>Qa#=)j$wJm{u|Ri4!$7Je)LQ&(KU&9#)3ZHNQMwHXn$gg%KlSI30r+_(n?FyoO_bzob3mLY~q!2BhYHqv2Wc+#I& z*ieo~iaB1Q?R&(z62S}#2%MfiuDKCo{MYLRsp|pT0<2#_X15i9+*fU2I{IAU;&G90 z<)N5|*n0iA5-7`|2)E%}s8t6JlH~+2z6X2&KK*`MVJ0|aCOU999TGX)%yPB*jCv*M z{=4v$S3TVV9@;kq+c@UooF$~)Q_uN_$bWldn@7xmwmDlD)z|94v{9r5wNG~r%aa^` zqVeO-kxBA=GMD){Nu$n!29M8PaGnb6(qN%Kw?V*s?0H4x2l(AFCsDf~0N*|U*jHM` za6P^OGtUrR05>xuqcMQpA@e@~;v1m)7~uEqoE@3`NMiiM2rI#F$?McA?#N2kIp^q* zych{{#O7(rn2hPT$UV5$Ai@`Yfdit=N|gsa(s>TLzs>;0m4t-51HWYHvvuP0+mMyn z@Es2#W6LBpSeuw~?yG2GyU2GF$^E?7}>MsS@MdQnaKU()Al{i&m_)lx*R0 zaxzdH&5V5IqSzvk>G>F$bgk{li&;)PB!KlqDnL0#a2UsH5l^9t@Y|(HEX`6`+|ax- zTrzcicmqQ6_1z$GdCJiyn1^ciVoJ>p!$X?LCP`V>5ebaPz!k8fiJ|uC=xe@SUtu3lL@%VB&zRbM{`$y=Ox4{@tp}K z@d72Ft`3nEw5L(#jq#}JkJ5aiz*YW(r6)lFAFsmOr>Wzj{N~L}s zPN{frt|5OoAuH70P&Cdn0_nzHW%;&9a_)T;+hZZ#i$qMe@9C0=P^&?5kp@MTx1^1# zxTri8naAgE_HTzZ7Ha4OU4rQ%^)Q+{#g}+fX^^55@iQ(|X6ZQT!2$EPTMJ#|Cp^@h z`X$46N;Bn2GIC#}Buf`loa_b3sRR9#tuuv4GI7H60O87~5mnxvi7l#3+@D@FshxaB zz~Pnb=}y26@%mDN6EK_|{gc?@RNAO#wtrBvgD&v-;CDC=@mkFRXoa2yRNq*`pZrXw z;Z6Xd4}R6TKSm7x*C(LxWVTvQ4ebC?gpJd^GI=pu_Mhm^oxEj>h-kW;&)00=;)S={ z+~kKn>ZIBwQu-Iwp#@7FmIT)bxBePJyVz(`6v(@?lc5o6p%{WQn)+&n1`Sg_(>4U2 zw)=~T?}%o+pqTw5YkXa$PghMm=KE(;BX=bAyDM?Id&W1 zrf}#pdXg2Xeaa%*f@hFsmD_3XMJaAc#^%?b^v_!b4@I?;Dqr)mNd8r3a!?EUoFjA( z0m#Oh!Y*Krw6z2^Ay7A|gaIfwam9ZLsj&19F=L$LR8}!;B%m|gUy3UDZg3+umf9|E zl_zKURoxu4v($ZW>XKR3J_bc@@Ox`#slqd)*;E{a&%cp82kSn#?@D zb^Ke;1uMv|oTq_P6}BGD<<8{6Dl}3(yt%@cN(|>CiW)~y3Y!hh~@PShE=w86)f+oLV zySP-QXo^TtBd9XuTucmG(^-kovVi00aAg8ogAMDE)0HC(U{-Qr#e|Vk?^njc>FBEy zP|FHP>KJ3hd=YRrkEyFv=QY@K{c;(VI#S39s0PK9v8YG!rE#ejDNv(RY?Q|1(A`oL zM^x8jKI`={kP7X5OGwA-1HqO$WT>-ZCsv_m#Ya3^EKm(<}I zndv>&z}TgWQ6A8zTi!H0$MC*tY+_S!ne{Z7rWcirs4Q?DwPlZcl$;}pKT@jgo07q1 zv_wK3`!lYu4Sj!Bj1Dgq<%mvO_&|}DXnJ@l9!Ucj(h^u74FzK3q+fqv^t|X5_weEJ zD{E=q)F1l5p*s{ z-v$d;gNoRMhvgEIpUZ^P{GzK4&pa9&jutrQ-0m`REBf;nucr_@__d#@L^j>RP)dAq zY~>$94`UP4GZ8%AG&A$eIV0~i+5DbF*n{ir-XK4K-QjcnpRrQyXIk0!>d4Id&zzu@ zcLS&YU9a$I|5J}T&o>8v8w=pQdDqL}fsXBaHfdFdz4&h)POi8*y)*I62X`FiwE1+O zSx%`yk@Qu_}ZrIO6 zl6mu(INies~EBTuu2OZZQj>y)&6 zilONz_*shR;{bZ|MDkdPZ3?Go^>0(Ut$Tx##G4Vw>SU(`*WpPQqf^r4IW8BE``?$3 z=%L-hsto~gTClrLC$^VURsSq$53{!d6|)SkeqOQ^A^Ri{vD zpYxrD33yR?)nmW&OZ!o%-C_599xR-%QU>)mQsKrmN=S_hfu}X9oId z+0o7LqwV@?1L?fOzdmq5mBu!kcDMe%UCZizFrqfNXAhfa0h-o$s(de2CY4}XJi=J# z`CY<;?Ow9WGdOuvG0376!DAi4RVPch77F*ZpM_GwrrKJO+EAo^X+aSXRFR7D8HcON zJ99+wqs8{9%;@gV1a*y;Bv{cM>7D$W1Y=$u?v@l!=Kw}enuyZz`yUE{Nkt@CwZ6_q zwDx0V*AB%YBU0KTz7i{n_{jztgbB^_NE|?0WZvZVKkm0Gm;@34+s@kV=q}Fz1+b2V z_|n^SkA1)|{8_sEp_k8M!5DAPnBm>SalLndDPhK*)>FjGUkR&6B+Hf7O=OGe^}C)R zncm|UnPvxdZg19P;pMdU5r`NDjX|s~sk{C<5h>f`0|ToY@jc28 z^!A|{oflXI?L4)QBk%=hgPpy=De3cTxxGP2%VhZ-ufJ9RQv*@He;_juqO<_?MzE=l<&Fii zs9ZU!#?{Ec2N?ljiN%5^MxY5-@=?>~8wP=_`J|cbu&$)GOTWN4(XS=~7Nr z8Fa?YwOvpafw>uw7ePP2+NKj>N^Q>yVQ4PaUng})R1Ib@X|d#zq8@A9_CV2pUSQQk zw}ZpF*r6~+8Y6WLKaN+@{!6+Z#QkZ0AU;W($-VKfD}I?(3_k_<#5^ZJ1;2=9#>Uiq z5E%R}>;|x{1N1TRti2hQ)QpHx75h8=2B1S2(=yTyaPu+x{Mqs98FdLif6SQw+wHOp z&_bv5k{>N^vzwRCbX)H+OAixZCot*{-*_TXgG_-pxuL|>jk^7(^9&nMgB`;4*9_fp zj}|6J0Zi>y@@-V~w-SPmge38BfeLmZfqL?=ov{dO-$B*L#=}??EcA2Ldp8?0<3az( zZ&f0>F zU!-l*j4n@t z)7JQ3f6BGy$5IsA!*d@CIh>x}NtcNxnPv*p4+6MoF?`f|T!F-G_0SB0G-g^m(876j zR3U10kL&aMSlzhhS7C9wWVlez1Kk|&6)a0AZyy22ubz>upP0wL?Asoz7^!bF>S436 z%p$#ZHnFvuAWA`f=p6VP(A`><;wF*hnzb!_!`vAZ2*1wV)`lo~^Wh}p2N_k1Hth@_ z+k2Gxn1A~=CG0b(z|)N!Fi39uX6@spPRua~LwDGC8j`A4zdJik>21`RU`+?xTSg3d z$EAvO=b-0CorrnlENh`A?`s(siYRhfy1K-FP&}-87;(EPLtZXctB5FEb$6EEp>i`h zOV~UuuudIRPdRoI4kHHr}2(UWDajfY;W4g zO;ZB9*y3-ys|IIl$ZRA_C>bYGMXN_vrjKs8ZRhX-mUVu<$z-NYh#51q5i}PIJQUqW zi(rMv9wgdbyzd{{%4Y`L!xH&G=iqc92u;?PwsQ8nta4C8%aL@sl%0gg77ek_yod$+ z2M1G!sTq@NNRAYXbpI+7PLhr6d(YOH?muXB<2)dqK1{KX=rU(+Of4@Lb2g-$NB@=6 z^a_Bjg$o_d7({SZuvS?U6a~1@Wd54PL(oFe35K+2?p_30la-d)4>&f_mg0Z8=C8TVZiuf1@IBv0^+7 z86PI8f-mV97=D^0{L(&Tb4Wd0WPV4}YCs`-MgBn%_2dAlB7}-Z9*(OHv5P{gt}0Ip zb4WbROeCaZlx0=&t*sYp(_3U|`}ypWZ=J=N*0LEi_%a^Ha6&KXK;YkrOw+UjiYcaj z;(~7+Fe&FX`-u1?#ROS8u72ntQlZ!yNwz@~>2L(SeOtpME!!@Nj&=uKP0MvT#hq#T zmizTF(t(JY^Q@q7$KZyv(_33h3Q~wamjUms!M846*TWzc=bp2+;J+T7=?XxWJI$OG zooyp5(84!*<|zvJA0k$iBD_Kaqv>e$t?{2)%qZs2+0NGW$fVx5DvIiKl{P5fOQ!JX zOSKD6W0l}&ixHlqO*;t2NYzxEFQSzsb84KAFn<4}1TRD1tXnEpU%c@u!c+T6OZxn# zI&dVOk0EYPR(C0~r6W~^rz)O|5YMW(a3o%e4*XHyu~b6PlQO|mP4bQgx$T}L1A+Ah zCXSW#-DFph{ZZ#y^(dJh+YZxsK2{nL=5lT;xcB#LMKe zIFR?~lZA|hAR3x^ zLuH3+fO1n{fkm2WsksItR~vqz_7##R-LGNC=}7UqHMt4#Kt>FXge__- zPz;yjYyVX|?+MyezD34+Q*aP7Zw&{o@%DDi^#lfGynKABMqF|oQ7}0D#ylPU7eEM5J3)@nda%MnPTwuG6nkIBLKWRPOf*?Bpg=nCz?UVXRP9Ppc+-8rKv)!fg&6J_Z#)b zOh1o1tHY(er&WJ}R>r&a*A+=4?mVKM|4Qa(;VVIh`kdRTJI396R+SU1V*`3H#vAyf z$NaZo4DHjIpw0L5xG$olzzb6A)yt70@e+hbuh(2CB@4W{(HTp#WdzLV1!paDI+JT| z;bj(caI5QpsAG%P#W=MY7V&f1Ou@t++q2JU&z=c1wje6rSG1*JVWHpb{V$UD4#QdX({YjgGruJc*rM(cnwL^6H{?| zA!B%YrRrY?<;&%VKgly0btkX4N-h=J65|^Nlu+)DFlypsB<)JEQq7|6csQ}fCx~kT z4RPy?YRdk>LWTQ^FZ_(*d4NMXv)*&#&v-)L@7a-Os9C@|!T%)fj{Z;u<#B(`+I|cDIXVwx$9S(N+5Uc z!_)PNccJJ)?Vvsa*Ri&2*}6U680#iYB0lq?*vnMYI`J8A`rUM_nRnwN_O90e&+(NU z&yE9P_)RSQ#GpH$q))JAQTCY_Rn$RIvXq^rhK)0?QuXGOrbx}jV~PB~4zdK?=J2h# zGugZ`cv)h0E9Ca_#Vo#rtaA|*A@MX-$CtSqttiKiM^!Y`BN>DUvzXFbWUIuqIZ5_b z%cn&OMqD04<4dSdj|7i=t}-#oT{M|OU@kV?k|1?m5XYg4Y}2q9xrMgGW8w$+=gU33gw<3qAe~N z#cp!3w{ph)^a#anl{m*X{r2zqA8oWVqCrHNRg}ZFp+Rky3gwlB`B)da+cC zy*p4}_)Qv!)|wiuUQJ5omI^rFS^UAsgJr z_(!Msz(Op1&=@Bs346zvBW^5V$4S)=(q8+=woGXpy~d~5Q8`7bCjatR3LG>giK^!5 z)BPpQzFt{mX9wmT3(2jgFG!P0ecP6LI(qJ8Oo#?@XOlV$UAR{)+|4IPQIex!m%Y_q zX_|CyjEt2kS0$YM?L1Mo zx<@Gxo#LQ!It0uAhSO{!j^V!2?jU6K^q<78{#xi{!>5U0>vaW3qlLfm_*wqZ*c+D% zq4n|)V73-9&y(=`4S-AE*3b<(8f*7d^DXe-gS+RE_n(9D-tPLR|7MDu8(1^{!INhI zh$jFoUI2g*jcmDqUeUqN4Spxlbxb z&NJfLmaLa6+{{In^~fd%)gi+;X~JdnU6JogRrgZ~KlNBPtna>K@k%X2ALFo+XqtO~ zWb0RWSO}AVg@7#HHpTuhX*V6~V^3y2%wUWMTybND^*I^>xGvir{FDjvs2v|sCrVO4 z_R?6xfW&MF@lgxIM>&aa#+%%pA~maD^_(Cd)gP6OhraJuyW3jIz^Mjdp!F$`Sq((N z(`nVG#y<58_#E2~bJabxmnIbkQ>@p^-_#&NLVgMihQap#lY|n zh$@ezRIG^*>Varg8FB1^YB2-zZidvMLo z04QnO)^?*eCQm>zk#!+xs`Xr8|B*B>Hoav*R7Ub>ZgZw*0M1!LMa|d%?yz<>ZTsb! zlkpg%?D{wihB`_bi;4upaczloCLg9XAcLl>+j((;6dH0(({`gIU&pYN1ejr%QZhla zjX8$2ttmTE#K`fR@4dq~cFtdUVTh` zao>K=R_}k$y7C19>}~b^|-*ebN{EK=YJF@SNetN5 z6VB(C;QjKjUcmI6{!EMpL8?faVV$Kb=n8rH;HLSiOy(-tCpxf21m#)U{b14uyhGsNoK8=RY8j1v({0K? zEor{OLcxE2RqKe=SSX~e89|j7r36oiqACJKB+F^q3Z5<{&))T{~J38K-2MC z7SGQW8mI$qXETnrqj%@WlnyNGL867l z^jHTT*Xev6+#)T9iE==+D@HAGdI<^Ijplym(lDdJ{N>|U;tpxy7#cV3XG1ad-3{sQhP67@ zTzy`8Iv`(@1p9yx=-(l*&6%s$Cai3WUs(cAHPMX$THgM`rKyF53R`w9MR1JyJPPjL z{o7kuzz-gU)O`MX$(Vqo)zR4!JBz?VwVB;e733%5+S1 z%Jk2|yb}6!OoxpPG~eGD=;G^#9|W0n5{WZ(sz>*^>X+}w6dweTh@eAf90?e%fYR#y zyugG_`TZQAg3Qg#;)1b&tN66PuxPbhS|ExM?)?Sr_9`+Fkd}i4t$TkYHo#M_KwW>uYhLhD`UL zlpm+$aAmsJONFA= zsE2F5EY6fJ1l=8c5r|QBor#kGokQI{R~Sg#%#ji#;#5MQIJFXVW;`t7fmJyR1gL@3 zkA6NVS;d!y7in99nE$)=MAu_x^;3FUo#^ML9@=;M!0+PXP*xpa@`3gcQAyhyZUPw_PiA^RFU{Ef0qeMFwwGr+Py-arjIvNvI4)mpx>3*!+0U6A zwS5_dwlj3MkW16(B*W=7xqO`Rw|X{A_B&qu5;vLjw*k&Wh#3+Q=~zF<$c9;L%H+7H9ECsEBU$d72tkai=4e9%GE`3qR=CS-ZipfaSC|qbSD?U zf2`MC-fMv+Tn>|QCFtUtPw87IVs@6wtFLt@tR)gaT+$$HFd12EG^K;dLoaIdbTgCO zjRx~-F4eNlq*tOQpk*0pWwZH;X%y%jiD|VvJH^5$SB*Fq1rF9t=S!IUw0NwHlVuNu zH9)79+D)|QWVdri)D5jKGc^`s62z;NiMIuh_hVIEsI#q1(~q4Pq><4DU4XFtD8F7? z);f>~4pSMR(m9zln511PX72Tcz`B;8Lvb)pqw%;z!u(rzimnRb;Ff}1@FAR%*YBZ; za5Z{`cbzaw>*nT)8c0RjRJYxTc_zieL1NKA3NU>6b4nrSR0kzg@U`IlCq^Q$(jo&2 zfJf2INi3r@Ugaq6gp4sya4uzXN z^veD%X%vBMx_cOtXRyjN4n$oV#K!FCvNBL=*wiqkb9k%Y>i%%M#CK~TjwklX7^ub3 z(x9m$!PuY_IZxYU#>Qa&nX3NcR$7;a^9W-Ax&l}rH0ATC4e?sAJ%qIZXGZ&11UWT8|T81o{W%V9&`=zr}OZK2GjjFy7LlAa#VsW7&P%XYxwc(kxATOQ2++%6sO zch$3XeSN$P$^pcvnq9|uVTvGgEt}WG&6_(lH8u`&0HXNLzVr@r?%rRQ&AV6$;&e5% zjzjytyKWzPFW&$#)Dzl)G3Bn{=JQ{6+=uXv->c$US(`t28#X?j9l(fT+p-_O$e@9J z#^4?b)C2)6xiSgnoiobjL+9dNfio7Id@xCFBxXTvLbT+W#g>BFogNCyJ|gz%$!rMf zyraY+VE}#FNv1ZFey}!99mFZ=F$6MCiPYpy&+>iWq8tjfs}ARSfFhzeLx~ zDS2<4ux4`U3&zDcNhM@SX5n=-M<-HPY2*KC{yA(+5XO@s z8U3XS>3S=)CuF4AxPe2lXh_>my~jHskxFF3m>1+TiL5cmaF2qJdnt?~sF^5&SPQgR@JGJwWH9MCA; z^zj@I$I5P^yvTD+FCg`>WyG~amPy6MYMNPI@rd+mMy4?)m|$T(E#vymP$BD_0QE06 zJtZ2HX+HUp55t>8c)<^LLNZ-49iWo$bH)i>$1y!+yZ# zNEjo)tv@Fq3b25<`y+VRSlbx+?6v=Hb#rxv0NCN?(S7xD44R~w)xgKJVbVN!jFcrv*1kLii?Trjygaf)pSf! z)Un?%7|D?E_7gM@jaApehzrb~Z(rqT!|)D=8%S)WPSt(KC{5><)CL;pey~f)Zeq)T z4r|MWKv~cj9f+-nq-MVTnw32qtOG2-#!apHgM8Q-8F}&kAnW^j#eW#u)&1XAN6c$} zL0@SVy5_@;)hQI}!OG*wDL;xeUMxt>6)mm>i0GImoBI9$g2OBvuw3HbK_rsmQSzH* zmiKU(8*|6f6d7|b3u2HtwO%=K*?QVHgX*zMUs5uf(ttvTfqYOZU#$1tsW{CCfL(O! z#9iK1PW6)@!0M3s)Gz2ej0==HxB8mAjM2RQv=RqCK~tQeFJTNgn>1Gl1$ z7hj~VjkH9m$BM2;f=5cx(^C4EFy?jYhC8^ls(OdnT?(-h*!2(olB8rQ5RJ#JW`9yP zPh~55_mgyig+|jBqQ8<-df6u^*^+o<>qBl7P0G9t^ul29F>y%tl)^oh^T@n+HJGLd zFQUc}WAb(7{TZi9diq}g*FY%02);zco3HE$Uzru2w`1_b)gpFi z@5?>*QSPx5xyR0=9(ym>+R>@hV`m@a9y^zN>_Y0XbGgYnmm^^^k$UXwq_WsC&cwOC z;BU4JBz6aEHDce($-&ACnv!rNkc34)jPW)g56g`k5%RfG6HDASu5`ur%!#I8vHj0}9jKaA{7T^ka6zo}%F$|#DxMDAWr4$m25C6W( z&5E7)K};$*=!@FT-Z>$vk^vZhrP4*^$NJqZuChv;WKY=lwL1x&X%Ir&pXj3aR!*`| zHJp@Js49)3LPXd={ALR7FRPK_?w`P{`2pE;Fh>h4B#V~H3(_iMH={0N{V>**`AwqI zcnf+nkE={7%2jHyRo%=K!Vb7XyzYE4WK=WMlsn@IOY^Kr@4<+Emdnmt$0lOm2KHTS z*v)c6We;hH35tFgTUY~AUvAv&tmDm->Y;(@hiyl<4k5z9Ywq0kR%T9YyPo8ZtO6Ld z1GAuUa%{BPi-QNF`Yt+~SNNJtG`R>pE_#ePxGJF$ti@~D){T4bEr7;Cw z60Ar8mSGR=xsLWajWahGHVUg3pO=qU&IHGlf3y4)adJ*}}MgHfF_tUvYHw&%0zVC#$K@^+0 z2u7j)-}c7F20H(>zA@zgw(*gef3R3wA1o)|d1xa4cf7MPD(XLs;rHts>!acRmsUO< zpZ}Xb0XZ87ftS=i9g=<}5C73|YcsH_Y=ewR~UqS5_s7?;w$w^Y0+28|Jy_DT%^XGtBZ2?3?mqcXkJr7VkfU3$whS+`%ES(YZe6!y+UO4c_g)J-)R>2YAn zdJ)EfX}r#i17F^{k(C74tk3~_#k~_*w&l4|Yz5aAbZwgnezQzvI^A?pAtar#(z~ag zs$$Sdrz{>J-89CpMRbw{5ZyUb_u8Eni2&9o=gD$?>-GM{33?Ljt$`Ie4oW0Iuflff z@reRhbYUaICv8Dy{mpZy4iF+1EQw`-c6`SHhT7kaV#!UusEDSjDOi?T?PXZdg@Q`* z0NdYASC9&B!d25=W>zqTrZIfz3e^%pL>Csu@S*4-O9T#6n409DWr2v7lY`4aN-j=S zg5o(i3?Z5gn3;6LOe{b@{OchiG7MJjX#V&TGH?3vk;wn}2zFYLH@_)&gM>*|Fb@V^`F-_cZT|J?RDxEopkVFP5k)1OWlW<|4e)2g&PRI6$mLZBLfWAscwQacQ{=iIpdN#Mt~CL=zm z)dSn;VM^5Icf+S`5B-^O;z65+Ne3;OCLBgJ--m`%e=gA)YV_24X;Bzn4F|w}z6|Y| zAl*o@)ibag8;z&BH%1xuICwA{;0_|AZ1pAZ7G@cBclK}bDC@Fn8l*JGu_}opT^KQh@1=pn8ZlBaMQYS2Qi2CU9T*9P@ygqLcC0^PTQDvPzmMQtMHamI6#e}W zgx>5I&`1D~xC`zUo*gC+0l^vmbmFL1>{tq#@NEi$GEh``t>0mMp+J9Jh0Z{6SrbI$H(g6>NiUdSP zOO4nlwF`4WQi=HASH}hdJACiN;IUBS1h^pn2ZJAH#Rnh_+J~JA^tbS z|5`o&ol27yof3b!cl$tj?7$V1(%Ow9rs$k>!(mLa1>sGATXi_8M zN_=FvnP5w&n>^8f^ZUHQkqpr?U!FSIkU$OEuw|#wn@$8mhR9L~ zg0%Pr$Nb7tgzk$bArpF{OEk;+q4Qd=pI0ZV)W<@(nFsvbSF761eEz?L<0Z`{}d z5(&AMYkA}4AgC~oj6c4YKyV%F6y~W2B?@P?cND8KTgKd@Rgv2}=cqgnn{*m40WdtT zG0C+QcQK9UaX&GW?F~4H$+m~%Gs8#aBjNx5d_K7h?deaz%v$ANMgIS-_4TdX|G%{j z{r~IR$V#=0Zw!WUV>8hq>~_%?Ir8bAQsiA zK&4N!;en|{tVgB2hOSMHZr!^?k;W%ul7DM3(H?KtEY^^SJ8VVeG~87kPpa+4LABY- zpiZkmZv6z-HQDTW_GOLHCYrU;8^PS^&&A!$u&WwM`q{#BW;4fg!G`}N?7$G~-5C!8 zrkv+XNpzKlQ%j6wlHKe}v(RMC8ipng9j8o&i3=bNM`9uviMb1ddslRotMU$D{HDq~ zU<}!waBDHNTrLB{EYT)YX9CqM1#zmym|yVeuJGWvH@8M3m-aMv?}5GK;JBxUU?BX- z&t~i3Q<~SG2bJ@51VIFsH9@8s`f9Bd4Pm!1DvnJn2eBxvrcS^)GeS@urT*G}iftcv z6?rbf*`ZZgjG#rsQZ@{Yo4(4yTEbT$j@6d?QVZ2meFXBIrn8_;W40`{deoz|%(@a` zY0MGLi%C{&1yLQvtjb|1N%4WYNs*Yx0 znk8^KIFL*v2SteudVvNvI$h?Ws>CXBS4(keI@6ko!BQky!3t^t)V5>OOg1))3@QJ5 z2@Wqljj=8zI9*|RJTgt^`fRi{!qQm7Lrl8AABp%cI(IfnW=iVCHi zKHfn0e{Kx-f41@&;=e=ux7G7s9Tokd_~0f6JOHR*0c^N=4*=8Im(tOWpD&}Xxq}J) zEt1txX)MmfwpS0WTm`Le?XxOTP1GZtJk75HqX+Ev!MJVz3CcO6B?Rp#J`W8CiD9Ft z8smXsS8(32>7$ki0(b%LjoD_Ma0*=lHx0DiKyk(Un*-POp1zpn+&y<@oWpjbpT^rf z51o5ASVYFlU|t3@ATX&r7~c)m5?Cj!$Fuy7XmRwN?LExTV@g{o~e#>F&yYzz5Jh4?H`e)unVH z5$%w{I*>C82fv4!vrABOmV&2?*RNBbx?;!C=}%)4tD;`M<66^MlB}A&>QSs!QJ4te z2u}0&vF7f~@$4sOHWb|LCpt83lf^e>AtS*&6*;lA7|F5`RYb`l)gy)?%Qq+KJ0=S_ zSEX9Xdrgyg?Nyl=>JkriiM6GtL1roIWy=OllWarP} z8*_~uFrw)p3#^YHiTtnqMHo8%^yxt>`RkRi{>S$AXgkmU+Su4Y^*`2!{I6C%L;ly0 z|J7>#*9FW~XwPRFh0{!anT>PJfGm`3xd~@9gs~eJblNlScy2Yq_W~J6vE|N=B^DFZ zSpc>Z?kwfmNo7hZL{uP6I*w|zQl#9|Sr5uiX=1KrqZ_*PWQ$+5ADtMAI$`jQk6=#( z|D+NoBS`S)CFFzri0BaP0dtfjUZwdIrIu+XUl55pB@&tdDQo^5SW`V?3pk{P`Jzp# zn_>(@FqL9*g;6aC$PwxeJzjvxQ(=?pNd;7WHYtR)6sKTF` zD7wt>Oe)BwnI;pOeL&0**T_OZ**f}w0ymag+Kq}pDt()3FN#V|k+HxJW=0fquNJK7 zCW6`!9;9W}OGwBF7>j+gjgrQ}rA-t8lC=XC*%iR}@KS*rQ3J(OMSM(#!_do%&^v@K zW@n}VBlI#O&-=HzXF+W=Q$&rj7MC~)cIk{hc|JkABa2b+t&_qj=Vz1FSOozBHi8)X znv&t#cXytfw6XTM0@m~jES<9g@OBcsRo3NlFjUV`;05Rl&Z0!;%UdrVny2o*R{gkq z(Jm_}&l+PcU+KdnMQk?fosBeE;q0Mei@cSw_Au3#OPTf~$W!(>Pl7op{Ya zAEVLcXlG}O5&uUY6#w7Z+#YXlg6F{hj@MsVTL$_TeqMO|UpW6>5Cc8!Daqf|%K+i$ ze{7C-Hg?kd5AaXG3#k6j`jG$8#;4=_j}pTTIUou-AZ+Zq$^)T|s8Cuc!Qw==z|wnr zPZ!P&V6B68qx(sxX2b6i)i@MeJWi76KRI1wnlL7*qX<89Fyui-Bl^G$Db<~F zLNSIe+2F$VXTdxZkqzK5<_YDq>o2yqz(uKBx)x8l;S<+KZJKP-e$;NVkBfkq^RDvC z$sv$SfMm)RRC~@U=&N!M25Um$pk_4_B1j;ZgpHLZQ!vR28Pg0iQ7h?~;iHgCBV><5 zJt!>Vj15Q{!v_Z7-^` z?s%!{0^=8dlxqc*l92gZc`Y(zlai~#S#_cEaO(z)7GX$N91jCSq>()}Mi;TJcx15@ zan2-HRczkF73H}>_MuTN3$cdy<1Ag~p@=0DK`I9$%*Y@na@`7{Hh{on0}}=FVyIEd zDl3vn*z*=dDj+1^SJCu|m`&;E33{ z0gb}HZ(vq7T7#L)x8lIcL^{S!?|1MeOvNgYtodb>)A+rMYt$VlIJ4x<ycVI;m_@a(S~ir$^$XN&jd09$IPDnh*poXCj& z5`n~!_C_&c3Qvq4u#G#Bh!>>UU`LUvu0W!v-%3FIE7!TPa#(&hNB1ahpbrNrj1coYupGooi@fzxth9-$1zwgV_T70gLLu ziUnX`cfX{i3V!>=cOHI$zMHf+(18P+UbEqsiEC$#@=vL*tG&Qi-T93bg;UY6-MM|^ zL~Bv-FE6+W{G@uB`p3!kC>%TWI%*?&8z|1!CC@9qFbu=Zb@ zCrrOO?#*p%@XY4>FqrSVvEh4MV5<`#{xHsQ4)Cg>EA1IsV+ulc|i4Eg%8JNfT zGH3|l%b+QI0SvX!Wh{z)I}BZ-7{+oRWhR76H%FPvLnt3*CNCW|1O)8}b49%B9$l`S zHNL=4UL-Wtsh%P_5nZ=%4pEb~783c8(IlI#A(UR3YO+ZrjBboJdFcv@`wZoy)LU$z zd{jj;rrQVFnc9YlQmRQ#gC~73LB6avScGJF_P-U zDimEIv|XJl6Qnyp>M&)cPvt5TbTdJ!b4;x3kc)4_I{hh=O4|ojI)<{K2BAnm>hz~e zC?P!6*@;&gq3l88oEH}QhRP3%9TMd?Bs>k35ec+0{CR=jg?vb;Q z?kGy%PfxT(=-kRQ2t%YPp*+O95GG@+T8DmeWX7=`kfejJ!@poo0Gtumx4f%}I9`{W z088$&bY|#a9y+-5d2&8^V||AI^WK>qKE6TS9(+8;-o6A)XKU5U)w}GlUbL8J{og0Y zd*C@UbX#Wj&Qq|k9&A6x+8kResPE#Nb@&bb#U}Uy45awtAK(i#$l@z(kbwoP!0-vR ziiki&!Lc}xHZ%s`6hu4(3vUKb32m%WT7W0Ova!=%8gJD&0!DN4(Ydf{#t3L__`K`iy1HJqswk zYX?n%o3`5NWIZT)bj(iEibiYM#KDq>^T~u z!`9W+$T)D#(wxgjfw{_awvVeG1-_f+2Seo#FLU;E@u1Bdy*4;*`oU|VFl~0^!?Ek- zICkBekMR8WESTE>pSvgh1K|Ag-|L&;$L##~`e+2cUtb@uZx83c+xQIUzlZbRi5k$s z`R{{7w(LFqa0`XRYW#FVQwMW9J?@HQ+0BWO(g?^SBk7NA92m*EB8cznUA@U*D?knB zDEoJglErDJu|3%)8K0qru(8+HUd~XukcG)8TpJo@P#s=4sgs3aM@TvA5B_@nbcSjog*V+%@Ws-CjaCo%@aE^HOZxf@N?IMKAN6g`D3ER#f}Am#~Sl zI4f!aga7MiJ=1xan~^8Wn?1_~7BZzA(eg~z+Z^HQPS0Vlx*5R@GFZ=ZK6}E3Jx58D z8JjaBBO$h=CzLZYX{tgdzEzVkXHk(CC!a@JmF3Jan#p!GFid)uD@!gkJkTM#b;xcV zK1M&n{NML>6n}MWU^Iui8NmGf->t3f(N>ZFyR{DUe>b*9L;i0YpCSKu$p20BpbqkX zQ@Jwa|K{K7C$r#Kc9X$U8UdNMlK$96{%_V5L3~g0e~EOe&v!FBMr+Dgp4+7}M<&%G zbl#h6_bV^}fH?Dv=3;&X6LsXz9HYsS9~X0XW;h-3z|5jA?j4>Y*Iw3|&l z1!f=G@J+V*1z2NOu4g)Bbm50?WR!f+WaJo~^xo&mo&7xl6$1Ggyr4`D|>k--|yTAP-Oy|h3n{?hm+Vh+6V;spqiw;Bufph8LoGZ zxVe?*bZY=vI?2s47!qhaaQUiuBm9MrsTt}EDQ-jz)uy~M9%-^m7KWm@?@Iv++PGTW zhu9YqFUv;MJYb2?XCl?8 z2}m!y(&PcCxWVecFa?dF`}-o;q6s9h{1X8Lxg$-U_QDsYP4v;Zm2QUhsbwWca0#b7 z)?_hYIK+f-+~)7)s8kAZP*=wr3+9$5m!!t7WGM~-kC34l0h{0+H+fDWJZ9R=f?8R% zcD*RDBFD*YvBV^B{i{A{v0nxx6@Q!Rp=Tux|&vQSL z#)a-a>uN`;)>13`+{j9543AuUr7Gz=pwaS+lEEj#JyD&3DPPOFw^#fj7TE03x&938&)J!3LLxZIk(`V}( zjSqJysQ=On>I>_?r(wr0w&%i7nobRPe*O2&G59gB|Gqr}->+|sw|9p6?`?dB`tL*i z_hb`qyZ(D7QL-~mm@d?C&7Ve!A1*}!(C1hAzQjcxRFJBUfGi=EbDL=(shcY(R)QV7>gwz+4A(8xS+Z`|1IK@}QQAp@!q!BXApMdjg;N>cVq zi^@{D%Ry-xl%_#xdMQd%*5=1xVfMD0tl{&MJ@aY_*7$koT)ReZ&dM7HJL7@d%(z3R zp_V6c=$O4@C~tXj-4M{9eYeMkfKa(Oe2hbT>6KN1E4xm+(_AWm}FfB>nS>G*Nm~D`v}bMk{ws7)y02Cw&X`$5IOu zx>c$*sAM&nKquYFYL22dE+tW=JRDx#O_fT54OD1sv-Tw&71>&A+Tw!X>|rWoA(EXJ z`gWqVSWQiiP<4FXGf9Bi`10ZwaeTQ;O0|@vIq^13h8#v62{lU9XyrRQOa33(d|_ z!iZ`d)dVala0K0%`Onu`7pd z9L$!MuqIM0yX1v07^=IZ*;gCPa;WPjyE_p0uZoM34TEm{C&iJ>b?k4AAL zLMy!lO;j|5q2+UhNX>#$Oo6~Y$gZ%!`&5QTZe>f8Exl5EjzM{eDghu~a=k6k!&1S8 zi>+3no@SR@&kINNXi+{3q#9njJ;z8?hNQG~8Kp?5N_)9%23v2>RD#UpkS&{G-{P$?!4!5!QeC-~{Kce;&AgtW*01e)#oY z#+&Qo?V|q6*3PTZ`ufJk`cVI+jn7d3WvKs>XiRO_e*tPwcFLNld1*DCnJ>OqTdUdb zjy;s1ylDThLv;k?5r^VDee(x<^S%i3YoF*9ovu=B&h%;C3+F~uuRwK#@GxhnH^?!o ztb%{z#tS^1YvxRW#_H8-6->ABM)#dCwt>=v(eL_k9XwB+_#p^?8Z0R>)aoGCdjqvP zsArxk9a7|*>?x;`;8Z@%Qr<dK3l4A3!_czc%}(x=VnHCdEh zx8Mz21?zcw14X7VC$nZ+19M`y_4#Fi?rl(;CULkB*S&S7L6Da`{D=X~2t8H=TR99y zmu7n0;*0!9#s6*tU+dzB^uv$; zZH(7<){FSx_UP4UeZ0M~J;eXo_zdyCA^w-BFCE1HkYG6idu)r5D%7Wx6MC7#e>sxf z#QyN^$-rMR#Vths82nT_267$-_dwAJ@$zQacXdK+Kr5QYc)P_{`pq_75x$_^2+j-t zDp>f)QY71_z}*NPhS>!QN0R}r&lktbT}Qg^JmqVm8FovXuP(wSi0C=5$z{g$oZl21 z6xA&sg7WGuHhzHy&^itur?<9$GiZ=}_4IE3;U3!&T$} z+Gi?i1`*aVXD|vmMET1)2}I?d1<4{rU&^UNRZCT>Q(QRc&`9hRT0JULN|mTmU1L0} zLn|)7box`Kl(xv#Sc#VkCLP}Z*5v=*06-g9J1d|!5KzWt1_4Gw9(+fT3|jT=($nzDnvgL6uAPRa%R^5 zpS^$GjvGhv#ZiC#@3qc5aNOrib+2tpnWec4MJkq?v0l*tT;!1)ynYm`FtxOV#_#qGo1R?^FUk3)YkXF>bJSJFs5@|#O zv&^O^F_knh;Mh)2Z$fEc!ZxP{HmxLK;+5u=YJfP?AbT=1OBDs4RrWOJmMSV7L#=PK ziyai5S$*Yb=%PW`Ug`j2DjUrkVEG(-mo%U=%Z;MLaMKM4Am(&8ici_K*GqU*QX)u; zm8}5kr<*V)voH-pX>#_db|iOJ3fWYhWj*7RIlY98Do&SPrw&mjD1V~VO&V%ss`NZv zsPzdoNIV*wc0ET!C7BFO0zoEOZsD?$oeD;7y6Wm@Ib}&2dKp>N3d|$WROVPs8u=+> z3VKGOUz>;!;n8F;H^>OanoC&wpg{@3Bj@eI{}JUkrpzgqc>`CnuH zS8RH8mH%~$bxVsufp453j1=PLHJg2FH_>V%l`0h?@-Z+S zQLfGBm{8u2Tuew`)tE%lXLw}6;fw{FE9r((DT-1nj}Vtj;h1F5agqURRTc`8kyL{w zM5*Ti?c%(~IxTbm4qRS#ol>1hF_W&-XF5z7v{ z=j(&U$sL35$Kd<%WA3AJ|I3*ju4`QXB8mS$oX#dkY5f1u49EXZ4-cnf{C^vtG5&vy z|Bp?g4&wh$uivG0!V7__%~o25_KNME`76_LV_n82kyv&Um{g#Ej!dG4x`ilnzGxYX zfrees44RAzH+^LbBF_j68O5({?_1BqsFf}u&}{R23(bBD5sY?HRjD~H-mURQ-}?~| zOV4VhOIxH)#UarK1)aEE}g9L9rq?0!$iAU6YRb zz!X->3It`Ep*}GAs#KSbn!uD*uQox#yKv;joynMX23e{x?e#PnG4%|>QQVHTgj|`K z7D0@ssX-7G_5qCoNiozGklC~r0og$EidpoET(pCp_-3PS6`D?#j!}(f3Xp!Nw3cDa zRe&iN`=iv_gp$$+TquX7){NrEz7+<=!${KZn8%OoJPpQ{QJSQ|+Vn{?Gs-XLbBjeRz#B8gX$wmZyjqO8Le&D8;XuWXyR5euQ|lc z0$6rnssLErt7-yR+G5rKkd(3|Y!}~TG<)fS2xU`+s29s#ECO)n;5W=&hlLcMJU6tW z?$bzxcOZEo~0e=_p1#n!^ql-4q7Kll9_8LMb*q*-rn}9tHmn# zaQ3gGVvK4bTHeNf->R`1kj(vT&y^$d?y78~T)MWZxP@*n`<|_cjpmng&b51&U|vx_ zH-=UD;CINd6_s$auu;dtgN2QuavOxLcxc>9*c7e^B)8>EO@BA0_m>&Ofz0_;|845{*ep4mam%1Xg#=p}w-_tTKBQ0!eQ{zwj9@1r6c0ud1RLTzIP-mvPOicp0 zm$@=lltxJ$tI3SjWWMi@wEoMLz5I3^p#M~^03)vda&$1A<@H~Vr^o32*U4ly)_-Z^ zGuD3@>%YW?N(c2{uwH=}wR~+@+O1Nyyk^^-W&x6Tc9Z&7pn%TzqlVi!8s&NoeDSJX zxIs&Vv|9cMZa{!&GvD+%a2=@T!Rp#?pxMWCr`SZ>=Wy3~?U=o{bMD-FVD;K;HJ4Ze zA|W){>}TNIu4Q)zY9~Mo@&+ojco9bAXc@g8bQdhwb_hP8y@vUDap~RpP7@REbh!lE z$TS*ptHx);+S!_>6t!uZ&ZcB6ZPzrtXLb-cX2q)MT47_IqXz06eY%=|9Zg=dCNBfi z4$NLQ6>XZn1ytsvsI>xW7qZ4CqdQ@H16CIgqqMbwY6s%RqoX@{J9UDEA9!FCxt4(K zK`}V_4pUm>T{FxkZH8G!b>*J*7#G=| z3M4SraeeMthF`>nUqkf?3qE;G;lWTgy#jf9etY-| z{5gG9QX`D%zGA1CGd2g(oN|^iFHIuf#vGs&Z2U463QgvbLp}Av!b14Mf?uOKn!n`X zvEH*TF)z03S~x>LwEP={A>+u1)UvPT(Z!o?&t;xY;I+@P!RfQ*$e>?i?Y;s(&#DM4w zkTLLl4~cm21^x}A0?_n;%g3+kIEYTjSOdZL)<{M|;A$~A6fI1?CZ~n?42dxwBIl8K zK!lDTb0dPg=|l}y90KXF3S$%`-YfAy$lOlm#v<*>x_H>)45DU+rPK{MLU4TkIys*H z+u@1Q0Lcqa6)X*TQND`ChDLoa&Te)zIRwR zj~0n}i$rN)q-P1EO=8R@Q5q1HGmOzH5fz_hoy5@f%LHdN?G>YCOO(-)myC0)Tx`?7 zGNyY~9#m*8m;;F)L^>Ftgv+==r1$}+LxD=Nw3@?86q-5|u;h!MIlLqxti6OxRzZ{F zr57$l^=tLAM@m@dPZjV!)oK;44t#DkwSBKR7OHsx%bIGtPdrQXHJ@p1{o5z5<%*Zj zcojw3+Zx0?=b}`F)~!k0pc3tQh1AYe?ErCUNg)ppnfBE7@UUrHx%V6)Sw-f8a_3ZL zW;%R|6^8jfpL8prTV;4l6i8Jsh0NO*Na!_FyV)4Y>?+RUwYXuT$9m3VJ?HVG^O4qn zeq)ExKX!funyUYNcyuy5PU}A(9~{hZ{pX|OvHo)#pRxY)SpPXTe>$lDJdgb4H_G(2 zny=pDEWbUSsy!r#-Bf%gyQi!3;2XKUNLHQ($N2%rjz8fx8it=-t3 zG+byGH~NcnyEZRh{=LaI-=Hg+ukZcO0DLn|FWI(Xvac?TmRol2pv=zKc3@Np-k<(z zT5lO{QlaqrSif1n#m4J5qhx^Vv(aJ|f~ID%k~nr_v=%66&2BA0ap^@M@UZ0C?kHT1 zA=-_YacSvD;NsoKTi^e-+qQ^=!WKn$5e4uI2U z`dZ!)jYVlrY1D|$`ma(Tx=6gFG#}NMc4_GH`m59_X`WT#kuuaP^{CA$)23DGnr$Rh zVVh%2)}%rk3W)_KCx={$v~i$p9R0rZxMi-{dh<$HoK$R_n=HXuq(`+(UX6Ly6V4eV zHN-r7V)O(CA#qIrLe3o#2128Rd{AjqU<@(_`N}AfE5FXXuAAk^3*M_#>qA(D3p@kD)Uoh&iWC2@}^0Q@cBfA7k(Ih4IJnY&lCF_xRgPp1# zqBpqt>G7`-mToe~{QYn93(NLa*6F*8FV^pf<E`WeovkBT= z?%*S26Q{0g`Oz8#ve&0a+3OVx3GmJj*q}3ZKvLXUdl)J7@FnZ@&UHbAl4D-`cCfPE z*}*pul}Cj{?jJ4SC2@|kkrQsGq!@~~K~gjw@^w=H76OF-<>gD_o3mXIKr-A%E8K07 zHVAQvh8y2?{d-)$0MDE774gnn-&^_KtJm-U`Ih+hH3(d%^zFr2@tb+Hi=tbouZlmM zZb0BHZSU1@zkK*WHoOC#ABLw+0K(F50aA0tZ_gZW>39go;xFgBFa++(4{nOTd;w8l z7r%TH*xt9B9i+AJ!!Pz`u?ud?Uwi%?2#R07bvC7@-|akSxh_$@h6vpH#joLzu|ud; zW&+b|&k%mbwplFiti7*P#BD3YuUQK_gfa`Mw5>CLv$efPwDh7{SeM=kJfJ_Y=tiYR=#7i;xCjqt5mu6Wo>O*QhUFDD zX*V-nkB8}kZm+5)Lu(o>smYB0>050&omJT=I*j0(0RbdievLvU4A>b8XlxB_4kt!H zPcNa7l`<}j zRrI#pVcE4IP!e@Z95$jRdR}a-b!9S0JX%&c!^5a4#nf{oWTpBt^~5RCSJ*QaOUJRc zjj36tTQDyCJ+EA)UgfTAqj708Q;g35nd~xryp^J1LdODp11rEMt^f9Eeq|$d^x@_P z{!*z3oVfnm!NKf+sQ-2}LG|BGjt<89Z*6?W`fp?Xw|JH9p#EE|S&(^neKDW6nCu*P ztW=i&q$0n1UvqmqGpKBF|FYHNYBMbv({F}}FKmdv*rBWzft;f`}<-#O7WG^dT$igWJ3Ij~oa z2pklN$nl^^-vJNW8*iPB6K~j2;Xe=`ej3DRVWV&+^t5Reb!J1u$aNc0f3ku+V+F(t zQr$uYM8cLn{rGX*uo>L2K|DL(u*EcRH*9vfY*xb?Hrx0-{uyfJW=y)K4E|<~T+@bt zLV4RtEjF;>X2a+^kX9)Vliz3?KH@}YIHF9~}yf`q#H z5G0)x<{I(6VaD>74KL9Mv?e@>RAkDTYllW#f8zvU^eHrcS;A{ObWGNZ7ni9l`sd}2 zdz~h+1t~KvH7a4!hYeL~CKisMwZ(7JN#lXP!P$eTEo)^*Hp)e$a>-9#qO8Ba zzFaxCPK1K(9NR_T1jH`Y@~{NdNLc3h1f{^`YnKji#M)CEIM`M@z{zVGkb){NDpW&O zHOjJZ*R}6hVynSNFNIH8ZYAY7Y6`AuF$4a>`<;t!1po_c^dworq%7B z@lZ&yQcnY9>T(gmW^xvd(#+0Y6ex>!s2=ke2bRY;eyV-s`JY#3m6AS*k2wExdU$kj zkmY|KA00oN%qB-CWBz9=pE3V)%>Rtdmk#njp>ClHi&%}vyTTq761_AV?KFfq!LXay z;kC*vn`am<~10+clkS zIVO}0E1`rLD3)mrt{%|{4NG3F5*|hODhX>K`q2)ED(Y^X4n<)AUzSJM}Gx*=AQRm;8ND;NY8d%3m@8r);2&z z;Bi50^b2guTEN{E@&xW#m)_FdtpF~69iQWcR^;Oc1GF@v!#)?>WM#3_H!avQaBp5% z038!L_{T?U<$FIwmg{)H+HI|SCtBl|Hn!tgfq#!0NjllHrn8j50IDh{fE30jj~?>o zxN*VkQ%r75>R&m}qX%DJSbzQl1pZ4@a~`>%!0Ipgt7eYXVRP~*5Ut_Y2wW)7=urqd z6aq;|g|-x^#sDz1+$aZ)%R%{UEnNrbYt~V z;1{0lDZts=Gi6f!F@damf@~bhfuD~ep9lNUE>l6pb2?fJRXzmWF3~ZA`XM4Y#TXG|IUG@{&JZP!`ZQMK}~vh%-#lgVLr{ MfG2g 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 z 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

LQ)E{vznMbR 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� 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 z%0D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 K+ZY}MG5`RUg%{2M diff --git a/mcs/class/System.Web.Services/Test/standalone/wstest b/mcs/class/System.Web.Services/Test/standalone/wstest deleted file mode 100755 index 7a1747e1586..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/wstest +++ /dev/null @@ -1 +0,0 @@ -mono --debug wstest.exe "$@" diff --git a/mcs/class/System.Web.Services/Test/standalone/wstest.cs b/mcs/class/System.Web.Services/Test/standalone/wstest.cs deleted file mode 100644 index 45e7bc9294c..00000000000 --- a/mcs/class/System.Web.Services/Test/standalone/wstest.cs +++ /dev/null @@ -1,994 +0,0 @@ -using System; -using System.IO; -using System.Collections; -using System.Text; -using System.Xml; -using System.Xml.Xsl; -using System.Xml.Serialization; -using System.ComponentModel; -using System.Diagnostics; -using System.Threading; -using System.Web.Services.Discovery; -using System.Web.Services.Description; -using System.Net; - -public class Driver -{ - static bool foundErrors = false; - static string basePath; - static int runningCount; - - static ServiceCollection services; - static ServiceStatusCollection serviceStatus; - - public static void Main (string[] args) - { - if (args.Length == 0) - { - Console.WriteLine (); - Console.WriteLine ("Usage: wstest [options]"); - Console.WriteLine (); - Console.WriteLine ("Options:"); - Console.WriteLine (" ur : Update service references from DISCO or WSDL document"); - Console.WriteLine (" dw: download wsdl documents for registered services"); - Console.WriteLine (" gp: Generate proxies"); - Console.WriteLine (" gc : Generate test client class"); - Console.WriteLine (); - return; - } - - basePath = "."; - - LoadInfo (); - - if (args[0] == "gp") - { - BuildProxies (GetArg (args,1)); - } - else if (args[0] == "gc") - { - BuildClients (GetArg (args,1)); - } - else if (args[0] == "ur") - { - UpdateReferences (GetArg (args,1), GetArg (args,2)); - } - else if (args[0] == "stat") - { - ShowStatus (); - } - else if (args[0] == "dw") - { - DownloadWsdls (GetArg (args,1)); - } - else if (args[0] == "clean") - { - Clean (); - } - else if (args[0] == "checkdiff") - { - CheckDiff (GetArg (args,1)); - } - else if (args[0] == "msfix") - { - MsFix (GetArg (args,1)); - } - else if (args[0] == "genfiles") - { - GenerateFiles (GetArg (args,1)); - } - - SaveInfo (); - - if (foundErrors) - Console.WriteLine ("Please check error log at " + Path.Combine (GetErrorPath(), "error.log")); - } - - static void LoadInfo () - { - XmlSerializer ser = new XmlSerializer (typeof(ServiceCollection)); - - string servicesFile = Path.Combine (basePath, "services.xml"); - if (!File.Exists (servicesFile)) - services = new ServiceCollection (); - else - { - StreamReader sr = new StreamReader (servicesFile); - services = (ServiceCollection) ser.Deserialize (sr); - sr.Close (); - } - - ser = new XmlSerializer (typeof(ServiceStatusCollection)); - - servicesFile = Path.Combine (basePath, "serviceStatus.xml"); - if (!File.Exists (servicesFile)) - serviceStatus = new ServiceStatusCollection (); - else - { - StreamReader sr = new StreamReader (servicesFile); - serviceStatus = (ServiceStatusCollection) ser.Deserialize (sr); - sr.Close (); - } - } - - static void SaveInfo () - { - XmlSerializer ser = new XmlSerializer (typeof(ServiceCollection)); - string servicesFile = Path.Combine (basePath, "services.xml"); - StreamWriter sw = new StreamWriter (servicesFile); - ser.Serialize (sw, services); - sw.Close (); - - ser = new XmlSerializer (typeof(ServiceStatusCollection)); - servicesFile = Path.Combine (basePath, "serviceStatus.xml"); - sw = new StreamWriter (servicesFile); - ser.Serialize (sw, serviceStatus); - sw.Close (); - } - - static string GetArg (string[] args, int n) - { - if (n >= args.Length) return null; - else return args[n]; - } - - static void Cleanup () - { - string pp = GetProxyPath (); - DirectoryInfo di = new DirectoryInfo (pp); - if (di.Exists) di.Delete (true); - di.Create (); - } - - static void Clean () - { - Hashtable clientHash = new Hashtable (); - - foreach (ServiceData sd in services.services) - { - if (sd.ClientTest) - clientHash [GetClientFile (sd)] = sd; - - if (sd.Protocols != null) - { - foreach (string prot in sd.Protocols) - clientHash [GetProxyFile (sd, prot)] = sd; - } - clientHash [GetWsdlFile (sd)] = sd; - } - - Clean (clientHash, GetClientPath ()); - Clean (clientHash, GetProxyPath ()); - Clean (clientHash, GetWsdlPath ()); - } - - static void Clean (Hashtable clientHash, string path) - { - if (Path.GetFileName (path) == "CVS") return; - - string[] files = Directory.GetFiles (path); - - foreach (string file in files) - { - ServiceData sd = clientHash [file] as ServiceData; - if (sd != null) continue; - - File.Delete (file); - Console.WriteLine ("Deleted file '" + file + "'"); - } - - string [] dirs = Directory.GetDirectories (path); - foreach (string dir in dirs) - Clean (clientHash, dir); - - int count = Directory.GetFiles (path).Length + Directory.GetDirectories (path).Length; - if (count == 0 && path != GetClientPath () && path != GetProxyPath ()) - { - Directory.Delete (path); - Console.WriteLine ("Deleted directory '" + path + "'"); - } - } - - static void UpdateReferences (string url, string ignoreFile) - { - Console.WriteLine (); - Console.WriteLine ("Updating service references"); - Console.WriteLine ("---------------------------"); - - ArrayList ignoreList = new ArrayList (); - - if (ignoreFile != null) - { - StreamReader sr = new StreamReader (ignoreFile); - string line; - while ((line = sr.ReadLine ()) != null) - { - int i = line.IndexOfAny (new char[] {' ','\t'}); - if (i != -1) line = line.Substring (0,i); - ignoreList.Add (line); - } - } - - DiscoveryClientProtocol client = new DiscoveryClientProtocol (); - client.DiscoverAny (url); - - ArrayList list = new ArrayList (client.References.Values); - foreach (DiscoveryReference re in list) - { - if (!(re is ContractReference)) continue; - - bool ignore = ignoreList.Contains (re.Url); - - ServiceData sd = FindService (re.Url); - - if (ignore) - { - if (sd != null) { - RemoveService (re.Url); - Console.WriteLine ("Removed " + re.Url); - } - continue; - } - - if (sd == null) - { - sd = CreateServiceData (re); - Console.WriteLine ("Added " + re.Url); - services.services.Add (sd); - } - } - Console.WriteLine ("Done"); - Console.WriteLine (); - } - - static void DownloadWsdls (string host) - { - Console.WriteLine (); - Console.WriteLine ("Downloading WSDL documents"); - Console.WriteLine ("---------------------------"); - - foreach (ServiceData sd in services.services) { - if (host != null && host != new Uri (sd.Wsdl).Host) continue; - if (!File.Exists (GetWsdlFile(sd))) - Resolve (sd); - } - - Console.WriteLine ("Done"); - Console.WriteLine (); - } - - static void Resolve (ServiceData sd) - { - Console.Write ("Resolving " + sd.Wsdl + " "); - try - { - DiscoveryClientProtocol contract = new DiscoveryClientProtocol (); - contract.DiscoverAny (sd.Wsdl); - - if (sd.Protocols == null || sd.Protocols.Length==0) - RetrieveServiceData (sd, contract); - - string wsdlFile = GetWsdlFile (sd); - CreateFolderForFile (wsdlFile); - - ServiceDescription doc = (ServiceDescription) contract.Documents [sd.Wsdl]; - doc.Write (wsdlFile); - - Console.WriteLine ("OK"); - CleanFailures (sd); - } - catch (Exception ex) - { - Console.WriteLine ("FAILED"); - ReportError ("Error resolving: " + sd.Wsdl, ex.ToString ()); - RegisterFailure (sd); - } - } - - public static ServiceData CreateServiceData (DiscoveryReference dref) - { - ServiceData sd = new ServiceData (); - - string name = GetServiceName (dref); - sd.Name = name; - int nc = 2; - while (FindServiceByName (sd.Name) != null) - { - sd.Name = name + nc; - nc++; - } - - sd.Wsdl = dref.Url; - return sd; - } - - public static void RetrieveServiceData (ServiceData sd, DiscoveryClientProtocol contract) - { - ServiceDescriptionCollection col = new ServiceDescriptionCollection (); - foreach (object doc in contract.Documents.Values) - if (doc is ServiceDescription) col.Add ((ServiceDescription)doc); - - string loc = GetLocation (col[0]); - if (loc != null) - { - WebResponse res = null; - try - { - WebRequest req = (WebRequest)WebRequest.Create (loc); - req.Timeout = 15000; - res = req.GetResponse (); - } - catch (Exception ex) - { - WebException wex = ex as WebException; - if (wex != null) res = wex.Response; - } - if (res != null) - { - sd.ServerType = res.Headers ["Server"] + " # " + res.Headers ["X-Powered-By"]; - } - } - - ArrayList bins = GetBindingTypes (col); - sd.Protocols = (string[]) bins.ToArray(typeof(string)); - } - - static ArrayList GetBindingTypes (ServiceDescriptionCollection col) - { - ServiceDescription doc = col [0]; - ArrayList list = new ArrayList (); - foreach (Service s in doc.Services) - { - foreach (Port p in s.Ports) - { - Binding bin = col.GetBinding (p.Binding); - if (bin.Extensions.Find (typeof (System.Web.Services.Description.SoapBinding)) != null) - if (!list.Contains ("Soap")) list.Add ("Soap"); - - HttpBinding ext = (HttpBinding) bin.Extensions.Find (typeof (HttpBinding)); - if (ext != null) - { - if (ext.Verb == "POST") list.Add ("HttpPost"); - else list.Add ("HttpGet"); - } - } - } - return list; - } - - static string GetLocation (ServiceDescription doc) - { - foreach (Service s in doc.Services) - { - foreach (Port p in s.Ports) - { - SoapAddressBinding loc = (SoapAddressBinding) p.Extensions.Find (typeof (System.Web.Services.Description.SoapAddressBinding)); - if (loc != null) - return loc.Location; - } - } - return null; - } - - static string GetServiceName (DiscoveryReference dref) - { - string name = dref.DefaultFilename; - - if (name.EndsWith (".wsdl")) name = name.Substring (0,name.Length-5); - if (name == "wsd") - { - int i = dref.Url.IndexOf ("service="); - if (i == -1) name = dref.Url.Substring (7); - else name = dref.Url.Substring (i+8); - } - - name = name + "Test"; - if (Char.IsDigit (name,0)) name = "Ws" + name; - return Normalize (name); - } - - static string Normalize (string s) - { - System.Text.StringBuilder sb = new System.Text.StringBuilder (); - for (int n=0; n=0; n--) - Console.WriteLine ("{0,-3} {1}", serverCounts[n], serverNames[n]); - } - - static void BuildProxies (string host) - { - Console.WriteLine (); - Console.WriteLine ("Generating proxies"); - Console.WriteLine ("------------------"); - - XmlDocument doc = new XmlDocument (); - XmlElement ele = doc.CreateElement ("errors"); - doc.AppendChild (ele); - - bool buildAll = host == "*"; - if (buildAll) host = null; - - ArrayList proxies = new ArrayList (); - - foreach (ServiceData fd in services.services) { - if (host != null && host != new Uri (fd.Wsdl).Host) continue; - BuildProxy (fd, buildAll, proxies, ele); - } - - StreamWriter sw = new StreamWriter (Path.Combine (basePath, "proxies.sources")); - foreach (string f in proxies) - sw.WriteLine (f); - sw.Close (); - - doc.Save ("proxy-gen-error.xml"); - Console.WriteLine ("Done"); - Console.WriteLine (); - } - - static void BuildProxy (ServiceData fd, bool rebuild, ArrayList proxies, XmlElement errdoc) - { - string wsdl = GetWsdlFile (fd); - if (!File.Exists (wsdl)) - return; - - if (fd.Protocols == null) - { - ReportError ("Client test '" + fd.Name + "': no protocols declared", ""); - return; - } - - foreach (string prot in fd.Protocols) - { - string ns = fd.Namespace; - ns = CodeIdentifier.MakeValid (ns) + "." + prot; - - string pfile = GetProxyFile (fd, prot); - if (File.Exists (pfile) && !rebuild) { proxies.Add (pfile); continue; } - - CreateFolderForFile (pfile); - - Console.Write (prot + " proxy for " + wsdl + "... "); - Process proc = new Process (); - proc.StartInfo.UseShellExecute = false; - proc.StartInfo.RedirectStandardOutput = true; - proc.StartInfo.RedirectStandardError = true; - proc.StartInfo.FileName = "wsdl"; - proc.StartInfo.Arguments = "/out:" + pfile + " /nologo /namespace:" + ns + " /protocol:" + prot + " " + wsdl; - proc.Start(); - - if (!proc.WaitForExit (30000)) - { - try { - proc.Kill (); - } catch {} - - Console.WriteLine ("FAIL (timeout)"); - if (File.Exists (pfile)) File.Delete (pfile); - WriteError (errdoc, ns, "Errors found while generating " + prot + " proxy for WSDL: " + wsdl, "wsdl.exe timeout"); - } - else if (proc.ExitCode != 0) - { - Console.WriteLine ("FAIL " + proc.ExitCode); - - string err = proc.StandardOutput.ReadToEnd (); - err += "\n" + proc.StandardError.ReadToEnd (); - - if (File.Exists (pfile)) - { - if (proc.ExitCode == 1) { - string fn = fd.Name + prot + "Proxy.cs"; - fn = Path.Combine (GetErrorPath(), fn); - CreateFolderForFile (fn); - File.Move (pfile, fn); - - StreamWriter sw = new StreamWriter (fn, true); - sw.WriteLine (); - sw.WriteLine ("// " + fd.Wsdl); - sw.WriteLine (); - sw.Close (); - - } - else - File.Delete (pfile); - } - - WriteError (errdoc, ns, "Errors found while generating " + prot + " proxy for WSDL: " + wsdl, err); - } - else - { - if (File.Exists (pfile)) { - Console.WriteLine ("OK"); - proxies.Add (pfile); - } - else { - Console.WriteLine ("FAIL"); - string err = proc.StandardOutput.ReadToEnd (); - err += "\n" + proc.StandardError.ReadToEnd (); - WriteError (errdoc, ns, "Errors found while generating " + prot + " proxy for WSDL: " + wsdl, err); - } - } - } - } - - static void WriteError (XmlElement err, string ns, string error, string detail) - { - XmlElement ele = err.OwnerDocument.CreateElement ("error"); - ele.SetAttribute ("ns",ns); - XmlText text = err.OwnerDocument.CreateTextNode (error + "\n" + detail); - ele.AppendChild (text); - err.AppendChild (ele); - } - - static void BuildClients (string wsdl) - { - StreamWriter sw = new StreamWriter (Path.Combine (basePath, "client.sources")); - - foreach (ServiceData fd in services.services) - { - if (wsdl != null && fd.Wsdl == wsdl) fd.ClientTest = true; - - if (!fd.ClientTest) continue; - - BuildClient (fd); - sw.WriteLine (GetClientFile (fd)); - } - - sw.Close (); - } - - public static void BuildClient (ServiceData sd) - { - string file = GetClientFile (sd); - - if (File.Exists (file)) return; - - CreateFolderForFile (file); - - StreamWriter sw = new StreamWriter (file); - sw.WriteLine ("// Web service test for WSDL document:"); - sw.WriteLine ("// " + sd.Wsdl); - - sw.WriteLine (); - sw.WriteLine ("using System;"); - sw.WriteLine ("using NUnit.Framework;"); - - foreach (string prot in sd.Protocols) - sw.WriteLine ("using " + sd.Namespace + "." + prot + ";"); - - sw.WriteLine (); - sw.WriteLine ("namespace " + sd.Namespace); - sw.WriteLine ("{"); - sw.WriteLine ("\tpublic class " + sd.Name + ": WebServiceTest"); - sw.WriteLine ("\t{"); - sw.WriteLine ("\t\t[Test]"); - sw.WriteLine ("\t\tpublic void TestService ()"); - sw.WriteLine ("\t\t{"); - sw.WriteLine ("\t\t}"); - sw.WriteLine ("\t}"); - sw.WriteLine ("}"); - sw.Close (); - - Console.WriteLine ("Written file '" + file + "'"); - } - - public static void CheckDiff (string diffFile) - { - int suc=0, tot=0, ign=0; - XmlDocument doc = new XmlDocument (); - doc.Load (diffFile); - - XmlDocument errdoc = new XmlDocument (); - errdoc.Load ("proxy-gen-error.xml"); - - XmlDocument result = new XmlDocument (); - XmlElement res = result.CreateElement ("test-results"); - res.SetAttribute ("name", "wsdl-tests"); - res.SetAttribute ("date", DateTime.Now.ToShortDateString ()); - res.SetAttribute ("time", DateTime.Now.ToShortTimeString ()); - result.AppendChild (res); - - XmlElement ts = result.CreateElement ("test-suite"); - ts.SetAttribute ("name", "wsdl"); - ts.SetAttribute ("asserts", "0"); - ts.SetAttribute ("time", "0"); - res.AppendChild (ts); - - XmlElement tsres = result.CreateElement ("results"); - ts.AppendChild (tsres); - - XslTransform xsl = new XslTransform (); - xsl.Load ("cormissing.xsl"); - - foreach (ServiceData sd in services.services) - { - if (sd.Protocols == null) continue; - - foreach (string prot in sd.Protocols) - { - string ns = sd.Namespace + "." + prot; - - XmlElement elem = doc.SelectSingleNode ("assemblies/assembly/namespaces/namespace[@name='" + ns + "']") as XmlElement; - if (elem == null) { - ign++; - continue; - } - - if (!File.Exists (GetWsdlFile(sd))) { - Console.WriteLine ("WARNING: wsdl file not found: " + GetWsdlFile(sd)); - ign++; - continue; - } - - tot++; - - bool extrans = elem.GetAttribute ("presence") == "extra"; - - if ((elem.GetAttribute ("error") != "" || elem.GetAttribute ("missing") != "" || elem.GetAttribute ("extra") != "") && !extrans) - { - XmlElement errelem = errdoc.SelectSingleNode ("/errors/error[@ns='" + ns + "']") as XmlElement; - if (errelem != null) { - WriteResult (tsres, ns, false, sd.Wsdl + "\n" + errelem.InnerText); - } - else { - StringWriter str = new StringWriter (); - xsl.Transform (elem, null, str, null); - WriteResult (tsres, ns, false, sd.Wsdl + "\n" + str.ToString ()); - } - } - else - { - if (extrans) Console.WriteLine ("BONUS CLASS: " + ns); - suc++; - WriteResult (tsres, ns, true, sd.Wsdl); - } - - } - } - ts.SetAttribute ("success", (suc < tot).ToString()); - - res.SetAttribute ("total", tot.ToString()); - res.SetAttribute ("failures", (tot-suc).ToString()); - res.SetAttribute ("not-run", "0"); - - result.Save ("WsdlTestResult.xml"); - Console.WriteLine ("Compared:" + tot + " Ignored:" + ign + " Sucess:" + suc + " Fail:" + (tot - suc)); - } - - static void WriteResult (XmlElement res, string name, bool success, string msg) - { - XmlDocument doc = res.OwnerDocument; - XmlElement test = doc.CreateElement ("test-case"); - test.SetAttribute ("name", name); - test.SetAttribute ("executed", "True"); - test.SetAttribute ("success", success.ToString()); - test.SetAttribute ("time", "0"); - test.SetAttribute ("asserts", "0"); - - if (!success) { - XmlElement fail = doc.CreateElement ("failure"); - test.AppendChild (fail); - XmlElement xmsg = doc.CreateElement ("message"); - fail.AppendChild (xmsg); - xmsg.AppendChild (doc.CreateCDataSection (msg)); - fail.AppendChild (doc.CreateElement ("stack-trace")); - } - res.AppendChild (test); - } - - static void MsFix (string fileName) - { - StreamReader sr = new StreamReader ("msfix"); - XmlDocument doc = new XmlDocument (); - doc.Load (fileName); - - string line; - while ((line = sr.ReadLine ()) != null) - { - string[] ss = line.Split ('/'); - XmlElement elem = doc.SelectSingleNode ("assemblies/assembly/namespaces/namespace[@name='" + ss[0] + "']/classes/class[@name='" + ss[1] + "']") as XmlElement; - if (elem != null) elem.ParentNode.RemoveChild (elem); - } - doc.Save (fileName); - sr.Close (); - } - - static void GenerateFiles (string templateFile) - { - XmlDocument doc = new XmlDocument (); - doc.Load (templateFile); - - XmlNodeList targets = doc.SelectNodes ("fileGeneration/targets/target"); - XmlElement gvarset = (XmlElement) doc.SelectSingleNode ("fileGeneration/vars[@name='_global']"); - - foreach (XmlElement node in targets) { - string tid = node.GetAttribute ("template"); - string file = node.GetAttribute ("file"); - XmlElement xtemp = (XmlElement) doc.SelectSingleNode ("fileGeneration/templates/template[@id='" + tid + "']"); - if (xtemp == null) throw new Exception ("Template " + tid + " not found"); - string tempFile = xtemp.GetAttribute ("file"); - - StreamReader sr = new StreamReader (tempFile); - string template = sr.ReadToEnd (); - sr.Close (); - - string content = ReplaceVars (template, node); - content = ReplaceVars (content, gvarset); - - StreamWriter sw = new StreamWriter (file); - sw.Write (content); - sw.Close (); - Console.WriteLine ("Writen " + file); - } - } - - static string ReplaceVars (string content, XmlElement root) - { - XmlNodeList nodes = root.SelectNodes ("var"); - foreach (XmlElement elem in nodes) { - string include = elem.GetAttribute ("include"); - if (include != "") { - XmlElement varset = (XmlElement) root.OwnerDocument.SelectSingleNode ("fileGeneration/vars[@name='" + include + "']"); - if (varset == null) throw new Exception ("varset '" + include + "' not found"); - content = ReplaceVars (content, varset); - } - else { - content = content.Replace ("$" + elem.GetAttribute ("name") + "$", elem.InnerText); - } - } - - return content; - } - - static void RegisterFailure (ServiceData sd) - { - ServiceStatus status = null; - foreach (ServiceStatus ss in serviceStatus.services) - { - if (ss.Name == sd.Name) - { - status = ss; - break; - } - } - - if (status == null) - { - status = new ServiceStatus (); - status.Name = sd.Name; - status.Retries = 1; - status.LastTestDate = DateTime.Now; - serviceStatus.services.Add (status); - } - else - { - if ((DateTime.Now - status.LastTestDate).TotalHours >= 24) - status.Retries++; - } - } - - static void CleanFailures (ServiceData sd) - { - ServiceStatus status = null; - foreach (ServiceStatus ss in serviceStatus.services) - { - if (ss.Name == sd.Name) - { - serviceStatus.services.Remove (ss); - break; - } - } - } - - static string GetProxyFile (ServiceData fd, string protocol) - { - string fn = Path.Combine (new Uri (fd.Wsdl).Host, fd.Name + protocol + "Proxy.cs"); - return Path.Combine (GetProxyPath(), fn); - } - - static string GetClientFile (ServiceData sd) - { - return Path.Combine (GetClientPath(), sd.TestFile); - } - - static string GetWsdlFile (ServiceData fd) - { - string fn = Path.Combine (new Uri (fd.Wsdl).Host, fd.Name + ".wsdl"); - return Path.Combine (GetWsdlPath(), fn); - } - - static void ReportError (string error, string detail) - { - string fn = Path.Combine (GetErrorPath(), "error.log"); - CreateFolderForFile (fn); - - StreamWriter sw = new StreamWriter (fn, true); - sw.WriteLine ("*** " + error); - sw.WriteLine (" " + detail.Replace ("\n","\n ")); - sw.WriteLine (); - sw.Close (); - foundErrors = true; - } - - static string GetProxyPath () - { - return Path.Combine (basePath, "proxies"); - } - - static string GetClientPath () - { - return Path.Combine (basePath, "client"); - } - - static string GetErrorPath () - { - return Path.Combine (basePath, "error"); - } - - static string GetWsdlPath () - { - return Path.Combine (basePath, "wsdlcache"); - } - - static string GetTempWsdlPath () - { - return Path.Combine (basePath, "wsdlcache"); - } - - static void CreateFolderForFile (string file) - { - string dir = Path.GetDirectoryName (file); - DirectoryInfo di = new DirectoryInfo (dir); - if (!di.Exists) di.Create (); - } -} - -[XmlType("services")] -public class ServiceCollection -{ - [XmlElement("service", typeof(ServiceData))] - public ArrayList services = new ArrayList (); -} - -[XmlType("service")] -public class ServiceData -{ - [XmlElement("wsdl")] - public string Wsdl; - - [XmlElement("name")] - public string Name; - - [XmlElement("serverType")] - public string ServerType; - - [XmlArray("protocols")] - [XmlArrayItem("protocol")] - public string[] Protocols; - - [XmlElement("clientTest")] - public bool ClientTest; - - [XmlIgnore] - public string Namespace - { - get { return Name + "s"; } - } - - [XmlIgnore] - public string TestFile - { - get - { - string dir = new Uri (Wsdl).Host; - if (dir != "localhost") dir = "external"; - return Path.Combine (dir, Name + ".cs"); - } - } -} - -[XmlType("serviceStatus")] -public class ServiceStatusCollection -{ - [XmlElement("service", typeof(ServiceStatus))] - public ArrayList services = new ArrayList (); -} - -public class ServiceStatus -{ - [XmlElement("name")] - public string Name; - - [XmlElement("lastTestDate")] - public DateTime LastTestDate; - - [XmlElement("retries")] - public int Retries; -} - -- 2.25.1