public void ZeroLengthMethodName() { string xml = @"<?xml version=""1.0"" ?> <methodCall> <methodName></methodName> <params> <param> <value>test string</value> </param> </params> </methodCall>"; var sr = new StringReader(xml); var serializer = new XmlRpcSerializer(); Assert.Throws <XmlRpcInvalidXmlRpcException>(() => serializer.DeserializeRequest(sr, null)); }
public static object Parse( XmlDocument xdoc, Type valueType, MappingAction action, out Type parsedType, out Type parsedArrayType) { var node = SelectValueNode(xdoc.SelectSingleNode("value")); var parseStack = new XmlRpcSerializer.ParseStack("request"); var ser = new XmlRpcSerializer(); var obj = ser.ParseValue(node, valueType, parseStack, action, out parsedType, out parsedArrayType); return(obj); }
public static object Parse( string xml, Type valueType, MappingAction action, XmlRpcSerializer serializer, out Type parsedType, out Type parsedArrayType) { var sr = new StringReader(xml); var xdoc = new XmlDocument(); xdoc.PreserveWhitespace = true; xdoc.Load(sr); return(Parse(xdoc, valueType, action, serializer, out parsedType, out parsedArrayType)); }
public void VoidReturnType() { var xml = @"<?xml version=""1.0"" ?> <methodResponse> <params> <param> <value></value> </param> </params> </methodResponse>"; var sr = new StringReader(xml); var serializer = new XmlRpcSerializer(); var response = serializer.DeserializeResponse(sr, typeof(void)); Assert.IsTrue(response.retVal == null, "retval is null"); }
public void TwoLeadingSpace() { string xml = @"<?xml version=""1.0""?> <methodCall><methodName>rtx.EchoString</methodName> <params> <param><value> ddd</value></param> </params></methodCall>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); XmlRpcRequest request = serializer.DeserializeRequest(sr, GetType()); Assert.AreEqual(request.args[0].GetType(), typeof(string), "argument is string"); Assert.AreEqual(" ddd", request.args[0]); }
public void ISO_8869_1() { var dllPath = System.Reflection.Assembly.GetExecutingAssembly().Location; using (var stm = File.Open(Path.Combine(Path.GetDirectoryName(dllPath), "iso-8859-1_response.xml"), FileMode.Open, FileAccess.Read)) { var serializer = new XmlRpcSerializer(); var response = serializer.DeserializeResponse(stm, typeof(string)); var ret = (string)response.retVal; var nnn = ret.Length; Assert.IsTrue(ret == "hæ hvað segirðu þá", "retVal is 'hæ hvað segirðu þá'"); } }
public void NegativeOverflowI8() { string xml = @"<?xml version=""1.0"" ?> <methodCall> <methodName>TestInt</methodName> <params> <param> <value><i8>-9999999999999999999999999999999999999999999</i8></value> </param> </params> </methodCall>"; var sr = new StringReader(xml); var serializer = new XmlRpcSerializer(); Assert.Throws <XmlRpcInvalidXmlRpcException>(() => serializer.DeserializeRequest(sr, null)); }
public void ArrayInStruct() { // reproduce problem reported by Alexander Agustsson var xml = @"<?xml version=""1.0"" encoding=""ISO-8859-1""?> <methodResponse> <params> <param> <value> <struct> <member> <name>key3</name> <value> <array> <data> <value>New Milk</value> <value>Old Milk</value> </data> </array> </value> </member> </struct> </value> </param> </params> </methodResponse>"; var sr = new StringReader(xml); var serializer = new XmlRpcSerializer(); var response = serializer.DeserializeResponse(sr, null); var o = response.retVal; Assert.IsTrue(o is XmlRpcStruct, "retval is XmlRpcStruct"); var xrs = (XmlRpcStruct)o; Assert.IsTrue(xrs.Count == 1, "retval contains one entry"); var elem = xrs["key3"]; Assert.IsTrue(elem != null, "element has correct key"); Assert.IsTrue(elem is Array, "element is an array"); var array = (object[])elem; Assert.IsTrue(array.Length == 2, "array has 2 members"); Assert.IsTrue(array[0] is string && (string)array[0] == "New Milk" && array[1] is string && (string)array[1] == "Old Milk", "values of array members"); }
public void SingleSpaceString() { string xml = @"<?xml version=""1.0""?> <methodCall><methodName>rtx.EchoString</methodName> <params> <param><value> </value></param> </params></methodCall>"; var sr = new StringReader(xml); var serializer = new XmlRpcSerializer(); XmlRpcRequest request = serializer.DeserializeRequest(sr, GetType()); Assert.AreEqual(request.args[0].GetType(), typeof(string), "argument is string"); Assert.AreEqual(" ", request.args[0], "argument is string containing single space"); }
public void MissingParams() { try { string xml = @"<?xml version=""1.0"" ?> <methodCall> <methodName>TestString</methodName> </methodCall>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); XmlRpcRequest request = serializer.DeserializeRequest(sr, null); } catch (Exception ex) { string s = ex.Message; } }
public void Gabe() { string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?><methodResponse><params><param><value><struct><member><name>response</name><value><struct><member><name>result</name><value><array><data><value><struct><member><name>state</name><value><string>CO</string></value></member><member><name>latitude</name><value><double>39.74147878</double></value></member><member><name>add1</name><value><string>110 16th St.</string></value></member><member><name>add2</name><value><string /></value></member><member><name>image_map</name><value><array><data><value><string>rect</string></value><value><int>290</int></value><value><int>190</int></value><value><int>309</int></value><value><int>209</int></value></data></array></value></member><member><name>city</name><value><string>Denver</string></value></member><member><name>fax</name><value><string>303-623-1111</string></value></member><member><name>name</name><value><boolean>0" + "</boolean></value></member><member><name>longitude</name><value><double>-104.9874159</double></value></member><member><name>georesult</name><value><string>10 W2GIADDRESS</string></value></member><member><name>zip</name><value><string>80202</string></value></member><member><name>hours</name><value><string>Mon-Sun 10am-6pm</string></value></member><member><name>dealerid</name><value><string>545</string></value></member><member><name>phone</name><value><string>303-623-5050</string></value></member></struct></value></data></array></value></member><member><name>map_id</name><value><string>a5955239d080dfbb7002fd063aa7b47e0d</string></value></member><member><name>map</name><value><struct><member><name>zoom_level</name><value><int>3</int></value></member><member><name>image_type</name><value><string>image/png</string></value></member><member><name>miles</name><value><double>1.75181004463519</double></value></member><member><name>kilometers</name><value><double>2.81926498447338" + "</double></value></member><member><name>scalebar</name><value><int>1</int></value></member><member><name>content</name><value><string>http://mapserv.where2getit.net/maptools/mapserv.cgi/a5955239d080dfbb7002fd063aa7b47e0d.png</string></value></member><member><name>scale</name><value><int>26000</int></value></member><member><name>map_style</name><value><string>default</string></value></member><member><name>size</name><value><array><data><value><int>600</int></value><value><int>400</int></value></data></array></value></member><member><name>content_type</name><value><string>text/uri-list</string></value></member><member><name>buffer</name><value><double>0.01</double></value></member><member><name>center</name><value><struct><member><name>georesult</name><value><string>AUTOBBOX</string></value></member><member><name>latitude</name><value><double>39.74147878</double></value></member><member><name>longitude</name><value><double>-104.9874159</double></value></member></struct></value></member></struct></value></member><member><name>result_count</name><value><int>1</int></value></member><member><name>image_map</name><value><boolean>1</boolean></value></member><member><name>result_total_count</name><value><int>1</int></value></member></struct></value></member><member><name>times</name><value><struct><member><name>csys</name><value><int>0</int></value></member><member><name>cusr</name><value><int>0</int></value></member><member><name>sys</name><value><int>0</int></value></member><member><name>usr</name><value><double>0.0200000000000005" + "</double></value></member><member><name>wallclock</name><value><double>2.547471</double></value></member></struct></value></member><member><name>request</name><value><struct><member><name>state</name><value><string>CO</string></value></member><member><name>%sort</name><value><array><data /></array></value></member><member><name>%id</name><value><string>4669b341d87be7f450b4bf0dc4cd0a1e</string></value></member><member><name>city</name><value><string>denver</string></value></member><member><name>%limit</name><value><int>10</int></value></member><member><name>%offset</name><value><int>0</int></value></member></struct></value></member></struct></value></param></params></methodResponse>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); XmlRpcResponse response = serializer.DeserializeResponse(sr, typeof(XmlRpcStruct)); XmlRpcStruct response_struct = (XmlRpcStruct)response.retVal; XmlRpcStruct _response = (XmlRpcStruct)response_struct["response"]; Array results = (Array)_response["result"]; Assert.AreEqual(results.Length, 1); }
public void InvalidInteger() { string xml = @"<?xml version=""1.0"" ?> <methodCall> <methodName>TestInt</methodName> <params> <param> <value><i4>12kiol</i4></value> </param> </params> </methodCall>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); XmlRpcRequest request = serializer.DeserializeRequest(sr, null); Assert.Fail("Invalid integer should cause exception"); }
public static object Parse( XmlDocument xdoc, Type valueType, MappingAction action, out Type parsedType, out Type parsedArrayType) { XmlNode node = xdoc.SelectSingleNode("value").FirstChild; XmlRpcSerializer.ParseStack parseStack = new XmlRpcSerializer.ParseStack("request"); XmlRpcSerializer ser = new XmlRpcSerializer(); object obj = ser.ParseValue(node, valueType, parseStack, action, out parsedType, out parsedArrayType); return(obj); }
public void StructParamsGetInfo() { Stream stm = new MemoryStream(); var req = new XmlRpcRequest(); req.args = new Object[] { "Bob Dylan", "abcd1234" }; req.method = "artist.getInfo"; req.mi = GetType().GetMethod("getInfo"); var ser = new XmlRpcSerializer(); ser.Indentation = 2; ser.UseIntTag = true; ser.SerializeRequest(stm, req); stm.Position = 0; TextReader tr = new StreamReader(stm); var reqstr = tr.ReadToEnd(); Assert.AreEqual( @"<?xml version=""1.0""?> <methodCall> <methodName>artist.getInfo</methodName> <params> <param> <value> <struct> <member> <name>artist</name> <value> <string>Bob Dylan</string> </value> </member> <member> <name>api_key</name> <value> <string>abcd1234</string> </value> </member> </struct> </value> </param> </params> </methodCall>", reqstr); }
public void EmptyValueReturn() { var xml = @"<?xml version=""1.0"" ?> <methodResponse> <params> <param> <value/> </param> </params> </methodResponse>"; var sr = new StringReader(xml); var serializer = new XmlRpcSerializer(); var response = serializer.DeserializeResponse(sr, typeof(string)); var s = (string)response.retVal; Assert.IsTrue(s == "", "retval is empty string"); }
public void DeserializeZeroParameters() { string xml = @"<?xml version=""1.0""?> <methodCall> <methodName>FooZeroParameters</methodName> <params /> </methodCall>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); XmlRpcRequest request = serializer.DeserializeRequest(sr, this.GetType()); Assert.AreEqual(request.method, "FooZeroParameters", "method is FooZeroParameters"); Assert.AreEqual(0, request.args.Length, "no arguments"); }
public void ReturnNestedStruct() { var xml = @"<?xml version=""1.0"" encoding=""ISO-8859-1""?> <methodResponse> <params> <param> <value> <struct> <member> <name>version</name> <value><string>1.6</string></value> </member> <member> <name>record</name> <value> <struct> <member> <name>firstName</name> <value>Joe</value></member> <member> <name>lastName</name> <value>Test</value> </member> </struct> </value> </member> </struct> </value> </param> </params> </methodResponse>"; var sr = new StringReader(xml); var serializer = new XmlRpcSerializer(); var response = serializer.DeserializeResponse(sr, typeof(MyStruct)); var o = response.retVal; Assert.IsTrue(o is MyStruct, "retval is MyStruct"); var mystr = (MyStruct)o; Assert.AreEqual(mystr.version, "1.6", "version is 1.6"); Assert.IsTrue(mystr.record.firstName == "Joe", "firstname is Joe"); Assert.IsTrue(mystr.record.lastName == "Test", "lastname is Test"); }
public string Invoke(Stream requestStream) { try { var xmlRpcSerializer = new XmlRpcSerializer(); var xmlRpcServiceAttribute = (XmlRpcServiceAttribute)Attribute.GetCustomAttribute(this.GetType(), typeof(XmlRpcServiceAttribute)); if (xmlRpcServiceAttribute != null) { if (xmlRpcServiceAttribute.XmlEncoding != null) { xmlRpcSerializer.XmlEncoding = Encoding.GetEncoding(xmlRpcServiceAttribute.XmlEncoding); } xmlRpcSerializer.UseIntTag = xmlRpcServiceAttribute.UseIntTag; xmlRpcSerializer.UseStringTag = xmlRpcServiceAttribute.UseStringTag; xmlRpcSerializer.UseIndentation = xmlRpcServiceAttribute.UseIndentation; xmlRpcSerializer.Indentation = xmlRpcServiceAttribute.Indentation; } var bodyStream = new StreamReader(requestStream); bodyStream.BaseStream.Seek(0, SeekOrigin.Begin); var request = xmlRpcSerializer.DeserializeRequest(bodyStream, this.GetType()); var response = Invoke(request); Stream stream = new MemoryStream(); xmlRpcSerializer.SerializeResponse(stream, response); stream.Seek(0L, SeekOrigin.Begin); var reader = new StreamReader(stream); return(reader.ReadToEnd()); } catch (Exception ex) { loggingDataService.AddEvent(new EventDataItem(EventCodes.Error, ex.Message, "XmlRpcManager.Invoke")); var faultEx = (!(ex is XmlRpcException)) ? ((!(ex is XmlRpcFaultException)) ? new XmlRpcFaultException(0, ex.Message) : ((XmlRpcFaultException)ex)) : new XmlRpcFaultException(0, ((XmlRpcException)ex).Message); var xmlRpcSerializer2 = new XmlRpcSerializer(); Stream stream2 = new MemoryStream(); xmlRpcSerializer2.SerializeFaultResponse(stream2, faultEx); stream2.Seek(0L, SeekOrigin.Begin); var reader2 = new StreamReader(stream2); return(reader2.ReadToEnd()); } }
public void Class() { string xml = @"<?xml version=""1.0""?> <methodCall> <methodName>TestClassMethod</methodName> <params> <param> <value> <struct> <member> <name>_int</name> <value> <i4>456</i4> </value> </member> <member> <name>_string</name> <value> <string>Test Class</string> </value> </member> </struct> </value> </param> </params> </methodCall>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); XmlRpcRequest request = serializer.DeserializeRequest(sr, GetType()); Assert.AreEqual(request.args[0].GetType(), typeof(TestClass), "argument is TestClass"); // XmlRpcStruct xrs = (XmlRpcStruct)request.args[0]; // Assert.IsTrue(xrs.Count == 4, "XmlRpcStruct has 4 members"); // Assert.IsTrue(xrs.ContainsKey("member1") && (int)xrs["member1"] == 1, // "member1"); // Assert.IsTrue(xrs.ContainsKey("member2") && (int)xrs["member2"] == 2, // "member2"); // Assert.IsTrue(xrs.ContainsKey("member-3") && (int)xrs["member-3"] == 3, // "member-3"); // Assert.IsTrue(xrs.ContainsKey("member-4") && (int)xrs["member-4"] == 4, // "member-4"); }
public ServerProcessing ProcessMessage( IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream ) { // use presence of SOAPAction header to determine if this is a SOAP // request - if so pass onto next sink in chain string soapAction = (string)requestHeaders["SOAPAction"]; if (soapAction != null) { return(m_next.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream)); } // for time being assume we have an XML-RPC request (need to improve // this in case there are other non-SOAP formatters in the chain) try { MethodCall mthdCall = DeserializeRequest(requestHeaders, requestStream); sinkStack.Push(this, mthdCall); // forward to next sink in chain - pass request stream as null to // indicate that we have deserialized the request m_next.ProcessMessage(sinkStack, mthdCall, requestHeaders, null, out responseMsg, out responseHeaders, out responseStream); SerializeResponse(responseMsg, ref responseHeaders, ref responseStream); } catch (Exception ex) { responseMsg = new ReturnMessage(ex, (IMethodCallMessage)requestMsg); responseStream = new MemoryStream(); XmlRpcFaultException fex = new XmlRpcFaultException(0, ex.Message); XmlRpcSerializer serializer = new XmlRpcSerializer(); serializer.SerializeFaultResponse(responseStream, (XmlRpcFaultException)fex); responseHeaders = new TransportHeaders(); } return(ServerProcessing.Complete); }
public void Class() { Stream stm = new MemoryStream(); var req = new XmlRpcRequest(); var arg = new TestClass(); arg._int = 456; arg._string = "Test Class"; req.args = new Object[] { arg }; req.method = "Foo"; var ser = new XmlRpcSerializer(); ser.SerializeRequest(stm, req); stm.Position = 0; TextReader tr = new StreamReader(stm); var reqstr = tr.ReadToEnd(); Assert.AreEqual( @"<?xml version=""1.0""?> <methodCall> <methodName>Foo</methodName> <params> <param> <value> <struct> <member> <name>_int</name> <value> <i4>456</i4> </value> </member> <member> <name>_string</name> <value> <string>Test Class</string> </value> </member> </struct> </value> </param> </params> </methodCall>", reqstr); }
public void NoParam1() { try { string xml = @"<?xml version=""1.0"" ?> <methodCall> <methodName>MethodNoArgs</methodName> <params/> </methodCall>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); XmlRpcRequest request = serializer.DeserializeRequest(sr, this.GetType()); } catch (Exception ex) { Console.WriteLine(ex); } }
public void TooFewParameters() { string xml = @"<?xml version=""1.0""?> <methodCall> <methodName>blogger.getUsersBlogs</methodName> <params> <param> <value> <string>myusername</string> </value> </param> </params> </methodCall>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); XmlRpcRequest request = serializer.DeserializeRequest(sr, GetType()); }
public void TooFewParameters() { string xml = @"<?xml version=""1.0""?> <methodCall> <methodName>blogger.getUsersBlogs</methodName> <params> <param> <value> <string>myusername</string> </value> </param> </params> </methodCall>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); Assert.That(() => serializer.DeserializeRequest(sr, GetType()), Throws.TypeOf<XmlRpcInvalidParametersException>()); }
public void DeserializeParamsEmpty() { string xml = @"<?xml version=""1.0""?> <methodCall> <methodName>Foo</methodName> <params/> </methodCall>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); XmlRpcRequest request = serializer.DeserializeRequest(sr, this.GetType()); Assert.AreEqual(request.method, "Foo", "method is Foo"); Assert.AreEqual(request.args[0].GetType(), typeof(object[]), "argument is obj[]"); Assert.AreEqual((request.args[0] as object[]).Length, 0, "argument is empty array of object"); }
public void IntegerIncorrectType() { try { var xml = @"<?xml version=""1.0"" ?> <methodResponse> <params> <param> <value><int>12345</int></value> </param> </params> </methodResponse>"; var sr = new StringReader(xml); var serializer = new XmlRpcSerializer(); var response = serializer.DeserializeResponse(sr, typeof(string)); Assert.Fail("Should throw XmlRpcTypeMismatchException"); } catch (XmlRpcTypeMismatchException) {} }
public void ZeroI8() { string xml = @"<?xml version=""1.0"" ?> <methodCall> <methodName>TestInt</methodName> <params> <param> <value><i8>0</i8></value> </param> </params> </methodCall>"; StringReader sr = new StringReader(xml); XmlRpcSerializer serializer = new XmlRpcSerializer(); XmlRpcRequest request = serializer.DeserializeRequest(sr, null); Assert.AreEqual(request.args[0].GetType(), typeof(long), "argument is long"); Assert.AreEqual((long)request.args[0], 0, "argument is 0"); }
public void NilType() { var xml = @"<?xml version=""1.0"" ?> <methodResponse> <params> <param> <value><nil/></value> </param> </params> </methodResponse>"; var sr = new StringReader(xml); var serializer = new XmlRpcSerializer(); var response = serializer.DeserializeResponse(sr, null); var o = response.retVal; Assert.AreEqual(null, o, "retval is null"); }
public void BillKeenanProblem() { var xml = @"<?xml version='1.0'?> <methodResponse> <params> <param> <value> <struct> <member> <name>x</name> <value> <i4>123</i4> </value> </member> <member> <name>s</name> <value> <string>ABD~~DEF</string> </value> </member> <member> <name>unexpected</name> <value> <string>this is unexpected</string> </value> </member> </struct> </value> </param> </params> </methodResponse>"; var sr = new StringReader(xml); var serializer = new XmlRpcSerializer(); var response = serializer.DeserializeResponse(sr, typeof(BillStruct)); var o = response.retVal; Assert.IsTrue(o is BillStruct, "retval is BillStruct"); var bs = (BillStruct)o; Assert.IsTrue(bs.x == 123 && bs.s == "ABD~~DEF", "struct members"); }
public void StructParamsTooManyParams() { Stream stm = new MemoryStream(); var req = new XmlRpcRequest(); req.args = new Object[] { 1234, "test", 10.1, "lopol" }; req.method = "Foo"; req.mi = GetType().GetMethod("Foo"); var ser = new XmlRpcSerializer(); ser.Indentation = 2; ser.UseIntTag = true; ser.SerializeRequest(stm, req); }