parse online cast bean java xml jaxb trim

java - online - Cómo configurar JAXB para que recorte los espacios en blanco de forma predeterminada



xml to java object jaxb online (3)

Me gustaría configurar JAXB para que recorta espacios en blanco en todos los campos de cadena

Vi la siguiente respuesta: ¿Cómo configurar JAXB para que recorte los espacios en blanco al desmarcar el valor de la etiqueta?

Pero no quiero tener que anotar todos los campos de cadena según la respuesta sugerida

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

¡Gracias!


  1. Crea un XmlAdapter .

    package com.foo.bar; public class StringTrimAdapter extends XmlAdapter<String, String> { @Override public String unmarshal(String v) throws Exception { if (v == null) return null; return v.trim(); } @Override public String marshal(String v) throws Exception { if (v == null) return null; return v.trim(); } }

  2. Cree un archivo com.foo.bar en com.foo.bar .

  3. Agregue lo siguiente al archivo package-info.java

    @XmlJavaTypeAdapter(value=StringTrimAdapter.class,type=String.class) package com.foo.bar; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

  4. Esto aplicará StringTrimAdapter a todos los campos String en com.foo.bar sin anotaciones adicionales.

EDITAR
Tenga en cuenta que si la anotación de nivel de paquete es demasiado amplia para usted, siempre puede aplicar una anotación @XmlJavaTypeAdapter a las clases.


Para completar el ejemplo de configuración de XJC (in the answer provided by Lukas Eder) , me gustaría agregar la siguiente configuración de muestra que debemos agregar en pom.xml de maven

<build> . . <execution> <id>responseSchema</id> <goals> <goal>xjc</goal> </goals> <phase>generate-sources</phase> <configuration> <clearOutputDir>false</clearOutputDir> <outputDirectory>${project.basedir}/src/main/java</outputDirectory> <packageName>com.foo.bar.domain.response</packageName> <bindingFiles>../resources/bindings.xjb</bindingFiles> <schemaDirectory>${project.basedir}/src/main/resources/wsdl/xsd</schemaDirectory> <schemaFiles>response.xsd</schemaFiles> <extension>true</extension> </configuration> </execution> . . </build>

Necesitamos tener el siguiente contenido para ser agregado en bindings.xjb .

<jaxb:globalBindings> <xjc:javaType name="java.lang.String" xmlType="xs:string" adapter="com.foo.bar.StringTrimAdapter"/> </jaxb:globalBindings>


Vale la pena mencionar que, además de escribir un XmlAdapter , que realiza el recorte, puede configurar XJC para que realmente use este adaptador en el código generado. Un ejemplo de cómo hacerlo:

<jaxb:globalBindings> <xjc:javaType name="java.lang.String" xmlType="xs:string" adapter="com.foo.bar.StringTrimAdapter"/> </jaxb:globalBindings>

El ejemplo anterior usa el XmlAdapter dado en la respuesta de Sahil