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

Reply via email to