Ejemplo n.º 1
0
        private XElement BuildComplexType(Type type, out string fileGroup)
        {
            var xsdComplexType = XsdComplexType.Get(type);

            //添加XSD文件
            fileGroup = xsdComplexType.FileGroup;
            SetDefaultFile(fileGroup);

            //只有Request或者Response对象类型,末尾自动添加Type
            string name = (type.Name.EndsWith("Request") || type.Name.EndsWith("Response"))
                ? type.Name + "Type"
                : type.Name;

            var complexTypeElement = new XElement(
                _xs + "complexType",
                new XAttribute("name", name)
                );

            if (!string.IsNullOrEmpty(xsdComplexType.Annotation))
            {
                complexTypeElement.Add(new XElement(
                                           _xs + "annotation",
                                           new XElement(_xs + "documentation", xsdComplexType.Annotation)
                                           ));
            }

            var sequenceElement = BuildSequence(type);

            AddProperties(type, sequenceElement);
            complexTypeElement.Add(sequenceElement);
            return(complexTypeElement);
        }
Ejemplo n.º 2
0
        private void AddProperties(Type type, XElement sequenceElement)
        {
            var properties = type.GetProperties();

            foreach (var propertyInfo in properties)
            {
                var typeName        = Common.GetXsdTypeName(propertyInfo.PropertyType);
                var propertyElement = new XElement(
                    _xs + "element",
                    new XAttribute("name", propertyInfo.Name),
                    new XAttribute("type", typeName)
                    );

                var xsdElement = XsdElement.Get(propertyInfo);
                if (xsdElement != null)
                {
                    if (!string.IsNullOrEmpty(xsdElement.MinOccurs))
                    {
                        propertyElement.SetAttributeValue("minOccurs", xsdElement.MinOccurs);
                    }
                    if (!string.IsNullOrEmpty(xsdElement.MaxOccurs))
                    {
                        propertyElement.SetAttributeValue("maxOccurs", xsdElement.MaxOccurs);
                    }

                    if (!string.IsNullOrEmpty(xsdElement.Annotation))
                    {
                        propertyElement.Add(new XElement(
                                                _xs + "annotation",
                                                new XElement(
                                                    _xs + "documentation", xsdElement.Annotation
                                                    )
                                                ));
                    }
                }

                //判断是否自定义类型, 添加Import
                if (!typeName.StartsWith("xs:"))
                {
                    var parentClassFileGroup   = XsdComplexType.Get(type).FileGroup;
                    var propertyClassFileGroup = Common.GetFileGroup(propertyInfo.PropertyType);
                    if (parentClassFileGroup != propertyClassFileGroup)
                    {
                        string importXsd = propertyClassFileGroup + ".xsd";
                        //判断是否已经存在该Import
                        if (_xsdFiles[parentClassFileGroup].Imports.All(item => item.Attribute("schemaLocation").Value != importXsd))
                        {
                            _xsdFiles[parentClassFileGroup].Imports.Add(
                                new XElement(
                                    _xs + "include",
                                    new XAttribute("schemaLocation", importXsd)
                                    )
                                );
                        }
                    }
                }
                sequenceElement.Add(propertyElement);
            }
        }
Ejemplo n.º 3
0
        public static string GetFileGroup(Type type)
        {
            type = GetPropertyType(type);

            if (type.IsClass)
            {
                return(XsdComplexType.Get(type).FileGroup);
            }
            if (type.IsEnum)
            {
                return(XsdSimpleType.Get(type).FileGroup);
            }
            return(null);
        }
Ejemplo n.º 4
0
        private static ServiceDescription CreateNewServiceDescription()
        {
            var serviceDescription = new ServiceDescription();

            serviceDescription.IdOwnerUser          = 1;
            serviceDescription.ServiceName          = "Test Service";
            serviceDescription.RegistrationDateTime = DateTime.Now;
            serviceDescription.Xml = "test";

            serviceDescription.XsdDocument = new XsdDocument
            {
                RegistrationDateTime = DateTime.Now,
                ServiceDescription   = serviceDescription,
                XsdComplexTypes      = new List <XsdComplexType>(),
                XsdSimpleTypes       = new List <XsdSimpleType>()
            };

            var complexType1 = new XsdComplexType
            {
                XsdComplexTypeName   = "Complex Type 1",
                RegistrationDateTime = DateTime.Now
            };

            var complexType2 = new XsdComplexType
            {
                XsdComplexTypeName   = "Complex Type 2",
                RegistrationDateTime = DateTime.Now
            };

            var complexType3 = new XsdComplexType
            {
                XsdComplexTypeName   = "Complex Type 3",
                RegistrationDateTime = DateTime.Now
            };

            var complexType4 = new XsdComplexType
            {
                XsdComplexTypeName   = "Complex Type 4",
                RegistrationDateTime = DateTime.Now
            };

            complexType1.ChildrenXsdComplexTypes = new List <XsdComplexType> {
                complexType2
            };
            //complexType2.ParentsXsdComplexType = new List<XsdComplexType> { complexType1 };

            complexType2.ChildrenXsdComplexTypes = new List <XsdComplexType> {
                complexType3, complexType4
            };
            //complexType3.ParentsXsdComplexType = new List<XsdComplexType> { complexType2 };
            //complexType4.ParentsXsdComplexType = new List<XsdComplexType> { complexType2 };

            var simpleType1 = new XsdSimpleType
            {
                XsdSimpleTypeName    = "Simple Type 1",
                RegistrationDateTime = DateTime.Now
            };

            var simpleType2 = new XsdSimpleType
            {
                XsdSimpleTypeName    = "Simple Type 2",
                RegistrationDateTime = DateTime.Now
            };

            var simpleType3 = new XsdSimpleType
            {
                XsdSimpleTypeName    = "Simple Type 3",
                RegistrationDateTime = DateTime.Now
            };

            complexType2.XsdSimpleTypes = new List <XsdSimpleType> {
                simpleType1
            };
            complexType3.XsdSimpleTypes = new List <XsdSimpleType> {
                simpleType2
            };
            complexType4.XsdSimpleTypes = new List <XsdSimpleType> {
                simpleType3
            };

            serviceDescription.XsdDocument.XsdComplexTypes.Add(complexType1);
            serviceDescription.XsdDocument.XsdComplexTypes.Add(complexType2);
            serviceDescription.XsdDocument.XsdComplexTypes.Add(complexType3);
            serviceDescription.XsdDocument.XsdComplexTypes.Add(complexType4);

            var wsdlInterface = new WsdlInterface {
                WsdlInterfaceName = "Interface 1"
            };

            serviceDescription.WsdlInterfaces = new List <WsdlInterface> {
                wsdlInterface
            };

            return(serviceDescription);
        }