[英]JAXB java class generation from schema: how to get a custom XML element name (keep class name)
[英]How does JAXB map a class name to an XML element name?
我正在使用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());
}
}
以上的輸出是
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <vipPerson/>
我期望看到類名映射到VIPPerson
元素而不是vipPerson
基於JAXB規范中的 8.12.1節,
類名:使用java.beans.Introspector.decapitalize(類名)通過de capitalization將類名映射到XML名稱。
該decapitalize
方法的JavaDoc說:
獲取字符串並將其轉換為普通Java變量名稱大小寫的實用方法。 這通常意味着將第一個字符從大寫轉換為小寫, 但在(異常)特殊情況下,當有多個字符並且第一個和第二個字符都是大寫時,我們不管它 。 因此,“FooBah”變為“fooBah”,“X”變為“x”,但“URL”保持為“URL”。
實施是違反規范還是我誤解了什么?
這是由參考實現中的錯誤引起的。 看起來它不會被修復,因為它會導致兼容性問題。 解決方法是使用@XmlRootElement
顯式指定名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.