Nach einigen Experimenten scheint es keinen Weg, um JAXB zu konfigurieren richtig primitive Zeichen zu behandeln. Es fällt mir allerdings schwer, das zu akzeptieren.
Ich habe versucht, eine XmlAdaptor
zu definieren, um es in eine Zeichenfolge zu versuchen und zu erzwingen, aber die Laufzeit scheint nur Adapter zu akzeptieren, die mit Objekttypen, nicht mit Primitiven versehen sind.
Die einzige Abhilfe, die ich denken kann, ist das Zeichen Feld mit @XmlTransient
zu markieren, und dann Getter und Setter schreiben, die den Wert als String erhalten und eingestellt:
@XmlTransient
char gender = 'M';
@XmlElement(name="gender")
public void setGenderAsString(String gender) {
this.gender = gender.charAt(0);
}
public String getGenderAsString() {
return String.valueOf(gender);
}
Nicht sehr schön, ich werde gewähre dir, aber kurz davor, dein Charfeld zu einem String zu ändern, das ist alles was ich habe.
Speichern Sie Geschlecht nicht als ein Zeichen und verwenden Sie stattdessen eine 'enum'. Es ist nicht nur viel typsicherer, sondern man kann es auch nach Belieben abbilden ;-) –
@Joachim Sauer: Du hast recht, wenn du sagst, dass Enum eine bessere Option wäre, das Geschlecht zu speichern. Aber ich erkunde die Möglichkeiten von JAXB. Und ich bin stur, also dachte ich, es muss eine Lösung mit char: -p geben – Korenaga
Dies ist ein Fehler in einer bestimmten Implementierung von JAXB (Metro), andere Implementierungen von JAXB (EclipseLink MOXy) Marshal Char korrekt. –