Po kilku eksperymentach, nie wydaje się być w żaden sposób skonfigurować JAXB obsłużyć prymitywne znaki poprawnie. Jednak ciężko mi to zaakceptować.
Próbowałem zdefiniować XmlAdaptor
, aby wypróbować i przymusić go do łańcucha, ale środowisko wykonawcze wydaje się akceptować tylko adaptery przypisane do typów obiektów, a nie do prymitywów.
Jedyne obejście można myślę o to, aby zaznaczyć pole char z @XmlTransient
, a następnie napisać pobierające i ustawiające, które pobrać i ustawić wartość jako ciąg znaków:
@XmlTransient
char gender = 'M';
@XmlElement(name="gender")
public void setGenderAsString(String gender) {
this.gender = gender.charAt(0);
}
public String getGenderAsString() {
return String.valueOf(gender);
}
nie bardzo miły, będę przyznaję, ale bez zmiany twojego char pola na String, to wszystko, co mam.
Nie przechowuj płci jako char i zamiast niej użyj "wyliczenia". Jest nie tylko bardziej bezpieczny w użyciu, ale można go również mapować, jak chcesz ;-) –
@Joachim Sauer: Masz rację, mówiąc, że enum byłoby lepszym rozwiązaniem do przechowywania płci. Ale badam możliwości JAXB. I jestem uparty, więc pomyślałem, że musi istnieć rozwiązanie użycia char :-p – Korenaga
To jest błąd w jednej konkretnej implementacji JAXB (Metro), inne implementacje JAXB (EclipseLink MOXy) marszałek poprawnie. –