Java Mailing List Archive

http://www.junlu.com/

Home » user.castor »

[castor-user] Problem with mapping of a MultiValueMap

Maghen Calinghee

2010-05-25

Replies: Find Java Web Hosting

Author LoginPost Reply

Hello,

I'm trying to produce an xml code from a map with multiple values.
I'm using the map class org.apache.commons.collections.map.MultiValueMap which allows multiple values for one key.

I would like to produce something like that :
        <Info name="key1">value1</Info>
        <Info name="key1">value2</Info>
        <Info name="key2">value2</Info>
        <Info name="keyN">valueN</Info>

But the best I could have is :
    <Info name="key1">value1</Info>
    <Info>value2</Info>
    <Info name="key2">value2</Info>
    <Info name="keyN">valueN</Info>

I'm using the following mapping! (with MapItem) :
    <class name="org.exolab.castor.mapping.MapItem">
        <map-to xml="Info" />
        <field name="key" type="string" >
            <bind-xml name="name" location="Info" node="attribute" />
        </field>
        <field name="value" type="string" collection="arraylist">
            <bind-xml name="Info" node="element" />
        </field>
    </class>

Another solution is to use a handler which allows me to get the MultiValueMap object then i construct the xml code (see the following code) :
public class MultiValueMapHan! dler extends GeneralizedFieldHandler {

    public MultiValueMapHandler() {
        setCollectionIteration(false);
    }

    @SuppressWarnings("unchecked")
    @Override
    public Class getFieldType() {
        return MultiValueMap.class;
    }

    @Override
    public Object convertUponGet(Object source) {
       
        MultiValueMap map = (MultiValueMap) source;
        StringBuilder xml = new StringBuilder();
        for (Object key : map.keySet()) {
            for (Object value : map.getCollection(key)) {
         !        xml.append("<Info name=\""+key.toString()+"\">").append(value.toString()).append("<Info/>");
            }
        }
        return xml.toString();
    }
   
    @Override
    public Object convertUponSet(Object source) {
        // There is no need to implement this method
        return null;
    }
}

And i got the following xml code :
<Request type="keep-put" version="1">
    <ModuleId>KEEPClient</ModuleId>
    <RequestId>REQUEST001</RequestId>
    <Document>c2FtcGxlIGRvY3VtZW50</Document! >
    <DocumentInfo>
           &lt;Info name="key1"&gt;value1&lt;Info/&gt;
           &lt;Info name="key1"&gt;value2&lt;Info/&gt;
           &lt;Info name="key2"&gt;value2&lt;Info/&gt;
           &lt;Info name="keyN"&gt;valueN&lt;Info/&gt;
    </DocumentInfo>
</Request>

As you could see the '<' and '>' is not escaped and i can't produce the right xml code.

Does someone have any idea to solve this problem?

Thanks you in advance.

Maghen.

©2008 junlu.com - Jax Systems, LLC, U.S.A.