Exemplo n.º 1
0
        public void TestRouter()
        {
            var router = new Router("OneService", "http://oscript.io/example/");

            router.AddHandler(new RouterTest());

            // Console.WriteLine(router.GenerateWsdl());

            var xmlBody = XmlWriterImpl.Create();

            xmlBody.SetString(ValueFactory.Create("UTF-8"));

            xmlBody.WriteStartElement("soap:Envelope");
            xmlBody.WriteNamespaceMapping("xsi", "http://www.w3.org/2001/XMLSchema-instance");
            xmlBody.WriteNamespaceMapping("xsd", "http://www.w3.org/2001/XMLSchema");
            xmlBody.WriteNamespaceMapping("soap", "http://schemas.xmlsoap.org/soap/envelope/");
            xmlBody.WriteNamespaceMapping("s", "http://oscript.io/example/");

            xmlBody.WriteStartElement("soap:Body");

            xmlBody.WriteStartElement("s:Sum");

            xmlBody.WriteStartElement("s:p0");
            xmlBody.WriteAttribute("xsi:type", "xsd:decimal");
            xmlBody.WriteText("1");
            xmlBody.WriteEndElement();              // s:p0

            xmlBody.WriteStartElement("s:p1");
            xmlBody.WriteAttribute("xsi:type", "xsd:decimal");
            xmlBody.WriteText("2");
            xmlBody.WriteEndElement();              // s:p1

            xmlBody.WriteEndElement();              // s:Sum

            xmlBody.WriteEndElement();              // soap:Body
            xmlBody.WriteEndElement();              // soap:Envelope

            var requestString = xmlBody.Close().ToString();

            Console.WriteLine(requestString);

            var responseString = router.Handle(requestString);

            Console.WriteLine(responseString);
        }
Exemplo n.º 2
0
        public static IWriter CreateWriter(TextWriter output, Format format)
        {
            switch (format)
            {
            case Format.Xml:
                var xws = new XmlWriterSettings {
                    ConformanceLevel = ConformanceLevel.Fragment
                };
                return(XmlWriterImpl.Create(output, xws));

#if FULL
            case Format.Json:
                return(JsonWriterImpl.Create(output));

            case Format.JsonML:
                return(JsonMLWriter.Create(output));
#endif
            default:
                throw new NotSupportedException("format");
            }
        }
Exemplo n.º 3
0
        public void TestXdto()
        {
            const string anyXml = @"<number>1</number>";
            var          reader = XmlReaderImpl.Create() as XmlReaderImpl;

            reader.SetString(anyXml);

            var factory      = XdtoFactory.Constructor() as XdtoFactory;
            var expectedType = factory.Type(new XmlDataType("int"));
            var anyValue     = factory.ReadXml(reader, expectedType) as XdtoDataValue;

            if (anyValue == null)
            {
                throw new Exception("XDTO не разобрался!");
            }

            var writer = XmlWriterImpl.Create() as XmlWriterImpl;

            writer.SetString();

            factory.WriteXml(writer, anyValue, "number");
            var serializedResult = writer.Close().AsString();

            Console.WriteLine("Original : {0}", anyXml);
            Console.WriteLine("Generated: {0}", serializedResult);

            reader = XmlReaderImpl.Create() as XmlReaderImpl;
            reader.SetString(serializedResult);

            var anyValueTypeExtraction = factory.ReadXml(reader) as XdtoDataValue;

            if (anyValueTypeExtraction == null)
            {
                throw new Exception("Новый XDTO не разобрался!");
            }
            Console.WriteLine("Serialized:{0}", anyValueTypeExtraction.Value);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Serializes given object.
 /// </summary>
 /// <typeparam name="T">The object type.</typeparam>
 /// <param name="schema">Serialization schema.</param>
 /// <param name="writer">The xml writer.</param>
 /// <param name="obj">The object to serialize.</param>
 public static void Write <T>(this IScope schema, XmlWriter writer, T obj)
 {
     using (var impl = XmlWriterImpl.Create(writer))
         Write(schema, impl, obj);
 }
Exemplo n.º 5
0
        public override void CallAsFunction(int methodNumber, IValue [] arguments, out IValue retValue)
        {
            var operation = _operations [methodNumber];

            retValue = ValueFactory.Create();

            ConnectIfNeeded();

            var headers = new MapImpl();

            headers.Insert(ValueFactory.Create("Content-Type"), ValueFactory.Create("application/xml"));

            var xmlBody = XmlWriterImpl.Create();

            xmlBody.SetString(ValueFactory.Create("UTF-8"));

            xmlBody.WriteStartElement("soap:Envelope");
            xmlBody.WriteNamespaceMapping("xsi", "http://www.w3.org/2001/XMLSchema-instance");
            xmlBody.WriteNamespaceMapping("xsd", "http://www.w3.org/2001/XMLSchema");
            xmlBody.WriteNamespaceMapping("soap", "http://schemas.xmlsoap.org/soap/envelope/");
            xmlBody.WriteNamespaceMapping("s", Endpoint.Interface.NamespaceURI);

            xmlBody.WriteStartElement("soap:Body");

            var serializer = XdtoSerializerImpl.Constructor(XdtoFactory) as XdtoSerializerImpl;

            operation.WriteRequestBody(xmlBody, serializer, arguments);

            xmlBody.WriteEndElement();              // soap:Body
            xmlBody.WriteEndElement();              // soap:Envelope

            var requestString = xmlBody.Close().ToString();

            if (DoDebug)
            {
                Console.WriteLine(requestString);
            }

            var responseText = _transport.Handle(requestString);
            var xmlResult    = XmlReaderImpl.Create() as XmlReaderImpl;

            if (DoDebug)
            {
                Console.WriteLine(responseText);
            }

            // TODO: Отдать на разбор фабрике
            xmlResult.SetString(responseText);

            var result = operation.ParseResponse(xmlResult, serializer);

            if (result is SoapExceptionResponse)
            {
                throw new ScriptEngine.Machine.RuntimeException((result as SoapExceptionResponse).FaultMessage);
            }

            var soapResponse = result as SuccessfulSoapResponse;

            retValue = soapResponse.RetValue;

            foreach (var outParamData in soapResponse.OutputParameters)
            {
                var argument = arguments [outParamData.Key] as IVariable;
                if (argument == null)
                {
                    continue;
                }

                argument.Value = outParamData.Value;
            }
        }