Exemplo n.º 1
0
        /// <summary>
        /// Creates and adds an XmlSerializerImportOptions instance to be used with WsdlImporter.
        /// </summary>
        private void AddXmlSerializerImportOptions()
        {
            XmlSerializerImportOptions xsio = new XmlSerializerImportOptions(compileUnit);

            xsio.CodeProvider = codeProvider;
            // xsio.ClrNamespace = options.ClrNamespace;

            if (options.EnableDataBinding)
            {
                xsio.WebReferenceOptions.CodeGenerationOptions |= System.Xml.Serialization.CodeGenerationOptions.EnableDataBinding;
            }

            if (!options.GenerateProperties)
            {
                xsio.WebReferenceOptions.CodeGenerationOptions &= ~System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;
            }

            if (!options.GenerateOrderIdentifiers)
            {
                xsio.WebReferenceOptions.CodeGenerationOptions &= ~System.Xml.Serialization.CodeGenerationOptions.GenerateOrder;
            }

            xsio.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(TypedDataSetSchemaImporterExtension).AssemblyQualifiedName);
            xsio.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(DataSetSchemaImporterExtension).AssemblyQualifiedName);

            wsdlImporter.State.Add(typeof(XmlSerializerImportOptions), xsio);
        }
Exemplo n.º 2
0
            private static void AddStateForXmlSerializerImport(CommandProcessorOptions options, WsdlImporter importer, CodeCompileUnit codeCompileUnit)
            {
                XmlSerializerImportOptions importOptions = new XmlSerializerImportOptions(codeCompileUnit)
                {
                    WebReferenceOptions = new WsdlNS.WebReferenceOptions()
                };

                importOptions.WebReferenceOptions.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateOrder;
                if (options.EnableDataBinding == true)
                {
                    importOptions.WebReferenceOptions.CodeGenerationOptions |= CodeGenerationOptions.EnableDataBinding;
                }

                // Right now System.Data API not available in DNX. If it comes available we could consider uncommenting these.
                // importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(TypedDataSetSchemaImporterExtensionFx35).AssemblyQualifiedName);
                // importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(DataSetSchemaImporterExtension).AssemblyQualifiedName);

                importOptions.CodeProvider = options.CodeProvider;

                importOptions.ClrNamespace = options.NamespaceMappings.FirstOrDefault(m => m.Key == "*").Value;

                importer.State.Add(typeof(XmlSerializerImportOptions), importOptions);

                if (!importer.State.ContainsKey(typeof(WrappedOptions)))
                {
                    importer.State.Add(typeof(WrappedOptions), new WrappedOptions {
                        WrappedFlag = options.Wrapped == true
                    });
                }
            }
        public void State_Serializer_Auto()
        {
            Mock <IXmlSerializerImportOptionsBuilder> xmlSerializerImportOptionsBuilder = CreateXmlSerializerImportOptionsBuilder();
            Mock <IXsdDataContractImporterBuilder>    xsdDataContractImporterBuilder    = CreateXsdDataContractImporterBuilder();
            Mock <IWrappedOptionsBuilder>             wrappedOptionsBuilder             = CreateWrappedOptionsBuilder();
            Mock <IFaultImportOptionsBuilder>         faultImportOptionsBuilder         = CreateFaultImportOptionsBuilder();

            CodeGeneratorOptions options = new CodeGeneratorOptions {
                Serializer = SerializerMode.Auto
            };
            WsdlImporter wsdlImporter = GetWsdlImporter(options, xmlSerializerImportOptionsBuilder, xsdDataContractImporterBuilder, wrappedOptionsBuilder, faultImportOptionsBuilder);

            XsdDataContractImporter dataContractImporterState = GetState <XsdDataContractImporter>(wsdlImporter);

            Assert.That(dataContractImporterState, Is.EqualTo(xsdDataContractImporter));

            XmlSerializerImportOptions xmlSerializerState = GetState <XmlSerializerImportOptions>(wsdlImporter);

            Assert.That(xmlSerializerState, Is.EqualTo(xmlSerializerImportOptions));

            WrappedOptions wrappedOptionsState = GetState <WrappedOptions>(wsdlImporter);

            Assert.That(wrappedOptionsState, Is.EqualTo(wrappedOptions));

            FaultImportOptions faultImportOptionsState = GetState <FaultImportOptions>(wsdlImporter);

            Assert.That(faultImportOptionsState, Is.EqualTo(faultImportOptions));

            VerifyXmlSerializerImportOptionsBuilder(xmlSerializerImportOptionsBuilder, Times.Once());
            VerifyXsdDataContractImporterBuilder(xsdDataContractImporterBuilder, Times.Once());
            VerifyWrappedOptionsBuilder(wrappedOptionsBuilder, Times.Exactly(2));
            VerifyFaultImportOptionsBuilder(faultImportOptionsBuilder, Times.Once());
        }
