Я использую JAXB (версия, включенная в JDK 6) для маршалинга объектов в XML.Следующий фрагмент кода дает неожиданные результаты:
public class JAXBTest {
@XmlRootElement
public static class VIPPerson {}</p>
<pre><code> 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 , в которой указано
имя класса: имя класса сопоставляется с именем XML с помощью капитализации с использованиемjava.beans.Introspector.decapitalize (имя класса).
JavaDoc для этого decapitalize
метода говорит следующее:
Служебный метод, чтобы взять строку и преобразовать еек обычной заглавной букве имени переменной Java.Обычно это означает преобразование первого символа из верхнего регистра в нижний регистр, , но в (необычном) особом случае, когда имеется более одного символа, а первый и второй символы - в верхнем регистре, мы оставляем его в покое ,Таким образом, «FooBah» становится «fooBah», а «X» становится «x», но «URL» остается как «URL».
Реализация нарушает спецификацию или я что-то неправильно понимаю?