2011-02-23 183 views
3

我正在使用JAXB(包含在JDK 6中的版本)將對象編組爲XML。下面的代碼段產生意想不到的結果: JAXB如何將類名映射到XML元素名稱?


    public class JAXBTest { 
     @XmlRootElement 
     public static class VIPPerson {}

public static void main(String[] args) throws JAXBException { 
     StringWriter sw = new StringWriter(); 
     VIPPerson p = new VIPPerson(); 
     JAXB.marshal(p, sw); 
     System.out.println(sw.toString()); 
    } 
} 

從上述的輸出是

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

我期待看到映射到VIPPerson元素的類名,而不是基於部分8.12 vipPerson .1在JAXB specification中,它表示

類名稱:類名稱通過使用java的de大寫映射到XML名稱。 beans.Introspector.decapitalize(類名)。

decapitalize方法的JavaDoc中這樣說:取一個字符串並將它轉換成普通Java變量名稱大寫

實用方法。這通常意味着將第一個字符從大寫字母轉換爲小寫字母,,但在(不常見)特殊情況下,如果有多個字符且第一個字符和第二個字符都是大寫字母,則我們將其單獨留爲。 因此,「FooBah」變成「fooBah」,「X」變成「x」,但「URL」保持爲「URL」。

執行是否違反規範還是我誤解了某些東西?

回答

6

這是由參考實現中的bug造成的。看起來它不會因爲它會導致的兼容性問題而被修復。解決方法是用@XmlRootElement明確指定名稱。

+0

好信息 – chris 2011-02-23 23:40:52

相關問題