Exemplo n.º 4
0
        private void AddStateForXmlSerializerImport(ContractGenerationOptions options,
                                                    WsdlImporter wsdlImporter, CodeCompileUnit codeCompileUnit)
        {
            XmlSerializerImportOptions importOptions = new XmlSerializerImportOptions(codeCompileUnit);

            importOptions.WebReferenceOptions = new WebReferenceOptions();
            importOptions.WebReferenceOptions.CodeGenerationOptions = CodeGenerationOptions.GenerateOrder |
                                                                      CodeGenerationOptions.GenerateProperties;
            if (options.EnableDataBinding)
            {
                importOptions.WebReferenceOptions.CodeGenerationOptions |= CodeGenerationOptions.EnableDataBinding;
            }
            if (options.GenerateAsyncMethods)
            {
                importOptions.WebReferenceOptions.CodeGenerationOptions |= CodeGenerationOptions.GenerateNewAsync;
            }

            importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(TypedDataSetSchemaImporterExtension).AssemblyQualifiedName);
            importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(DataSetSchemaImporterExtension).AssemblyQualifiedName);
            importOptions.CodeProvider = options.CodeProvider;

            string clrNamespace = null;

            options.NamespaceMappings.TryGetValue(ContractGenerationOptions.NamespaceMappingsAllKeyName, out clrNamespace);
            importOptions.ClrNamespace = clrNamespace;

            importOptions.WebReferenceOptions.Verbose = true;
            //importOptions.WebReferenceOptions.Style = ServiceDescriptionImportStyle.Client;

            wsdlImporter.State.Add(typeof(XmlSerializerImportOptions), importOptions);
        }
Exemplo n.º 5
0
 internal XmlSerializerOperationGenerator(XmlSerializerImportOptions options)
 {
     operationGenerator = new OperationGenerator();
     this.options       = options;
     this.codeNamespace = GetTargetCodeNamespace(options);
     partInfoTable      = new Dictionary <MessagePartDescription, PartInfo>();
 }
Exemplo n.º 6
0
        public void Build_CodeGeneratorContext_CodeCompileUnit()
        {
            ICodeGeneratorContext codeGeneratorContext       = new CodeGeneratorContext(metadataSet, new CodeGeneratorOptions());
            IXmlSerializerImportOptionsBuilder builder       = new XmlSerializerImportOptionsBuilder();
            XmlSerializerImportOptions         importOptions = builder.Build(codeGeneratorContext);

            Assert.That(importOptions.CodeCompileUnit, Is.EqualTo(codeGeneratorContext.CodeCompileUnit));
        }
Exemplo n.º 7
0
        public void Build_CodeGeneratorOptions_GenerateProperties()
        {
            CodeGeneratorOptions options = new CodeGeneratorOptions {
                GenerateProperties = true
            };
            XmlSerializerImportOptions importOptions = PerformBuild(options);

            Assert.That(importOptions.WebReferenceOptions.CodeGenerationOptions, Is.EqualTo(CodeGenerationOptions.GenerateProperties));
        }
Exemplo n.º 8
0
        public void Build_CodeGeneratorOptions_EnableDataBinding()
        {
            CodeGeneratorOptions options = new CodeGeneratorOptions {
                EnableDataBinding = true
            };
            XmlSerializerImportOptions importOptions = PerformBuild(options);

            Assert.That(importOptions.WebReferenceOptions.CodeGenerationOptions, Is.EqualTo(CodeGenerationOptions.EnableDataBinding));
        }
