簡體   English   中英

JAXB 忽略 HashMap 屬性?

[英]JAXB ignores HashMap properties?

我正在使用 J2SE 附帶的 JAXB 實現來序列化包含 HashMap 屬性的 bean。 我認為這應該是開箱即用的,因為表明

JAXB 規范定義了 Map 用作 bean 的屬性時的特殊處理。 例如,以下 bean 將生成如下 XML: ...

除非結構具有多個級別,否則這或多或少有效,即 HashMap 是 bean 的屬性,它是 bean 的屬性 - 如下所示:

import java.util.HashMap;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.JAXB;

class bean { 
    @XmlElement public HashMap<String,String> map;
}

@XmlRootElement class b2 { 
    @XmlElement public bean b;
}


class foo { 
    public static void main(String args[]) { 
        try { 
            bean b = new bean();
            b.map = new HashMap<String,String>();
            b.map.put("a","b");
            b2 two = new b2();
            two.b=b;
            JAXB.marshal(two, System.out);  

        } catch (Exception e) { 
            System.out.println("Exception: " + e.toString());
        }
    }
}

這將輸出<?xml version="1.0" encoding="UTF-8" standalone="yes"?><b2><b><map/></b></b2>而不是正確格式的 HashMap。 如果我用@XmlRootElement注釋bean並從map中刪除@XmlElement ,它會起作用,但我不明白為什么這應該是必要的。 應該是這樣嗎?

您鏈接的網站上給出了解釋:

Unfortunately, as of 2.1, this processing is only defined for bean properties and not when you marshal HashMap as a top-level object (such as a value in JAXBElement.) In such case, HashMap will be treated as a Java bean, and when您將 HashMap 視為一個 bean,它沒有定義 getter/setter 屬性對,因此以下代碼將生成以下 XML:

豆用 Map:

m = new HashMap();
m.put("abc",1);
marshaller.marshal(new JAXBElement(new QName("root"),HashMap.class,m),System.out);

XML表示:

<root />

此問題已記錄為 #223,需要在 JAXB 規范的更高版本中進行修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM