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

时间:2011-02-23 21:29:11

标签: 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());
    }
}

上面的输出是

    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());
    }
}

根据JAXB specification中的第8.12.1节,我希望看到类名映射到<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <vipPerson/> 元素而不是VIPPerson

  

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

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

  

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

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

1 个答案:

答案 0 :(得分:6)

这是由参考实现中的bug引起的。看起来它不会被修复,因为它会导致兼容性问题。解决方法是使用@XmlRootElement显式指定名称。