JAXB如何将类名映射到XML元素名称?

Pat*_*iak 3 java jaxb

我正在使用JAXB(JDK 6中包含的版本)将对象编组为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());
    }
}
Run Code Online (Sandbox Code Playgroud)

以上的输出是

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<vipPerson/>
Run Code Online (Sandbox Code Playgroud)

我希望看到类名映射到VIPPerson元素而不是vipPerson基于JAXB规范中的 8.12.1节,

类名:使用java.beans.Introspector.decapitalize(类名)通过de capitalization将类名映射到XML名称.

decapitalize方法的JavaDoc 说明了这一点:

获取字符串并将其转换为普通Java变量名称大小写的实用方法.这通常意味着将第一个字符从大写转换为小写,但在(异常)特殊情况下,当有多个字符并且第一个和第二个字符都是大写时,我们不管它.因此,"FooBah"变为"fooBah","X"变为"x",但"URL"保持为"URL".

实施是违反规范还是我误解了什么?