Hi, I already write something like that... it was for xml-rpc 2.x.y, but maybe it can help...
import java.lang.reflect.Array; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Vector; public class XmlRpcResponse { private Object response; private SimpleDateFormat dateFormat; public XmlRpcResponse(Object response) { this.response = response; dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); } public String generateXml() { StringBuilder sb = new StringBuilder(); sb.append("<?xml version='1.0'?>\n"); sb.append("<response>"); generateXml(sb, response); sb.append("</response>"); return sb.toString(); } private void generateXml(StringBuilder sb, Object resp) { if (resp instanceof String) { String str = (String) resp; sb.append(str); return; } if (resp instanceof Integer) { Integer i = (Integer) resp; sb.append(i.toString()); return; } if (resp instanceof Date) { Date date = (Date) resp; sb.append(dateFormat.format(date)); return; } if (resp instanceof List) { List list = (List) resp; sb.append("<array>"); for (Object item : list) { sb.append("<item>"); generateXml(sb, item); sb.append("</item>"); } sb.append("</array>"); return; } if (resp instanceof Object[]) { Object[] list = (Object[]) resp; sb.append("<array>"); for (Object item : list) { sb.append("<item>"); generateXml(sb, item); sb.append("</item>"); } sb.append("</array>"); return; } if (resp instanceof Vector) { Vector list = (Vector) resp; sb.append("<array>"); for (Object item : list) { sb.append("<item>"); generateXml(sb, item); sb.append("</item>"); } sb.append("</array>"); return; } if (resp instanceof Map) { Map<String, Object> map = (Map) resp; sb.append("<struct>"); for (String key : map.keySet()) { sb.append("<member name=\""); sb.append(key); sb.append("\">"); Object value = map.get(key); generateXml(sb, value); sb.append("</member>"); } sb.append("</struct>"); return; } } public static List decodeList(Object element) { if (element == null) { return null; } if (element instanceof List) { return (List) element; } if (element.getClass().isArray()) { int length = Array.getLength(element); LinkedList result = new LinkedList(); for (int i = 0; i < length; i++) { result.add(Array.get(element, i)); } return result; } return null; } } Regards Stano On 8/27/07, Yannis <[EMAIL PROTECTED]> wrote: > > > Hallo there, > > I am using xml-rpc 3.1 to successfully connect to an xml-rpc server; > however, the response is sometimes an Object[] (=Array), sometimes a > HashMap, or a String (and this depends on the parameters passed to the > request and there is no way of knowing this beforehand on the client-side; > moreover, the server-side is 3rd party, so we cannot change things that > easily). Additionally, the returned object can contain more objects > containing objects all of which can be any of supported data types... and, > so on... > > My question: How can I generate a String containing valid XML (name-value > pairs will be more than sufficient) from the returned structure? Well, I > know I can write this recursively on my own, but surely there must be a > ready-made (de?)serializer some place? > > Any pointers or code examples would be greatly appreciated, as I have not > been able to find anything like it on the forum or through Google... > Please > forgive me if I have not seen/am not seeing the obvious... > > Thanks in advance! > > -- > View this message in context: > http://www.nabble.com/NEWBIE%3A-deserializing-xml-rpc-response-not-knowing-returned-data-type-tf4334883.html#a12345713 > Sent from the Apache Xml-RPC - User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >