/// <summary> /// Serializes an XML-RPC request to a request stream. /// </summary> /// <param name="requestStream">the <see cref="System.IO.Stream"/> to write</param> /// <param name="request">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/> to serialize</param> /// <param name="config">the context configuration</param> /// <param name="typeSerializerFactory">the <see cref="LX.EasyWeb.XmlRpc.Serializer.ITypeSerializerFactory"/> to get type serializers</param> /// <exception cref="System.Xml.XmlException">failed writing the request XML</exception> public void WriteRequest(Stream requestStream, IXmlRpcRequest request, IXmlRpcStreamConfig config, ITypeSerializerFactory typeSerializerFactory) { using (XmlWriter writer = _xmlWriterFactory.GetXmlWriter(config, requestStream)) { WriteRequest(writer, request, config, typeSerializerFactory); } }
public void ParseMalformedMultiDataInArray() { String xmlrpcRequest = @"<methodCall> <methodName>sample</methodName> <params> <param><value> <array> <data> <value><i4>12</i4></value> </data> <data> <value><i4>-31</i4></value> </data> </array> </value></param> </params> </methodCall>"; IXmlRpcRequest request = null; Exception ex = null; try { request = Parse(xmlrpcRequest); } catch (Exception e) { ex = e; } Assert.IsEqualTo(((Object[])request.Parameters[0])[0], 12); Assert.IsEqualTo(((Object[])request.Parameters[0])[1], -31); //Assert.IsNotNull(ex); //Assert.IsEqualTo(ex.Message, "More than one data element in the array element."); }
public void ParseDefaultTypeName() { String xmlrpcRequest = @"<methodCall> <methodName>sample</methodName> <params> <param><value>default string</value></param> <param><value> <array> <data> <value>default string in array</value> </data> </array> </value></param> <param><value> <struct> <member> <name>name</name> <value>default string in struct</value> </member> </struct> </value></param> </params> </methodCall>"; IXmlRpcRequest request = Parse(xmlrpcRequest); Assert.IsEqualTo(request.Parameters[0], "default string"); Assert.IsEqualTo(((Object[])request.Parameters[1])[0], "default string in array"); Assert.IsEqualTo(((IDictionary <String, Object>)request.Parameters[2])["name"], "default string in struct"); }
public void ParseMalformedMultiEntriesInValue() { String xmlrpcRequest = @"<methodCall> <methodName>sample</methodName> <params> <param><value> <i4>1</i4> <i4>2</i4> </value></param> </params> </methodCall>"; IXmlRpcRequest request = null; Exception ex = null; try { request = Parse(xmlrpcRequest); } catch (Exception e) { ex = e; } Assert.IsEqualTo(request.Parameters[0], 2); //Assert.IsNotNull(ex); //Assert.IsEqualTo(ex.Message, "More than one data element in the array element."); }
public void ParseDuplicateMemberNameInStruct() { String xmlrpcRequest = @"<methodCall> <methodName>sample</methodName> <params> <param><value> <struct> <member> <name>m1</name><value></value> </member> <member> <name>m1</name><value></value> </member> </struct> </value></param> </params> </methodCall>"; IXmlRpcRequest request = null; Exception ex = null; try { request = Parse(xmlrpcRequest); } catch (Exception e) { ex = e; } Assert.IsNotNull(ex); Assert.IsEqualTo(ex.Message, "Duplicate struct member name: m1"); }
public void ParseMalformedMissingValueInStruct() { String xmlrpcRequest = @"<methodCall> <methodName>sample</methodName> <params> <param><value> <struct> <member> <name>m1</name> </member> </struct> </value></param> </params> </methodCall>"; IXmlRpcRequest request = null; Exception ex = null; try { request = Parse(xmlrpcRequest); } catch (Exception e) { ex = e; } Assert.IsNotNull(ex); Assert.IsEqualTo(ex.Message, "Expected value element, got "); }
private static Header[] GetChannelHeaders(String requestUri, IXmlRpcRequest request, IXmlRpcHandler handler, Type type) { List <Header> headers = new List <Header>(); headers.Add(new Header("__Uri", requestUri)); headers.Add(new Header("__TypeName", type.AssemblyQualifiedName)); headers.Add(new Header("__MethodName", handler.GetMethod(request).Name)); headers.Add(new Header("__Args", request.Parameters)); return(headers.ToArray()); }
public void ParseMissingParams() { String xmlrpcRequest = @"<methodCall> <methodName>sample</methodName> </methodCall>"; IXmlRpcRequest request = Parse(xmlrpcRequest); Assert.IsEqualTo(request.MethodName, "sample"); }
/// <summary> /// Serializes an XML-RPC request to a <see cref="System.Xml.XmlWriter"/>. /// </summary> /// <param name="writer">the <see cref="System.Xml.XmlWriter"/> to write</param> /// <param name="request">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/> to serialize</param> /// <param name="config">the context configuration</param> /// <param name="typeSerializerFactory">the <see cref="LX.EasyWeb.XmlRpc.Serializer.ITypeSerializerFactory"/> to get type serializers</param> /// <exception cref="System.Xml.XmlException">failed writing the request XML</exception> public void WriteRequest(XmlWriter writer, IXmlRpcRequest request, IXmlRpcStreamConfig config, ITypeSerializerFactory typeSerializerFactory) { writer.WriteStartDocument(); writer.WriteStartElement(XmlRpcSpec.METHOD_CALL_TAG); writer.WriteElementString(XmlRpcSpec.METHOD_NAME_TAG, request.MethodName); RecursiveTypeSerializer.WriteParams(writer, config, typeSerializerFactory, request.Parameters); writer.WriteEndElement(); writer.WriteEndDocument(); }
public Object Execute(IXmlRpcRequest request) { if (_mapping.AuthenticationHandler != null && !_mapping.AuthenticationHandler.IsAuthorized(request)) throw new XmlRpcException("Not authorized"); Object[] args = request.Parameters ?? Empty; XmlRpcMethod method = GetMethod(args); ConvertParams(method.TypeConverters, args); //return Invoke(method.Method, _targetProvider == null ? request.Target : _targetProvider.GetTarget(request), request.Parameters); if (request.Target == null && _targetProvider != null) request.Target = _targetProvider.GetTarget(request); return Invoke(method.Method, request.Target, args); }
public void ParseEmptyValue() { String xmlrpcRequest = @"<methodCall> <methodName>sample</methodName> <params> <param> <value></value> </param> </params> </methodCall>"; IXmlRpcRequest request = Parse(xmlrpcRequest); Assert.IsNull(request.Parameters[0]); }
public void ParseRecursiveData() { String xmlrpcRequest = @"<methodCall> <methodName>sample</methodName> <params> <param><value> <struct> <member> <name>arrayInStruct</name> <value> <array><data><value><i4>1</i4></value><value><i4>2</i4></value></data></array> </value> </member> </struct> </value></param> <param><value> <array> <data><value> <struct><member> <name>arrayInStructInArray</name> <value> <array><data><value><i4>3</i4></value><value><i4>4</i4></value></data></array> </value> </member></struct> </value></data> </array> </value></param> </params> </methodCall>"; IXmlRpcRequest request = null; Exception ex = null; try { request = Parse(xmlrpcRequest); } catch (Exception e) { ex = e; } Assert.IsNull(ex); Assert.IsEqualTo(((Object[])((IDictionary <String, Object>)request.Parameters[0])["arrayInStruct"])[0], 1); Assert.IsEqualTo(((Object[])((IDictionary <String, Object>)request.Parameters[0])["arrayInStruct"])[1], 2); Object[] array = (Object[])request.Parameters[1]; Assert.IsEqualTo(((Object[])((IDictionary <String, Object>)array[0])["arrayInStructInArray"])[0], 3); Assert.IsEqualTo(((Object[])((IDictionary <String, Object>)array[0])["arrayInStructInArray"])[1], 4); }
public Object Execute(IXmlRpcRequest request) { if (_mapping.AuthenticationHandler != null && !_mapping.AuthenticationHandler.IsAuthorized(request)) { throw new XmlRpcException("Not authorized"); } if (request.Target == null && _targetProvider != null) { request.Target = _targetProvider.GetTarget(request); } IXmlRpcHandler handler = (IXmlRpcHandler)request.Target; return(handler.Execute(request)); }
private MethodCall DeserializeRequest(ITransportHeaders requestHeaders, Stream requestStream, IXmlRpcStreamRequestConfig config) { String requestUri = GetRequestUri(requestHeaders); Type svcType = GetServerTypeForUri(requestUri); if (!_mapping.Has(svcType)) { _mapping.Register(svcType); } IXmlRpcRequest request = GetRequest(config, requestStream); IXmlRpcHandler handler = GetHandler(request); Header[] headers = GetChannelHeaders(requestUri, request, handler, svcType); MethodCall call = new MethodCall(headers); call.ResolveMethod(); return(call); }
public Object Execute(IXmlRpcRequest request) { if (_mapping.AuthenticationHandler != null && !_mapping.AuthenticationHandler.IsAuthorized(request)) { throw new XmlRpcException("Not authorized"); } Object[] args = request.Parameters ?? Empty; XmlRpcMethod method = GetMethod(args); ConvertParams(method.TypeConverters, args); //return Invoke(method.Method, _targetProvider == null ? request.Target : _targetProvider.GetTarget(request), request.Parameters); if (request.Target == null && _targetProvider != null) { request.Target = _targetProvider.GetTarget(request); } return(Invoke(method.Method, request.Target, args)); }
public void ParseMalformedValue() { String xmlrpcRequest = @"<methodCall> <methodName>sample</methodName> <params> <param> <value><i4><shoudnotbehere/></i4></value> </param> </params> </methodCall>"; Exception ex = null; try { IXmlRpcRequest request = Parse(xmlrpcRequest); } catch (Exception e) { ex = e; } Assert.IsNotNull(ex); }
/// <summary> /// Executes requests from streams. /// </summary> /// <param name="config"></param> /// <param name="serverStream">the <see cref="IServerStream"/> to process</param> public void Execute(IXmlRpcStreamRequestConfig config, IServerStream serverStream) { Stream inputStream; XmlRpcResponse response = new XmlRpcResponse(); try { inputStream = GetInputStream(config, serverStream); IXmlRpcRequest request = GetRequest(config, inputStream); response.Result = Execute(request); } catch (XmlRpcException ex) { response.Fault = ex.Fault; } catch (Exception ex) { response.Fault = new XmlRpcFault(0, ex.Message, ex); } Stream outputStream = GetOutputStream(config, serverStream); WriteResponse(config, outputStream, response); }
public MethodInfo GetMethod(IXmlRpcRequest request) { return(GetMethod(request.Parameters ?? Empty).Method); }
public Object GetTarget(IXmlRpcRequest request) { return(Activator.CreateInstance(_type)); }
private static Header[] GetChannelHeaders(String requestUri, IXmlRpcRequest request, IXmlRpcHandler handler, Type type) { List<Header> headers = new List<Header>(); headers.Add(new Header("__Uri", requestUri)); headers.Add(new Header("__TypeName", type.AssemblyQualifiedName)); headers.Add(new Header("__MethodName", handler.GetMethod(request).Name)); headers.Add(new Header("__Args", request.Parameters)); return headers.ToArray(); }
/// <summary> /// Gets the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcHandler"/> which the request called. /// </summary> /// <param name="request">the incoming <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/></param> /// <returns>an associated handler</returns> /// <exception cref="LX.EasyWeb.XmlRpc.XmlRpcException">no matched handler is found</exception> protected abstract IXmlRpcHandler GetHandler(IXmlRpcRequest request);
public MethodInfo GetMethod(IXmlRpcRequest request) { return GetMethod(request.Parameters ?? Empty).Method; }
private IXmlRpcHandler GetHandler(IXmlRpcRequest request) { return _mapping.GetHandler(request.MethodName); }
public MethodInfo GetMethod(IXmlRpcRequest request) { return null; }
public Object GetTarget(IXmlRpcRequest request) { return Activator.CreateInstance(_type); }
protected override IXmlRpcHandler GetHandler(IXmlRpcRequest request) { request.Target = this; return _mapping.GetHandler(request.MethodName); }
public void ParseXmlRpcRequest() { String xmlrpcRequest = @"<methodCall> <methodName>sample</methodName> <params> <param><value>eW91IGNhbid0IHJlYWQgdGhpcyE=</value></param> <param><value><i4>3</i4></value></param> <param><value><int>-7</int></value></param> <param><value><i8>1234567890</i8></value></param> <param><value><boolean>1</boolean></value></param> <param><value><boolean>false</boolean></value></param> <param><value><string>hello xmlrpc</string></value></param> <param><value><double>-3.145</double></value></param> <param><value><dateTime.iso8601>19980717T14:08:55</dateTime.iso8601></value></param> <param><value><base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64></value></param> <param><value> <array> <data> <value><i4>12</i4></value> <value><string>Egypt</string></value> <value><boolean>0</boolean></value> <value><i4>-31</i4></value> </data> </array> </value></param> <param><value> <struct> <member> <name>lowerBound</name> <value><i4>18</i4></value> </member> <member> <name>upperBound</name> <value><i4>139</i4></value> </member> </struct> </value></param> </params> </methodCall>"; XmlTextReader reader = new XmlTextReader(new MemoryStream(Encoding.UTF8.GetBytes(xmlrpcRequest))); //IXmlRpcRequest request = new XmlRpcRequestSerializer(null, new TypeFactory(), reader); XmlRpcRequestSerializer parser = new XmlRpcRequestSerializer(); IXmlRpcRequest request = parser.ReadRequest(reader, null, new TypeSerializerFactory()); Assert.IsEqualTo(request.MethodName, "sample"); Assert.IsEqualTo(request.Parameters[0], "eW91IGNhbid0IHJlYWQgdGhpcyE="); Assert.IsEqualTo(request.Parameters[1], 3); Assert.IsEqualTo(request.Parameters[2], -7); Assert.IsEqualTo(request.Parameters[3], 1234567890L); Assert.IsEqualTo(request.Parameters[4], true); Assert.IsEqualTo(request.Parameters[5], false); Assert.IsEqualTo(request.Parameters[6], "hello xmlrpc"); Assert.IsEqualTo(request.Parameters[7], -3.145D); Assert.IsEqualTo(request.Parameters[8], new DateTime(1998, 7, 17, 14, 8, 55)); Assert.IsSequenceEqualTo((Byte[])request.Parameters[9], Convert.FromBase64String("eW91IGNhbid0IHJlYWQgdGhpcyE=")); Object[] array = (Object[])request.Parameters[10]; Assert.IsEqualTo(array[0], 12); Assert.IsEqualTo(array[1], "Egypt"); Assert.IsEqualTo(array[2], false); Assert.IsEqualTo(array[3], -31); IDictionary <String, Object> map = (IDictionary <String, Object>)request.Parameters[11]; Assert.IsEqualTo(map["lowerBound"], 18); Assert.IsEqualTo(map["upperBound"], 139); //Assert.IsEqualTo(request.Parameters[10],); }
public Object GetTarget(IXmlRpcRequest request) { return(_obj); }
public MethodInfo GetMethod(IXmlRpcRequest request) { return(null); }
/// <summary> /// Executes a XML-RPC request. /// </summary> /// <param name="request">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/> to execute</param> /// <returns>a result object</returns> /// <exception cref="LX.EasyWeb.XmlRpc.XmlRpcException">no matched handler is found, or an exception occurs when handling the request</exception> public Object Execute(IXmlRpcRequest request) { IXmlRpcHandler handler = GetHandler(request); return(handler.Execute(request)); }
private IXmlRpcHandler GetHandler(IXmlRpcRequest request) { return(_mapping.GetHandler(request.MethodName)); }
public Object GetTarget(IXmlRpcRequest request) { return _obj; }
protected override IXmlRpcHandler GetHandler(IXmlRpcRequest request) { request.Target = this; return(_mapping.GetHandler(request.MethodName)); }
/// <summary> /// Executes a XML-RPC request. /// </summary> /// <param name="request">the <see cref="LX.EasyWeb.XmlRpc.IXmlRpcRequest"/> to execute</param> /// <returns>a result object</returns> /// <exception cref="LX.EasyWeb.XmlRpc.XmlRpcException">no matched handler is found, or an exception occurs when handling the request</exception> public Object Execute(IXmlRpcRequest request) { IXmlRpcHandler handler = GetHandler(request); return handler.Execute(request); }
public Object Execute(IXmlRpcRequest request) { if (_mapping.AuthenticationHandler != null && !_mapping.AuthenticationHandler.IsAuthorized(request)) throw new XmlRpcException("Not authorized"); if (request.Target == null && _targetProvider != null) request.Target = _targetProvider.GetTarget(request); IXmlRpcHandler handler = (IXmlRpcHandler)request.Target; return handler.Execute(request); }