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]
>
>