Exemplo n.º 9
0
        public void Build_CodeGeneratorOptions_OrderMembers()
        {
            CodeGeneratorOptions options = new CodeGeneratorOptions {
                OrderMembers = true
            };
            XmlSerializerImportOptions importOptions = PerformBuild(options);

            Assert.That(importOptions.WebReferenceOptions.CodeGenerationOptions, Is.EqualTo(CodeGenerationOptions.GenerateOrder));
        }
        private static void AddStateForXmlSerializerImport(MetadataImporter importer, CodeCompileUnit codeCompileUnit, CodeDomProvider codeDomProvider)
        {

            XmlSerializerImportOptions importOptions = new XmlSerializerImportOptions(codeCompileUnit);
            importOptions.CodeProvider = codeDomProvider;
            importOptions.WebReferenceOptions = new WebReferenceOptions();
            importOptions.WebReferenceOptions.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateOrder;
            importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(TypedDataSetSchemaImporterExtension).AssemblyQualifiedName);
            importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(DataSetSchemaImporterExtension).AssemblyQualifiedName);

            importer.State.Add(typeof(XmlSerializerImportOptions), importOptions);
        }
Exemplo n.º 11
0
        public void Build_CodeGeneratorOptions_NamespaceMappings()
        {
            const string expectedNamespace       = "TestNamespace";
            Dictionary <string, string> mappings = new Dictionary <string, string> {
                { "*", expectedNamespace }
            };
            CodeGeneratorOptions options = new CodeGeneratorOptions {
                NamespaceMappings = mappings
            };
            XmlSerializerImportOptions importOptions = PerformBuild(options);

            Assert.That(importOptions.ClrNamespace, Is.EqualTo(expectedNamespace));
        }
Exemplo n.º 12
0
        void AddStateForXmlSerializerImport(WsdlImporter importer)
        {
            XmlSerializerImportOptions importOptions =
                new XmlSerializerImportOptions(this.codeCompileUnit);

            importOptions.CodeProvider = this.codeDomProvider;

            importOptions.WebReferenceOptions = new WsdlNS.WebReferenceOptions();
            importOptions.WebReferenceOptions.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;
            importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(
                typeof(TypedDataSetSchemaImporterExtension).AssemblyQualifiedName);
            importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(
                typeof(DataSetSchemaImporterExtension).AssemblyQualifiedName);

            importer.State.Add(typeof(XmlSerializerImportOptions), importOptions);
        }
Exemplo n.º 13
0
        private void AddStateForXmlSerializerImport(WsdlImporter importer)
        {
            var importOptions = new XmlSerializerImportOptions(_codeCompileUnit)
            {
                CodeProvider        = _codeDomProvider,
                WebReferenceOptions = new WebReferenceOptions
                {
                    CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateOrder
                }
            };

            importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(TypedDataSetSchemaImporterExtension).AssemblyQualifiedName);
            importOptions.WebReferenceOptions.SchemaImporterExtensions.Add(typeof(DataSetSchemaImporterExtension).AssemblyQualifiedName);

            importer.State.Add(typeof(XmlSerializerImportOptions), importOptions);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Builds a new instance.
        /// </summary>
        /// <param name="codeGeneratorContext">The code generator context.</param>
        /// <returns>
        /// A new <see cref="XmlSerializerImportOptions"/> instance.
        /// </returns>
        public XmlSerializerImportOptions Build(ICodeGeneratorContext codeGeneratorContext)
        {
            CodeGeneratorOptions codeGeneratorOptions = codeGeneratorContext.CodeGeneratorOptions;
            CodeDomProvider      codeDomProvider      = codeGeneratorContext.CodeDomProvider;
            CodeCompileUnit      codeCompileUnit      = codeGeneratorContext.CodeCompileUnit;

            WebReferenceOptions webReferenceOptions = new WebReferenceOptions
            {
                CodeGenerationOptions = CodeGenerationOptions.None
            };

            if (codeGeneratorOptions.OrderMembers)
            {
                webReferenceOptions.CodeGenerationOptions |= CodeGenerationOptions.GenerateOrder;
            }
            if (codeGeneratorOptions.GenerateProperties)
            {
                webReferenceOptions.CodeGenerationOptions |= CodeGenerationOptions.GenerateProperties;
            }
            if (codeGeneratorOptions.EnableDataBinding)
            {
                webReferenceOptions.CodeGenerationOptions |= CodeGenerationOptions.EnableDataBinding;
            }

            string typedDataSetExtension = (codeGeneratorOptions.TargetFrameworkVersion == TargetFrameworkVersion.Version35)
                                ? typeof(TypedDataSetSchemaImporterExtensionFx35).AssemblyQualifiedName
                                : typeof(TypedDataSetSchemaImporterExtension).AssemblyQualifiedName;

            webReferenceOptions.SchemaImporterExtensions.Add(typedDataSetExtension);
            webReferenceOptions.SchemaImporterExtensions.Add(typeof(DataSetSchemaImporterExtension).AssemblyQualifiedName);

            XmlSerializerImportOptions xmlSerializerImportOptions = new XmlSerializerImportOptions(codeCompileUnit)
            {
                WebReferenceOptions = webReferenceOptions,
                CodeProvider        = codeDomProvider
            };

            // TODO:Alex:Prevent the need to keep all types in the same namespaces for certain code decorators.
            string namespaceMapping;

            codeGeneratorOptions.NamespaceMappings.TryGetValue("*", out namespaceMapping);
            xmlSerializerImportOptions.ClrNamespace = namespaceMapping;

            return(xmlSerializerImportOptions);
        }
Exemplo n.º 15
0
        private static CodeNamespace GetTargetCodeNamespace(XmlSerializerImportOptions options)
        {
            CodeNamespace namespace2 = null;
            string        name       = options.ClrNamespace ?? string.Empty;

            foreach (CodeNamespace namespace3 in options.CodeCompileUnit.Namespaces)
            {
                if (namespace3.Name == name)
                {
                    namespace2 = namespace3;
                }
            }
            if (namespace2 == null)
            {
                namespace2 = new CodeNamespace(name);
                options.CodeCompileUnit.Namespaces.Add(namespace2);
            }
            return(namespace2);
        }
Exemplo n.º 16
0
        static CodeNamespace GetTargetCodeNamespace(XmlSerializerImportOptions options)
        {
            CodeNamespace targetCodeNamespace = null;
            string        clrNamespace        = options.ClrNamespace ?? string.Empty;

            foreach (CodeNamespace ns in options.CodeCompileUnit.Namespaces)
            {
                if (ns.Name == clrNamespace)
                {
                    targetCodeNamespace = ns;
                }
            }
            if (targetCodeNamespace == null)
            {
                targetCodeNamespace = new CodeNamespace(clrNamespace);
                options.CodeCompileUnit.Namespaces.Add(targetCodeNamespace);
            }
            return(targetCodeNamespace);
        }
Exemplo n.º 17
0
        public void Build_CodeGeneratorOptions_TargetFrameworkVersion()
        {
            CodeGeneratorOptions options = new CodeGeneratorOptions {
                TargetFrameworkVersion = TargetFrameworkVersion.Version35
            };
            XmlSerializerImportOptions importOptions = PerformBuild(options);

            string extensionAssemblyQualifiedName = typeof(TypedDataSetSchemaImporterExtensionFx35).AssemblyQualifiedName;

            Assert.That(importOptions.WebReferenceOptions.SchemaImporterExtensions, Has.Member(extensionAssemblyQualifiedName));

            options = new CodeGeneratorOptions {
                TargetFrameworkVersion = TargetFrameworkVersion.Version30
            };
            importOptions = PerformBuild(options);

            extensionAssemblyQualifiedName = typeof(TypedDataSetSchemaImporterExtension).AssemblyQualifiedName;
            Assert.That(importOptions.WebReferenceOptions.SchemaImporterExtensions, Has.Member(extensionAssemblyQualifiedName));
        }
Exemplo n.º 18
0
        private void AddStateForXmlSerializerImport(WsdlImporter importer)
        {
            webReferenceOptions.CodeGenerationOptions = CodeGenerationOptions.GenerateOrder |
                                                        CodeGenerationOptions.GenerateNewAsync |
                                                        CodeGenerationOptions.GenerateOldAsync |
                                                        CodeGenerationOptions.EnableDataBinding |
                                                        CodeGenerationOptions.GenerateProperties;

            webReferenceOptions.SchemaImporterExtensions.Add(typeof(TypedDataSetSchemaImporterExtension).AssemblyQualifiedName);
            webReferenceOptions.SchemaImporterExtensions.Add(typeof(DataSetSchemaImporterExtension).AssemblyQualifiedName);

            var importOptions = new XmlSerializerImportOptions(codeCompileUnit);

            importOptions.CodeProvider        = codeDomProvider;
            importOptions.WebReferenceOptions = webReferenceOptions;

            if (Options.Namespaces.ContainsKey("*"))
            {
                importOptions.ClrNamespace = Options.Namespaces["*"];
            }

            importer.State.Add(typeof(XmlSerializerImportOptions), importOptions);
        }
