我正在使用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".
实施是违反规范还是我误解了什么?