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!
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(); } }
Cree un archivo
com.foo.bar
encom.foo.bar
.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;
- Esto aplicará
StringTrimAdapter
a todos los camposString
encom.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