Exemplo n.º 19
0
        private void SyncUpCodeCompileUnit(Dictionary <object, object> state)
        {
            if (state == null)
            {
                return;
            }

            foreach (KeyValuePair <object, object> pair in state)
            {
                XsdDataContractImporter dcImporter = pair.Value as XsdDataContractImporter;
                if (dcImporter != null)
                {
                    this.codeCompileUnit = dcImporter.CodeCompileUnit;
                    return;
                }
                XmlSerializerImportOptions xmlImporter = pair.Value as XmlSerializerImportOptions;
                if (xmlImporter != null)
                {
                    this.codeCompileUnit = xmlImporter.CodeCompileUnit;
                    return;
                }
            }
        }
Exemplo n.º 20
0
        public string GenFromWsdl(
            string uri,
            bool createAsync,
            string targetNamespace,
            string outputFile,
            Boolean generateClient)
        {
            var pd = new prepareData();

            var msg = checkAndPrepareData(uri, outputFile, targetNamespace, pd);

            if (!msg.IsNullOrWhiteSpace())
            {
                return(msg);
            }


            MetadataSet mdSet = new MetadataSet();

            mdSet.MetadataSections.Add(MetadataSection.CreateFromServiceDescription(WebDescription.ServiceDescription.Read(pd.MainTempFile)));

            foreach (var item in pd.Imperts)
            {
                using (var xr = XmlReader.Create(item))
                    mdSet.MetadataSections.Add(MetadataSection.CreateFromSchema(XmlSchema.Read(xr, null)));
            }

            WsdlImporter importer = new WsdlImporter(mdSet);

            var xsdDCImporter = new XsdDataContractImporter();

            xsdDCImporter.Options = new ImportOptions();
            xsdDCImporter.Options.Namespaces.Add("*", pd.TargetCSNamespace);

            importer.State.Add(typeof(XsdDataContractImporter), xsdDCImporter);

            var xmlOptions = new XmlSerializerImportOptions();

            xmlOptions.ClrNamespace = pd.TargetCSNamespace;
            importer.State.Add(typeof(XmlSerializerImportOptions), xmlOptions);

            var generator = new ServiceContractGenerator();

            generator.NamespaceMappings.Add("*", pd.TargetCSNamespace);

            //var options = ServiceContractGenerationOptions.TypedMessages;
            var options = ServiceContractGenerationOptions.None;

            if (generateClient)
            {
                options |= ServiceContractGenerationOptions.ClientClass;
            }

            if (createAsync)
            {
                options |= ServiceContractGenerationOptions.TaskBasedAsynchronousMethod;
            }

            generator.Options = options;

            foreach (var contract in importer.ImportAllContracts())
            {
                generator.GenerateServiceContractType(contract);
            }

            if (generator.Errors.Count != 0)
            {
                return(generator.Errors.Select(x => x.Message).JoinValuesToString(separator: Environment.NewLine));
            }

            StringBuilder sb = new StringBuilder();

            using (var sw = new StringWriter(sb))
                CodeDomProvider.CreateProvider("C#")
                .GenerateCodeFromCompileUnit(
                    generator.TargetCompileUnit,
                    new IndentedTextWriter(sw),
                    new CodeGeneratorOptions()
                {
                    BracingStyle = "C"
                });

            File.WriteAllText(outputFile, sb.ToString());

            return(null);
        }
Exemplo n.º 21
0
        public void Build_CodeGenerationOptions_DefaultsToNone()
        {
            XmlSerializerImportOptions importOptions = PerformBuild(new CodeGeneratorOptions());

            Assert.That(importOptions.WebReferenceOptions.CodeGenerationOptions, Is.EqualTo(CodeGenerationOptions.None));
        }