如何配置JAXB,以便默认情况下修剪空格

我想配置JAXB,以便它修剪所有字符串字段上的空格

我看到以下答案: 如何配置JAXB,以便在解组标记值时修剪空格?

但我不想根据建议的答案注释所有字符串字段

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

谢谢!

  1. 创建一个XmlAdapter 。

     package com.foo.bar; public class StringTrimAdapter extends XmlAdapter { @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. com.foo.bar创建package-info.java文件。

  3. 将以下内容添加到package-info.java文件中

     @XmlJavaTypeAdapter(value=StringTrimAdapter.class,type=String.class) package com.foo.bar; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 
  4. 这将把StringTrimAdapter应用于com.foo.bar 所有 String字段, com.foo.bar需要任何额外的注释。

编辑
请注意,如果包级别注释过于庞大,您可以始终将@XmlJavaTypeAdapter注释应用于类。

值得一提的是,除了编写执行修剪的XmlAdapter之外,您还可以将XJC配置为在生成的代码中实际使用此适配器。 如何做到的一个例子:

    

上面的例子使用Sahil的答案中给出的XmlAdapter

为了完成配置XJC的示例(in the answer provided by Lukas Eder) ,我想添加以下示例配置,我们需要在maven的pom.xml中添加

   . .  responseSchema  xjc  generate-sources  false ${project.basedir}/src/main/java com.foo.bar.domain.response ../resources/bindings.xjb ${project.basedir}/src/main/resources/wsdl/xsd response.xsd true   . .  

我们需要在bindings.xjb添加以下内容。