[ https://issues.apache.org/jira/browse/BETWIXT-63?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pete Ford updated BETWIXT-63: ----------------------------- Description: Using download version 0.8. A Map field within a Javabean produces XML containing Key and Value tags by default (i.e. without a .betwixt file): Java: private Map<String, String> details = new TreeMap<String, String>(); Example XML output: <Details> <entry> <Key>...</Key> <Value>...</Value> </entry> </Details> When reading the generated XML back into Betwixt to reconstruct the bean, the map is not populated. It appears that when reading, Betwixt looks for the tags <key> and <value> (uncapitalized). Filtering the XML to replace <Key> with <key>, etc., before reading in fixes the problem. It would appear that Betwixt should be generating "<key>" and "<value>" when writing (to match the case of the enclosing "<entry>" tag). Possibly this is something to do with using Capitalized names (see the code below - it sets up a CapitalizedNamesMapper for element names). The code that configures the writer in this case is: StringWriter sw = new StringWriter(); BeanWriter writer = new BeanWriter(sw); writer.getXMLIntrospector().getConfiguration() .setAttributesForPrimitives(true); writer.getXMLIntrospector().getConfiguration() .setWrapCollectionsInElement(true); writer.enablePrettyPrint(); writer.getBindingConfiguration().setMapIDs(false); // set a custom name mapper for attributes writer.getXMLIntrospector().getConfiguration() .setAttributeNameMapper(new HyphenatedNameMapper()); // set a custom name mapper for elements writer.getXMLIntrospector().getConfiguration() .setElementNameMapper(new CapitalizeNameMapper()); [EDIT:] Tested the above code changing it so that it uses DecapitalizeNameMapper and also HyphenatedNameMapper for the element names. In both cases the key/value tags are rendered lowercase and behave correctly on readback. was: Using download version 0.8. A Map field within a Javabean produces XML containing Key and Value tags by default (i.e. without a .betwixt file): Java: private Map<String, String> details = new TreeMap<String, String>(); Example XML output: <Details> <entry> <Key>...</Key> <Value>...</Value> </entry> </Details> When reading the generated XML back into Betwixt to reconstruct the bean, the map is not populated. It appears that when reading, Betwixt looks for the tags <key> and <value> (uncapitalized). Filtering the XML to replace <Key> with <key>, etc., before reading in fixes the problem. It would appear that Betwixt should be generating "<key>" and "<value>" when writing (to match the case of the enclosing "<entry>" tag). Possibly this is something to do with using Capitalized names (see the code below - it sets up a CapitalizedNamesMapper for element names). The code that configures the writer in this case is: StringWriter sw = new StringWriter(); BeanWriter writer = new BeanWriter(sw); writer.getXMLIntrospector().getConfiguration() .setAttributesForPrimitives(true); writer.getXMLIntrospector().getConfiguration() .setWrapCollectionsInElement(true); writer.enablePrettyPrint(); writer.getBindingConfiguration().setMapIDs(false); // set a custom name mapper for attributes writer.getXMLIntrospector().getConfiguration() .setAttributeNameMapper(new HyphenatedNameMapper()); // set a custom name mapper for elements writer.getXMLIntrospector().getConfiguration() .setElementNameMapper(new CapitalizeNameMapper()); > Writing Map key/value pairs produces incorrect XML tags > ------------------------------------------------------- > > Key: BETWIXT-63 > URL: https://issues.apache.org/jira/browse/BETWIXT-63 > Project: Commons Betwixt > Issue Type: Bug > Environment: Windows XP, Java 1.6.0_04, Eclipse > Reporter: Pete Ford > Priority: Minor > > Using download version 0.8. > A Map field within a Javabean produces XML containing Key and Value tags by > default (i.e. without a .betwixt file): > Java: > private Map<String, String> details = new TreeMap<String, String>(); > Example XML output: > <Details> > <entry> > <Key>...</Key> > <Value>...</Value> > </entry> > </Details> > When reading the generated XML back into Betwixt to reconstruct the bean, the > map is not populated. It appears that when reading, Betwixt looks for the > tags <key> and <value> (uncapitalized). Filtering the XML to replace <Key> > with <key>, etc., before reading in fixes the problem. It would appear that > Betwixt should be generating "<key>" and "<value>" when writing (to match the > case of the enclosing "<entry>" tag). Possibly this is something to do with > using Capitalized names (see the code below - it sets up a > CapitalizedNamesMapper for element names). > The code that configures the writer in this case is: > StringWriter sw = new StringWriter(); > BeanWriter writer = new BeanWriter(sw); > writer.getXMLIntrospector().getConfiguration() > .setAttributesForPrimitives(true); > writer.getXMLIntrospector().getConfiguration() > .setWrapCollectionsInElement(true); > writer.enablePrettyPrint(); > writer.getBindingConfiguration().setMapIDs(false); > // set a custom name mapper for attributes > writer.getXMLIntrospector().getConfiguration() > .setAttributeNameMapper(new HyphenatedNameMapper()); > // set a custom name mapper for elements > writer.getXMLIntrospector().getConfiguration() > .setElementNameMapper(new CapitalizeNameMapper()); > [EDIT:] > Tested the above code changing it so that it uses DecapitalizeNameMapper and > also HyphenatedNameMapper for the element names. In both cases the key/value > tags are rendered lowercase and behave correctly on readback. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.