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 & check</value>
</entry>
<entry>
<key>sub1d</key>
<value>5.0</value>
</entry>
</value>
</entry>
</map>
======================================================================
null