我使用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”。
实施是否违反规范或我误解了什么?