2011-02-23 97 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

相关问题