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

Java JAXB如何将类名映射到XML元素名?,java,jaxb,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()

我正在使用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());
    }
}
上面的输出是


我希望看到类名称映射到
VIPPerson
元素,而不是基于中的第8.12.1节的
VIPPerson
,其中

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

去资本化
方法的JavaDoc如下所示:

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

该实现是否违反了规范或我误解了什么?

这是由参考实现中的错误引起的。由于可能导致的兼容性问题,它看起来无法修复。解决方法是使用
@XmlRootElement
显式指定名称

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