Java JAXB如何将类名映射到XML元素名?
我正在使用JAXB(JDK 6附带的版本)将对象打包成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()
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/>