Oded, I needed more flexibility too.
I just created my own XmlWriter implementation and modified XmlRpc to use a class specified at runtime. Modify XmlRpc.java - Add the following 3 methods and a static member (xmlWriterClass) //++++++ START CODE SNIPPET +++++ /** ******************************************************************** * Set the XML Writer Class used for converting to/from XMLRPC data * format. Use XmlRpc.getWriter(OutputStream os, String enc) to get an instance. * (ADDED: MJS 6/30/2004) ******************************************************************** */ public static void setXmlWriter(Class writer){ xmlWriterClass = writer; } /** ******************************************************************** * Set the XML Writer Class using it's fully qualified class name. * (used for converting to/from XMLRPC data format) * Use XmlRpc.getWriter(OutputStream os, String enc) to get an instance. * (ADDED: MJS 6/30/2004) ******************************************************************** */ public static void setXmlWriter(String writerClassName) throws ClassNotFoundException { try { xmlWriterClass = Class.forName(writerClassName); } catch (ClassNotFoundException x){ throw new ClassNotFoundException ("XMLWriter class not found: " + writerClassName); } } /** ******************************************************************** * Get an instance of the XmlWriter. (ADDED: MJS 6/30/2004) ******************************************************************** */ public static XmlWriter getWriter(java.io.OutputStream os, String enc) throws UnsupportedEncodingException, IOException{ XmlWriter writer = null; if (xmlWriterClass == null){ return new XmlWriter(os, enc); } try { Class[] classes = new Class[2]; classes[0] = Class.forName("java.io.OutputStream"); classes[1] = Class.forName("java.lang.String"); Constructor c = xmlWriterClass.getConstructor(classes); writer = (XmlWriter)c.newInstance(new Object[]{os,enc}); } catch (Exception ex){ log.error("Cannot get Custom XmlWriter.", ex); //Add failure message writer = new XmlWriter(os, enc); } return writer; } //-------END CODE SNIPPET -------- Next, Go through the code an replace all instances of XmlWriter writer = new XmlWriter(buffer, encoding); with XmlWriter writer = XmlRpc.getWriter(buffer, encoding); Finally, you create a class that extends XmlWriter and overrides "writeObject(Object obj)" to handle any type of objects you want. All you have to do, is feed XmlRpc a fully qualified class name of your own writer at startup ( via XmlRcp.setWriter("org.mshillin.xmlrpc.MjsXmlWriter") ). My XmlWriter class implementation currently supports Maps, Lists, the Trove Collections, and objects of my own design. Hope this helps. Mike Shillinger mshillinger At lucent Dot com >Hi list > >I have an issue with the way writeObject() does "struct" data type: in >version 1.2b1 (which is the one one can download from the binary >distribution servers), writeObject only recognizes java.util.Hashtable >as a "struct" type, while it would have been much much better to >recgonize any class implementing java.util.Map as a "struct" type. > >Same with "array" - one would expect any java.util.Collection to be >supported as an "array" type while only java.util.Vector is supported >(And there are some issues with using Vector to store collection data >which is why one shouldn't pick use Vector at all unless synchronized >data access is needed). > >Are there any plans to fix that problem ? > >-- >Oded Arbel >m-Wise mobile solutions >[EMAIL PROTECTED] > >+972-9-9611212 (204) >+972-54-7340014 > >::.. >Class schedules are designed so that every student will waste maximum >time between classes. >Corollary: When you are occasionally able to schedule two classes in a >row, they will be held in classrooms at opposite ends of the campus. > -- Laws of Class Scheduling n°2