public void ParseXmlRpcFaultResponse() { String xmlrpc = @" <methodResponse> <fault> <value> <struct> <member> <name>faultCode</name> <value><int>4</int></value> </member> <member> <name>faultString</name> <value><string>Too many parameters.</string></value> </member> </struct> </value> </fault> </methodResponse> "; XmlTextReader reader = new XmlTextReader(new MemoryStream(Encoding.UTF8.GetBytes(xmlrpc))); XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); IXmlRpcResponse request = serializer.ReadResponse(reader, null, new TypeSerializerFactory()); Assert.IsNull(request.Result); Assert.IsNotNull(request.Fault); Assert.IsEqualTo(request.Fault.FaultCode, 4); Assert.IsEqualTo(request.Fault.FaultString, "Too many parameters."); }
public void SerializeResponseOnType() { var deserializer = new XmlRpcResponseSerializer(); var proxy = XmlRpcProxyGen.Create <TestMethods2>(); MethodInfo mi = proxy.GetType().GetMethod("Bar"); var response = new XmlRpcResponse(IntEnum.Three, mi); var stm = new MemoryStream(); deserializer.SerializeResponse(stm, response); stm.Position = 0; TextReader tr = new StreamReader(stm); string reqstr = tr.ReadToEnd(); Assert.AreEqual( @"<?xml version=""1.0""?> <methodResponse> <params> <param> <value> <string>Three</string> </value> </param> </params> </methodResponse>", reqstr); }
Stream TryInvoke(Stream requestStream) { var deserializer = new XmlRpcRequestDeserializer(); var serviceAttr = (XmlRpcServiceAttribute)Attribute.GetCustomAttribute(GetType(), typeof(XmlRpcServiceAttribute)); if (serviceAttr != null) { SetSerializerSettings(serviceAttr, deserializer); } var xmlRpcReq = deserializer.DeserializeRequest(requestStream, GetType()); XmlRpcResponse xmlRpcResp = null; if (xmlRpcReq.Method.Equals("system.multicall", StringComparison.OrdinalIgnoreCase)) { var resultList = InvokeMulticall(xmlRpcReq); xmlRpcResp = new XmlRpcResponse(resultList.Where(x => x != null).ToArray()); } else { var result = Invoke(xmlRpcReq); xmlRpcResp = new XmlRpcResponse(result); } var responseStream = new MemoryStream(); var serializer = new XmlRpcResponseSerializer(); serializer.SerializeResponse(responseStream, xmlRpcResp); responseStream.Seek(0, SeekOrigin.Begin); return(responseStream); }
private void SerializeResponse(IMessage responseMsg, ref ITransportHeaders responseHeaders, ref Stream responseStream, IXmlRpcStreamRequestConfig config) { XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); responseStream = new MemoryStream(); responseHeaders = new TransportHeaders(); ReturnMessage retMsg = (ReturnMessage)responseMsg; XmlRpcResponse response; if (retMsg.Exception == null) { response = new XmlRpcResponse(retMsg.ReturnValue); } else if (retMsg.Exception is XmlRpcException) { response = new XmlRpcResponse(); response.Fault = (retMsg.Exception as XmlRpcException).Fault; } else { response = new XmlRpcResponse(); response.Fault = new XmlRpcFault(1, retMsg.Exception.Message); } serializer.WriteResponse(responseStream, response, config, TypeSerializerFactory); responseHeaders["Content-Type"] = "text/xml; charset=\"utf-8\""; }
private void WriteResponse(IXmlRpcStreamRequestConfig config, Stream outputStream, IXmlRpcResponse response) { XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); if (_xmlWriterFactory != null) { serializer.XmlWriterFactory = _xmlWriterFactory; } serializer.WriteResponse(outputStream, response, config, TypeSerializerFactory); }
public void WriteXmlRpcResponse() { XmlRpcResponse response = new XmlRpcResponse("South Dakota"); StringBuilder sb = new StringBuilder(); XmlTextWriter writer = new XmlTextWriter(new StringWriter(sb)); XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); serializer.WriteResponse(writer, response, null, new TypeSerializerFactory()); Assert.IsEqualTo(sb.ToString(), @"<?xml version=""1.0"" encoding=""utf-16""?><methodResponse><params><param><value><string>South Dakota</string></value></param></params></methodResponse>"); }
public override string ToRawString(Direction direction) { if (direction == Direction) { StringBuilder sb = new StringBuilder(4096); if (m_headers != null) { if (m_headers.ContainsKey("method")) { sb.Append(m_headers["method"]); sb.Append(": "); sb.Append(Host); sb.AppendLine(); } m_headers.Remove("host"); foreach (KeyValuePair <string, string> kvp in m_headers) { if (kvp.Key == "method") { continue; } sb.Append(kvp.Key); sb.Append(' '); sb.Append(kvp.Value); sb.AppendLine(); } sb.AppendLine(); } using (MemoryStream ms = new MemoryStream(1024)) { using (XmlTextWriter xml = new XmlTextWriter(ms, new UTF8Encoding(false))) { if (Data is XmlRpcResponse) { var xrpcr = new XmlRpcResponseSerializer(); xrpcr.Serialize(xml, Data); } else { var xrpcr = new XmlRpcRequestSerializer(); xrpcr.Serialize(xml, Data); } xml.Flush(); sb.Append(UTF8Encoding.UTF8.GetString(ms.ToArray())); } } return(sb.ToString()); } else { return(string.Empty); } }
public void WriteXmlRpcFaultResponse() { XmlRpcResponse response = new XmlRpcResponse(null); response.Fault = new XmlRpcFault(4, "Too many parameters."); StringBuilder sb = new StringBuilder(); XmlTextWriter writer = new XmlTextWriter(new StringWriter(sb)); XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); serializer.WriteResponse(writer, response, null, new TypeSerializerFactory()); Assert.IsEqualTo(sb.ToString(), @"<?xml version=""1.0"" encoding=""utf-16""?><methodResponse><fault><value><struct><member><name>faultCode</name><value><i4>4</i4></value></member><member><name>faultString</name><value><string>Too many parameters.</string></value></member></struct></value></fault></methodResponse>"); }
public void PaoloLiveraniProblem() { try { XmlRpcResponse resp = new XmlRpcResponse(new DataSet()); Stream responseStream = new MemoryStream(); var serializer = new XmlRpcResponseSerializer(); serializer.SerializeResponse(responseStream, resp); } catch (XmlRpcInvalidReturnType ex) { string s = ex.Message; } }
public void ParseXmlRpcResponse() { String xmlrpc = @" <methodResponse> <params> <param> <value><string>South Dakota</string></value> </param> </params> </methodResponse>"; XmlTextReader reader = new XmlTextReader(new MemoryStream(Encoding.UTF8.GetBytes(xmlrpc))); XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); IXmlRpcResponse request = serializer.ReadResponse(reader, null, new TypeSerializerFactory()); Assert.IsNull(request.Fault); Assert.IsEqualTo(request.Result, "South Dakota"); }
public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream) { if (requestHeaders["SOAPAction"] != null) { // pass to next sink if this is a SOAP request with SOAPAction header. return(NextChannelSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream)); } XmlRpcHttpRequestConfig requestConfig = GetConfig(requestHeaders); try { MethodCall call = DeserializeRequest(requestHeaders, requestStream, requestConfig); sinkStack.Push(this, call); // forward to next sink in chain - pass request stream as null to // indicate that we have deserialized the request NextChannelSink.ProcessMessage(sinkStack, call, requestHeaders, null, out responseMsg, out responseHeaders, out responseStream); SerializeResponse(responseMsg, ref responseHeaders, ref responseStream, requestConfig); } catch (Exception ex) { responseMsg = new ReturnMessage(ex, (IMethodCallMessage)requestMsg); responseStream = new MemoryStream(); XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); XmlRpcResponse faultResponse = new XmlRpcResponse(); faultResponse.Fault = new XmlRpcFault(0, ex.Message); serializer.WriteResponse(responseStream, faultResponse, requestConfig, TypeSerializerFactory); responseHeaders = new TransportHeaders(); responseHeaders["Content-Type"] = "text/xml; charset=\"utf-8\""; } return(ServerProcessing.Complete); }
public void SerializeResponseOnMethod() { var deserializer = new XmlRpcResponseSerializer(); var response = new XmlRpcResponse(IntEnum.One, GetType().GetMethod("MappingReturnOnMethod")); var stm = new MemoryStream(); deserializer.SerializeResponse(stm, response); stm.Position = 0; TextReader tr = new StreamReader(stm); string reqstr = tr.ReadToEnd(); Assert.AreEqual( @"<?xml version=""1.0""?> <methodResponse> <params> <param> <value> <string>One</string> </value> </param> </params> </methodResponse>", reqstr); }