После нескольких экспериментов, кажется, нет никакого способа, чтобы настроить JAXB обрабатывать примитивные символы правильно. Тем не менее, мне сложно его принять.
Я попытался определить XmlAdaptor
, чтобы попытаться принудить его к String, но среда исполнения, похоже, принимает только адаптеры, аннотированные по типам объектов, а не примитивам.
Единственный способ решения проблемы я могу думать о том, чтобы отметить поле обугленного с @XmlTransient
, а затем написать методы получения и установки, которые получают и установить значение в виде строки:
@XmlTransient
char gender = 'M';
@XmlElement(name="gender")
public void setGenderAsString(String gender) {
this.gender = gender.charAt(0);
}
public String getGenderAsString() {
return String.valueOf(gender);
}
Не очень приятно, я дайте вам, но не измените свое поле char на String, вот и все, что у меня есть.
Не храните пол как символ и вместо него используйте 'enum'. Мало того, что это гораздо более безопасный тип, но вы также можете отобразить его, но вы хотите ;-) –
@Joachim Sauer: Вы правы, говоря, что enum будет вариантом beter для хранения пола. Но я изучаю возможности JAXB. И я упрямый, поэтому я просто решил, что должно быть решение использовать char: -p – Korenaga
Это ошибка в одной конкретной реализации JAXB (Metro), а также другие реализации маркера JAXB (EclipseLink MOXy). –