Пример #1
0
 /// <summary>
 /// Reads specified object from given xml string.
 /// </summary>
 /// <typeparam name="T">The object type.</typeparam>
 /// <param name="schema">Serialization schema.</param>
 /// <param name="xml">The xml string to parse.</param>
 /// <param name="obj">The object to deserialize.</param>
 public static void ReadXmlString <T>(this IScope schema, string xml, T obj)
 {
     using (var input = new StringReader(xml))
         using (var reader = XmlReaderImpl.Create(input))
         {
             Read(schema, reader, obj);
         }
 }
Пример #2
0
        public static IReader CreateReader(TextReader input, Format format, XNamespace rootNamespace)
        {
            switch (format)
            {
            case Format.Xml:
                return(XmlReaderImpl.Create(input));

#if FULL
            case Format.Json:
                return(JsonReaderImpl.Create(rootNamespace, input));

            case Format.JsonML:
                return(JsonMLReader.Create(input));
#endif
            default:
                throw new NotSupportedException("format");
            }
        }
Пример #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);
        }
Пример #4
0
 /// <summary>
 /// Reads object with given reader.
 /// </summary>
 /// <typeparam name="T">The object type.</typeparam>
 /// <param name="schema">Serialization schema.</param>
 /// <param name="reader">The xml reader.</param>
 public static T Read <T>(this IScope schema, XmlReader reader)
 {
     using (var impl = XmlReaderImpl.Create(reader))
         return(Read <T>(schema, impl));
 }
Пример #5
0
 /// <summary>
 /// Reads specified object with given reader.
 /// </summary>
 /// <typeparam name="T">The object type.</typeparam>
 /// <param name="schema">Serialization schema.</param>
 /// <param name="reader">The xml reader.</param>
 /// <param name="obj">The object to deserialize.</param>
 public static void Read <T>(this IScope schema, XmlReader reader, T obj)
 {
     using (var impl = XmlReaderImpl.Create(reader))
         Read(schema, impl, obj);
 }
Пример #6
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;
            }
        }