Я использую JAXB (версия, включенная в JDK 6) для сортировки объектов в XML. Следующий фрагмент кода дает неожиданные результаты: Как JAXB сопоставляет имя класса с именем элемента 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
на основании раздела 8.12 .1 в JAXB specification, в котором указывается
имя класса: имя класса сопоставляется с именем XML путем капитализации с использованием java. beans.Introspector.decapitalize (имя класса).
JavaDoc для этого decapitalize
метода говорит это: метод Utility
взять строку и преобразовать его в обычный Java имя переменной капитализации. Это обычно означает преобразование первого символа из верхнего регистра в нижний регистр, , но в (необычном) специальном случае, когда имеется более одного символа, а первый и второй символы - в верхнем регистре, мы оставляем его в покое. Таким образом, «FooBah» становится «fooBah», а «X» становится «x», но «URL» остается «URL».
Выполняет ли реализация нарушение спецификации или я что-то не понимаю?
Хорошая информация – chris