Hi,

I haven't actually run your code and not sure why you are getting null, but you must realize that Betwixt relies on a addXXX method in the object to be recreated for the hashmap to work. Since your hashmap of hashmap wouldn't contain such a method, you need to extend the HashMap class and add such a method in.

HTH,
Vikram Goyal
---------------------------------------------------------------------------------------
Jakarta Commons Online Bookshelf
Module 5: JXPath and Betwixt: http://www.manning.com/catalog/view.php?book=goyal5
All Modules: http://www.manning.com/goyal
---------------------------------------------------------------------------------------


----- Original Message ----- From: "Jaime Garza" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Saturday, April 30, 2005 7:49 AM
Subject: [Betwixt]: HashMap to XML and back



Can somebody help me learn how to read a HashMap back with betwixt/digester?

When I use betwixt to write a HashMap I get a nice XML, but when I try
to read it back, I only get a null.  I am using betwixt 0.6 and digester
1.5.  Yes, this is a map of maps. This is the code



package com.newscale.test;



import java.util.Map;

import java.io.StringWriter;

import org.apache.commons.betwixt.io.BeanWriter;

import java.beans.IntrospectionException;

import org.xml.sax.SAXException;

import java.io.IOException;

import java.util.HashMap;

import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.*;

import java.io.StringReader;

import org.apache.commons.betwixt.io.BeanReader;



public class Betwixt {

 private String convertToString(HashMap map) throws
IntrospectionException, SAXException, IOException {

   if (map == null) {

     return null;

   }

   StringWriter outputWriter = new StringWriter();

   BeanWriter beanWriter = new BeanWriter(outputWriter);

   beanWriter.enablePrettyPrint();

   beanWriter.getBindingConfiguration().setMapIDs(false);


beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimi tives(false);



   beanWriter.write("map", map);

   return outputWriter.toString();

 }



 private HashMap convertToMap(String s) throws SAXException,
IOException, IntrospectionException {

   StringReader reader = new StringReader(s);

   BeanReader beanReader = new BeanReader();

   beanReader.getBindingConfiguration().setMapIDs(false);


beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimi tives(false);

   beanReader.registerBeanClass("map", java.util.HashMap.class);

   HashMap map = (HashMap) beanReader.parse(reader); // returns null
always!

   return map;

 }



 public static void main(String[] args) throws Exception {

   HashMap hash = new HashMap();

   Map sub1 = new HashMap();



   sub1.put("sub1i", new Integer(3));

   sub1.put("sub1d", new Double(5.0));

   sub1.put("sub1s", "this is a test & check");



   hash.put("sub1", sub1);

   Betwixt betwixtTester = new Betwixt();

   String xml1 = null;

   String xml2 = null;

   xml1 = betwixtTester.convertToString(hash);

   HashMap hash2 = betwixtTester.convertToMap(xml1);

   xml2 = betwixtTester.convertToString(hash2);

   System.out.println(xml1);


System.out.println("==================================================== ==================");

   System.out.println(xml2);

 }



}



Output:

 <map>

   <entry>

     <key>sub1</key>

     <value>

       <entry>

         <key>sub1i</key>

         <value>3</value>

       </entry>

       <entry>

         <key>sub1s</key>

         <value>this is a test &amp; check</value>

       </entry>

       <entry>

         <key>sub1d</key>

         <value>5.0</value>

       </entry>

     </value>

   </entry>

 </map>

======================================================================

null




--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to