Beispiel #1
0
        public void TestUnnamedComplexType()
        {
            var ss        = LoadSchema(@"TestData/Schema01.xsd");
            var f         = new XdtoFactory(ss);
            var t         = f.Type(uri: "unnamedComplexType", name: "TheComplexType") as XdtoObjectType;
            var v         = f.Create(t) as XdtoDataObject;
            var p         = t.Properties.Get("Element");
            var pv        = f.Create(p.Type) as XdtoDataObject;
            var var1Value = f.Create(f.Type(XmlNs.xs, "string"), ValueFactory.Create("value of var1"));

            pv.Set("var1", ValueFactory.Create(var1Value));

            v.Set("Element", pv);

            var w = new XmlWriterImpl();

            w.SetString();

            f.WriteXml(w, v, "value");

            var serialized = w.Close().AsString();

            Console.WriteLine(serialized);

            var r = new XmlReaderImpl();

            r.SetString(serialized);

            var checkObject = f.ReadXml(r) as XdtoDataObject;
            var checkValue  = (checkObject.Get("Element") as XdtoDataObject).Get("var1").AsString();

            Console.WriteLine($"got {checkValue}");
        }
Beispiel #2
0
        public string Handle(string requestBody)
        {
            var reader = new XmlReaderImpl();

            reader.SetString(requestBody);

            var writer = new XmlWriterImpl();

            writer.SetString();

            writer.WriteStartElement("Envelope", xmlns_soap);
            writer.WriteNamespaceMapping("soap", xmlns_soap);
            writer.WriteStartElement("Body", xmlns_soap);

            try
            {
                Handle(reader, writer);
            }
            catch (Exception exc)
            {
                WriteFault(writer, exc.Message);
            }

            writer.WriteEndElement();              // Body
            writer.WriteEndElement();              // Envelope

            var responseText = writer.Close().AsString();

            return(responseText);
        }
