2008-12-11 11 views
10

Wie JAXB Unmarshaller konfigurieren, so wird es führende und nachfolgende Leerzeichen von Zeichenfolgen trimmen?Wie konfiguriert man JAXB so, dass es Whitespaces abschneidet, wenn der Tag-Wert unmarshaliert wird?

Zum Beispiel wollen wir eine einfache Bindung zwischen einer Java Bean und XML prüfen, mit JAXB Anmerkungen:

@XmlRootElement(name="bean") 
class Bean { 

    @XmlElement(required=true) 
    String name; 

    @XmlElement(required=true) 
    int number; 
} 

Ich möchte in der Lage sein zu Abstellungs XML gegeben unten so bean.name nicht enthalten beginnt und Nachgestellte Leerzeichen - ist "Mein Name", nicht "\ n Mein Name \ n".

+0

leider XML-Parser behandelt, dass als „signifikant“ Leerzeichen, wenn Sie Ihre Ausgabe ohne Zeilenumbrüchen formatiert werden kann wäre einfacher, als alle anderen Reifen. .. –

Antwort

6

eine benutzerdefinierte Adapter Klasse. Ich dachte, dass NormalizedStringAdapter würde die Arbeit tun, aber es ist nur für das Unmarshalling und es tut sowieso nicht was Sie wollen.

public class MyNormalizedStringAdapter extends XmlAdapter<String, String> { 

    @Override 
    public String marshal(String text) { 
     return text.trim(); 
    } 

    @Override 
    public String unmarshal(String v) throws Exception { 
     return v.trim(); 
    } 
} 

dann schmücken das Feld mit Ihrem Adapter wie folgt aus:

@XmlElement(required=true) 
@XmlJavaTypeAdapter(MyNormalizedStringAdapter.class) 
String name; 
+0

Gibt es eine andere Möglichkeit, das zu erreichen, ohne einen benutzerdefinierten XmlAdapter zu machen? – tkokoszka

+3

Kann es sein, dass der NormalizedStringAdapter vollständig defekt ist? Es besagt, dass es führende und nachfolgende Leerzeichen entfernt (siehe Javadoc), aber in der Tat nicht! – Kutzi

+0

@Kutzi Ja, entweder die Dokumentation oder die Implementierung ist falsch. Alles was es tut, ist Tabulator, lf und cr Zeichen mit einem Leerzeichen zu ersetzen. – Kapep