2008-12-11 8 views
10

¿Cómo configurar JAXB unmarshaller para que recorte los espacios en blanco iniciales y finales de las cadenas?¿Cómo configurar JAXB para que recorte los espacios en blanco al desmarcar el valor de la etiqueta?

Por ejemplo, consideremos una unión sencilla entre un bean Java y XML utilizando JAXB anotaciones:

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

    @XmlElement(required=true) 
    String name; 

    @XmlElement(required=true) 
    int number; 
} 

Me gustaría ser capaz de XML unmarshal dada abajo de modo bean.name no incluye el arranque y trailing whitespaces - es "Mi nombre es", no "\ n Mi nombre \ n".

+0

desafortunadamente analizador XML trata como un espacio en blanco "significativa" si se puede formatear la salida sin saltos de línea sería más fácil que todos los otros aros. .. –

Respuesta

6

Utilice un adaptador personalizado clase. Pensaba que NormalizedStringAdapter haría el trabajo, pero es solo para desasociar y no hace lo que quieres de todos modos.

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(); 
    } 
} 

luego decorar el campo con su adaptador de la siguiente manera:

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

¿Hay alguna otra forma de lograr eso sin hacer un XmlAdapter personalizado? – tkokoszka

+3

¿Puede ser que el NormalizedStringAdapter está totalmente roto? Dice que elimina los espacios en blanco iniciales y finales (ver javadoc), pero de hecho no es así. – Kutzi

+0

@Kutzi Sí, la documentación o la implementación es incorrecta. Todo lo que hace es reemplazar los caracteres tab, lf y cr con un espacio. – Kapep

Cuestiones relacionadas