首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泽西地图的XmlAdapter

泽西地图的XmlAdapter
EN

Stack Overflow用户
提问于 2012-05-22 19:48:49
回答 1查看 957关注 0票数 0

我有一个使用泽西的。现在,我想向客户端发送一个地图地图(行和列)。

当我保持原样时,一切都很好。但是XMLOutput看起来是这样的..。

代码语言:javascript
复制
data>
    <entry>
        <key>0</key>
        <value>
            <data>
                <entry>
                    <key>id</key>
                    <value>20</value>
                </entry>
                <entry>
                    <key>status</key>
                    <value>test</value>
                </entry>
                <entry>
                    <key>number</key>
                    <value>20</value>
                </entry>
                <entry>
                    <key>cars</key>
                    <value>3</value>
                </entry>

            </data>
        </value>
    </entry>
</data>

但我想要这样的东西..。

代码语言:javascript
复制
 <data>
    <entry row=0>
        <column name=id>20</column>
        <column name=status>OK</column>
        <column name=number>1</column>
        <column name=cars>1</column>
    </entry>
    <entry row=1>
        <column name=id>21</column>
        <column name=status>OK</column>
        <column name=number>1</column>
        <column name=cars>2</column>
    </entry>
    <entry row=2>
        <column name=id>22</column>
        <column name=status>OK</column>
        <column name=number>1</column>
        <column name=cars>3</column>
    </entry>
</data>

要控制XML输出,我想使用XmlAdapters,但我无法让它工作。

类,该类包含以下行:

代码语言:javascript
复制
public class CoDataList{

   public LinkedHashMap<Integer,  CoDataMap> data = new LinkedHashMap<Integer,CoDataMap>();

}

类,其中包含以下列:

代码语言:javascript
复制
public class CoDataMap {

   public LinkedHashMap<String, String> data = new LinkedHashMap<String, String>();

}

如何编写XmlAdapter和类型来正确地封送对象?

我做了这样的事..。但是我将在哪里添加下一个XmlAdapter呢?

包含行和列的MainClass

代码语言:javascript
复制
@XmlRootElement
public class Response implements Cloneable{

    @XmlJavaTypeAdapter(CoDataListAdapter.class)
    public CoDataList data = new CoDataList();

}

现在,我为CoDataList和CoDataMap编写了适配器:

代码语言:javascript
复制
public class CoDataListAdapter extends XmlAdapter<CoDataListType, CoDataList>{

@Override
public CoDataListType marshal(CoDataList v) throws Exception {
    CoDataListType rows = new CoDataListType();
            for (int currentRow : v.data.keySet()){
        CoDataListEntryType row= new CoDataListEntryType();
            row.key = currentRow;
        row.map = v.data.get(currentRow);
        rows.entry.add(row);
    }
    return rows;
}

@Override
public CoDataList unmarshal(CoDataListType v) throws Exception {
    // TODO Auto-generated method stub
    return null;
}

}

代码语言:javascript
复制
public class CoDataMapAdapter extends XmlAdapter<CoDataMapType, CoDataMap> {

@Override
public CoDataMapType marshal(CoDataMap v) throws Exception {
    CoDataMapType columns = new CoDataMapType();
    for (String curCol : v.data.keySet()){
                    CoDataMapEntryType column= new CoDataMapEntryType();
        column.key = curCol;
        column.value = v.data.get(curCol);
        columns.entry.add(column);
    }
    // TODO Auto-generated method stub
    return columns;
}

@Override
public CoDataMap unmarshal(CoDataMapType v) throws Exception {
    //...
}
}

代码语言:javascript
复制
public class CoDataListType {
    public List<CoDataListEntryType> entry = new ArrayList<CoDataListEntryType>();
}

代码语言:javascript
复制
public class CoDataListEntryType {

@XmlAttribute(name="row")
    public Integer key; 

    @XmlValue
    @XmlJavaTypeAdapter(CoDataMapAdapter.class)
    public CoDataMap map;
}

在这一点上我得到了一个例外:

@XmlAttribute/@XmlValue需要引用映射到XML.xmladapter中文本的Java类型

代码语言:javascript
复制
public class CoDataMapType {
    public List<CoDataMapEntryType> entry = new ArrayList<CoDataMapEntryType>();
}

代码语言:javascript
复制
public class CoDataMapEntryType {
    @XmlAttribute(name="column")
    public String key; 

    @XmlValue
    public String value;
}

我真的很感谢你的帮助,我不知道如何让它开始工作。谢谢

EN

回答 1

Stack Overflow用户

发布于 2012-05-24 08:13:02

我现在解决了:

需要更改以下类:

代码语言:javascript
复制
public class CoDataListAdapter extends XmlAdapter<CoDataListType, CoDataList<CoDataMap<String, String>>>{

@Override
public CoDataListType marshal(CoDataList<CoDataMap<String, String>> v) throws Exception {


    CoDataListType rows = new CoDataListType();

    for (int currentRow : v.keySet()){

        CoDataListEntryType row= new CoDataListEntryType();

        row.key = currentRow;

        for (String key : v.get(currentRow).keySet()){
            CoDataMapEntryType column = new CoDataMapEntryType();

            column.name = key;
            column.value = v.get(currentRow).get(key);

            row.column.add(column);
        }


        rows.row.add(row);


    }


    return rows;
}

@Override
public CoDataList<CoDataMap<String, String>> unmarshal(CoDataListType v) throws Exception {


    CoDataList<CoDataMap<String,String>> rows =  new CoDataList<CoDataMap<String,String>>();

    for (CoDataListEntryType row : v.row){


        CoDataMap<String, String> columns = new CoDataMap<String, String>();
        for (CoDataMapEntryType column : row.column){
            columns.put(column.name, column.value);
        }
        rows.put(row.key, columns);

    }




    // TODO Auto-generated method stub
    return rows;
}

}

代码语言:javascript
复制
public class CoDataListEntryType {

 @XmlAttribute(name="id")
 public Integer key; 

 @XmlElement
 public List<CoDataMapEntryType> column = new ArrayList<CoDataMapEntryType>();
}

现在我只需要一个适配器。类CoDataMapAdapter和CoDataMapType是不必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10709096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档