为什么不在JAXBElement中包装List / Map?

时间:2015-06-09 07:40:44

标签: java jaxb marshalling

起初,当我发现JAXBElement时,我感到非常高兴 - 它删除了使用@XmlRootElement注释我的模型类的必要性。所以,我也希望我不再需要为我的hashmap或列表提供“Wrapper”类。但是,唉,使用list / hashmap编组JAXBElement会给我一个空集合。为什么这不起作用?是不是有一般处理集合的方法?我可能要编组许多不同类型的集合,因此为每个集合编写一个包装器可能会太多。

示例代码 -

public static void main(String[] args) throws JAXBException, IOException {

    List<String> list = new ArrayList<String>();
    list.add("one");
    list.add("five");
    list.add("twentyone");
    list.add("seventytwo");

    Object data=list;
    Class dataClass= data.getClass();
    JAXBContext context = null;
    try {
        context = JAXBContext.newInstance(data.getClass());
    } catch (JAXBException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    String dataClassNameTemp = dataClass.getSimpleName();
    String firstLetter = dataClassNameTemp.substring(0, 1).toLowerCase();
    String dataClassName = firstLetter + dataClassNameTemp.substring(1);
    JAXBElement JAXBData = new JAXBElement(new QName(dataClassName),dataClass, data);
    Marshaller m = context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

/*  m.marshal(data,System.out);*/
    m.marshal(JAXBData, System.out);
    File file = new File("/home/aneeshb/exp/map1.xml");
    FileWriter fw = new FileWriter(file);
    m.marshal(JAXBData, fw);

}

输出 -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<arrayList/>

0 个答案:

没有答案