* ServiceDescriptionImporter.cs : initialize CodeGenerator with C#.
* SoapProtocolImporter.cs : use XmlMemberMapping.GenerateTypeName()
instead of TypeFullName for 2.0 nullable support. Fixed bug #80551.
* ServiceDescriptionImporterTest.cs : new test.
* test2.wsdl : new test support file.
* System.Web.Services_test.dll.sources:
Added ServiceDescriptionImporterTest.cs.
* Makefile : added test2.wsdl to EXTRA_DISTFILES.
svn path=/trunk/mcs/; revision=71319
+2007-01-19 Atsushi Enomoto <atsushi@ximian.com>
+
+ * System.Web.Services_test.dll.sources:
+ Added ServiceDescriptionImporterTest.cs.
+ * Makefile : added test2.wsdl to EXTRA_DISTFILES.
+
2007-01-15 Gert Driesen <drieseng@users.sourceforge.net>
* System.Web.Services_test.dll.sources: added SocketResponder.cs and
System.Web.Services.Description/wsdl-1.1.xsd \
System.Web.Services.Description/wsdl-1.1-soap.xsd \
System.Web.Services.Description/wsdl.genxs \
- Test/System.Web.Services.Description/test.wsdl
+ Test/System.Web.Services.Description/test.wsdl \
+ Test/System.Web.Services.Description/test2.wsdl
include ../../build/library.make
+2007-01-19 Atsushi Enomoto <atsushi@ximian.com>
+
+ * ServiceDescriptionImporter.cs : initialize CodeGenerator with C#.
+ * SoapProtocolImporter.cs : use XmlMemberMapping.GenerateTypeName()
+ instead of TypeFullName for 2.0 nullable support. Fixed bug #80551.
+
2006-12-18 Atsushi Enomoto <atsushi@ximian.com>
* ProtocolReflector.cs, SoapProtocolReflector.cs,
using System.Collections;
using System.Collections.Specialized;
using System.Configuration;
+using Microsoft.CSharp;
namespace System.Web.Services.Description {
public class ServiceDescriptionImporter {
#if NET_2_0
CodeGenerationOptions options;
- CodeDomProvider codeGenerator;
+ CodeDomProvider codeGenerator = new CSharpCodeProvider ();
ImportContext context;
#endif
foreach (WebReference reference in webReferences)
{
ServiceDescriptionImporter importer = new ServiceDescriptionImporter ();
- importer.CodeGenerator = codeGenerator;
+ if (codeGenerator != null)
+ importer.CodeGenerator = codeGenerator;
importer.CodeGenerationOptions = options.CodeGenerationOptions;
importer.Context = context;
importer.Style = options.Style;
CodeParameterDeclarationExpression GenerateParameter (XmlMemberMapping member, FieldDirection dir)
{
- CodeParameterDeclarationExpression par = new CodeParameterDeclarationExpression (member.TypeFullName, member.MemberName);
+#if NET_2_0
+ string type = member.GenerateTypeName (CodeGenerator);
+#else
+ string type = member.TypeFullName;
+#endif
+ CodeParameterDeclarationExpression par = new CodeParameterDeclarationExpression (type, member.MemberName);
par.Direction = dir;
return par;
}
System.Web.Services.Description/PortTypeTest.cs
System.Web.Services.Description/ServiceCollectionTest.cs
System.Web.Services.Description/ServiceDescriptionFormatExtensionCollectionTest.cs
+System.Web.Services.Description/ServiceDescriptionImporterTest.cs
System.Web.Services.Description/ServiceDescriptionTest.cs
System.Web.Services.Description/ServiceDescriptionCollectionTest.cs
System.Web.Services.Description/ServiceDescriptionReflectorTest.cs
+2007-01-19 Atsushi Enomoto <atsushi@ximian.com>
+
+ * ServiceDescriptionImporterTest.cs : new test.
+ * test2.wsdl : new test support file.
+
2006-12-15 Atsushi Enomoto <atsushi@ximian.com>
* ServiceDescriptionFormatExtensionCollectionTest.cs :
--- /dev/null
+//
+// ServiceDescriptionImporterTest.cs
+//
+// Author:
+// Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+
+using NUnit.Framework;
+
+using System;
+using System.CodeDom;
+using System.CodeDom.Compiler;
+using Microsoft.CSharp;
+using System.Web.Services.Description;
+
+namespace MonoTests.System.Web.Services.Description
+{
+ [TestFixture]
+ public class ServiceDescriptionImporterTest
+ {
+#if NET_2_0
+ CodeNamespace GenerateCodeFromWsdl (ServiceDescription sd)
+ {
+ ServiceDescriptionImporter imp =
+ new ServiceDescriptionImporter ();
+ imp.AddServiceDescription (sd, null, null);
+ CodeNamespace cns = new CodeNamespace ();
+ imp.Import (cns, null);
+ return cns;
+ }
+
+ CodeTypeDeclaration FindTypeFrom (CodeNamespace cns, string name)
+ {
+ foreach (CodeTypeDeclaration td in cns.Types)
+ if (td.Name == name)
+ return td;
+ return null;
+ }
+
+ CodeTypeDeclaration FindMemberFrom (CodeNamespace cns, string name)
+ {
+ foreach (CodeTypeDeclaration td in cns.Types)
+ if (td.Name == name)
+ return td;
+ return null;
+ }
+
+ [Test]
+ public void Constructor ()
+ {
+ ServiceDescriptionImporter imp =
+ new ServiceDescriptionImporter ();
+ Assert.IsTrue (imp.CodeGenerator is CSharpCodeProvider);
+ }
+
+ [Test] // wtf? no ArgumentNullException?
+ public void SetNullCodeGenerator ()
+ {
+ ServiceDescriptionImporter imp =
+ new ServiceDescriptionImporter ();
+ imp.CodeGenerator = null;
+ }
+
+ [Test]
+ public void GenerateNullableTypes ()
+ {
+ CodeNamespace cns = GenerateCodeFromWsdl (
+ ServiceDescription.Read ("Test/System.Web.Services.Description/test2.wsdl"));
+ CodeTypeDeclaration td = FindTypeFrom (cns, "Service");
+ foreach (CodeTypeMember member in td.Members) {
+ CodeMemberMethod method = member as CodeMemberMethod;
+ if (method == null || method.Name != "Hola")
+ continue;
+ Assert.AreEqual ("System.Nullable`1", method.ReturnType.BaseType, "#1");
+ Assert.AreEqual (1, method.ReturnType.TypeArguments.Count, "#2");
+ Assert.AreEqual ("System.Int32", method.ReturnType.TypeArguments [0].BaseType, "#3");
+ return;
+ }
+ Assert.Fail ("The expected member didn't appear.");
+ }
+
+ [Test]
+ public void GenerateWebReferencesEmpty ()
+ {
+ // yuck - This causes NRE.
+ //ServiceDescriptionImporter.GenerateWebReferences (
+ // new WebReferenceCollection (), null, null, null);
+ ServiceDescriptionImporter.GenerateWebReferences (
+ new WebReferenceCollection (),
+ null,
+ new CodeCompileUnit (),
+ new WebReferenceOptions ());
+ }
+#endif
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">\r
+ <wsdl:types>\r
+ <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">\r
+ <s:element name="Hola">\r
+ <s:complexType />\r
+ </s:element>\r
+ <s:element name="HolaResponse">\r
+ <s:complexType>\r
+ <s:sequence>\r
+ <s:element minOccurs="1" maxOccurs="1" name="HolaResult" nillable="true" type="s:int" />\r
+ </s:sequence>\r
+ </s:complexType>\r
+ </s:element>\r
+ </s:schema>\r
+ </wsdl:types>\r
+ <wsdl:message name="HolaSoapIn">\r
+ <wsdl:part name="parameters" element="tns:Hola" />\r
+ </wsdl:message>\r
+ <wsdl:message name="HolaSoapOut">\r
+ <wsdl:part name="parameters" element="tns:HolaResponse" />\r
+ </wsdl:message>\r
+ <wsdl:portType name="ServiceSoap">\r
+ <wsdl:operation name="Hola">\r
+ <wsdl:input message="tns:HolaSoapIn" />\r
+ <wsdl:output message="tns:HolaSoapOut" />\r
+ </wsdl:operation>\r
+ </wsdl:portType>\r
+ <wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">\r
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />\r
+ <wsdl:operation name="Hola">\r
+ <soap:operation soapAction="http://tempuri.org/Hola" style="document" />\r
+ <wsdl:input>\r
+ <soap:body use="literal" />\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap:body use="literal" />\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ </wsdl:binding>\r
+ <wsdl:service name="Service">\r
+ <wsdl:port name="ServiceSoap" binding="tns:ServiceSoap">\r
+ <soap:address location="http://localhost:4810/WebSite6/Service.asmx" />\r
+ </wsdl:port>\r
+ </wsdl:service>\r
+</wsdl:definitions>\r