Beispiel #3
0
        public string GenerateWsdl()
        {
            var writer = new XmlWriterImpl();

            writer.SetString();
            writer.WriteXMLDeclaration();

            writer.WriteStartElement("definitions");

            writer.WriteNamespaceMapping("", "http://schemas.xmlsoap.org/wsdl/");
            writer.WriteNamespaceMapping("soap12bind", "http://schemas.xmlsoap.org/wsdl/soap12/");
            writer.WriteNamespaceMapping("soapbind", "http://schemas.xmlsoap.org/wsdl/soap/");
            writer.WriteNamespaceMapping("tns", NamespaceUri);
            writer.WriteAttribute("name", Name);
            writer.WriteAttribute("targetNamespace", NamespaceUri);

            #region definitions/types

            writer.WriteStartElement("types");

            writer.WriteStartElement("xs:schema");
            writer.WriteNamespaceMapping("xs", "http://www.w3.org/2001/XMLSchema");
            writer.WriteNamespaceMapping("tns", NamespaceUri);

            writer.WriteAttribute("targetNamespace", NamespaceUri);
            writer.WriteAttribute("attributeFormDefault", "unqualified");
            writer.WriteAttribute("elementFormDefault", "qualified");

            foreach (var operation in operations.Values)
            {
                foreach (var part in operation.Parameters.Parts)
                {
                    writer.WriteStartElement("xs:element");
                    writer.WriteAttribute("name", part.Name);

                    writer.WriteStartElement("xs:complexType");
                    writer.WriteStartElement("xs:sequence");
                    foreach (var param in part.Parameters)
                    {
                        if (param.ParameterDirection == ParameterDirectionEnum.Out)
                        {
                            continue;
                        }

                        writer.WriteStartElement("xs:element");
                        writer.WriteAttribute("name", param.Name);
                        writer.WriteAttribute("type", "xs:anyType");
                        writer.WriteEndElement();                          // xs:element
                    }

                    writer.WriteEndElement();                      // xs:sequence
                    writer.WriteEndElement();                      // xs:complexType
                    writer.WriteEndElement();                      // xs:element
                }

                writer.WriteStartElement("xs:element");
                writer.WriteAttribute("name", operation.ReturnValue.MessagePartName);

                writer.WriteStartElement("xs:complexType");
                writer.WriteStartElement("xs:sequence");

                writer.WriteStartElement("xs:element");
                writer.WriteAttribute("name", "return");
                writer.WriteAttribute("type", "xs:anyType");
                writer.WriteEndElement();                  // xs:element

                foreach (var param in operation.Parameters)
                {
                    if (param.ParameterDirection == ParameterDirectionEnum.In)
                    {
                        continue;
                    }

                    writer.WriteStartElement("xs:element");
                    writer.WriteAttribute("name", param.Name);
                    writer.WriteAttribute("type", "xs:anyType");
                    writer.WriteEndElement();                      // xs:element
                }

                writer.WriteEndElement();                  // xs:sequence
                writer.WriteEndElement();                  // xs:complexType
                writer.WriteEndElement();                  // xs:element
            }


            writer.WriteEndElement();              // xs:schema
            writer.WriteEndElement();              // types
            #endregion

            #region definitions/messages
            foreach (var operation in operations.Values)
            {
                writer.WriteStartElement("message");
                writer.WriteAttribute("name", string.Format("{0}RequestMessage", operation.Name));

                foreach (var part in operation.Parameters.Parts)
                {
                    writer.WriteStartElement("part");
                    writer.WriteAttribute("name", part.Name);
                    writer.WriteAttribute("element", part.ElementName);
                    writer.WriteEndElement();              // part
                }
                writer.WriteEndElement();                  // message

                writer.WriteStartElement("message");
                writer.WriteAttribute("name", string.Format("{0}ResponseMessage", operation.Name));

                writer.WriteStartElement("part");
                writer.WriteAttribute("name", "parameters");
                writer.WriteAttribute("element", operation.ReturnValue.MessagePartName);
                writer.WriteEndElement();                  // part

                writer.WriteEndElement();                  // message
            }
            #endregion

            #region definitions/portType
            var portTypeName = string.Format("{0}PortType", Name);

            writer.WriteStartElement("portType");
            writer.WriteAttribute("name", portTypeName);

            foreach (var operation in operations.Values)
            {
                writer.WriteStartElement("operation");
                writer.WriteAttribute("name", operation.Name);

                writer.WriteStartElement("input");
                writer.WriteAttribute("message", string.Format("{0}RequestMessage", operation.Name));
                writer.WriteEndElement();                  // input

                writer.WriteStartElement("output");
                writer.WriteAttribute("message", string.Format("{0}ResponseMessage", operation.Name));
                writer.WriteEndElement();                  // output

                writer.WriteEndElement();                  // operation
            }

            writer.WriteEndElement();              // portType
            #endregion

            #region definitions/binding
            var mainBindingName = string.Format("{0}Binding", Name);

            writer.WriteStartElement("binding");
            writer.WriteAttribute("name", mainBindingName);
            writer.WriteAttribute("type", portTypeName);

            writer.WriteStartElement("soapbind:binding");
            writer.WriteAttribute("style", "document");
            writer.WriteAttribute("transport", "http://schemas.xmlsoap.org/soap/http");
            writer.WriteEndElement();              // soapbind:binding

            foreach (var operation in operations.Values)
            {
                var soapActionString = string.Format("{0}#{1}:{2}", NamespaceUri, Name, operation.Name);

                writer.WriteStartElement("operation");
                writer.WriteAttribute("name", operation.Name);

                writer.WriteStartElement("soapbind:operation");
                writer.WriteAttribute("style", "document");
                writer.WriteAttribute("soapAction", soapActionString);

                writer.WriteStartElement("input");
                writer.WriteStartElement("soapbind:body");
                writer.WriteAttribute("use", "literal");
                writer.WriteEndElement();                  // soapbind:body
                writer.WriteEndElement();                  // input

                writer.WriteStartElement("output");
                writer.WriteStartElement("soapbind:body");
                writer.WriteAttribute("use", "literal");
                writer.WriteEndElement();                  // soapbind:body
                writer.WriteEndElement();                  // output

                writer.WriteEndElement();                  // soapbind:operation
                writer.WriteEndElement();                  // operation
            }

            writer.WriteEndElement();              // binding

            #endregion

            #region definitions/service
            var serviceUrl = "http://localhost/service";

            writer.WriteStartElement("service");
            writer.WriteStartElement("port");

            var mainPortName = string.Format("{0}Soap", Name);
            writer.WriteAttribute("name", mainPortName);
            writer.WriteAttribute("binding", string.Format("tns:{0}", mainBindingName));

            writer.WriteStartElement("documentation");
            writer.WriteEndElement();              // documentation

            writer.WriteStartElement("soapbind:address");
            writer.WriteAttribute("location", serviceUrl);
            writer.WriteEndElement();              // soapbind:address


            writer.WriteEndElement();              // port
            writer.WriteEndElement();              // service

            #endregion

            writer.WriteEndElement();              // definitions

            return(writer.Close().AsString());
        }