我想配置JAXB,以便它修剪所有字符串字段上的空格
我看到了以下答案:How to configure JAXB so it trims whitespaces when unmarshalling tag value?
但我不想根据建议的答案注释所有字符串字段
@XmlElement(required=true)
@XmlJavaTypeAdapter(MyNormalizedStringAdapter.class)
String name;
谢谢!
答案 0 :(得分:28)
创建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();
}
}
在package-info.java
。
com.foo.bar
个文件
将以下内容添加到package-info.java
文件
@XmlJavaTypeAdapter(value=StringTrimAdapter.class,type=String.class)
package com.foo.bar;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
StringTrimAdapter
应用于String
中的所有 com.foo.bar
字段,而无需任何额外注释。 修改强>
请注意,如果包级别注释过于庞大,您可以始终将@XmlJavaTypeAdapter
注释应用于类。
答案 1 :(得分:8)
值得一提的是,除了编写执行修剪的XmlAdapter
之外,您还可以将XJC配置为在生成的代码中实际使用此适配器。如何做的一个例子:
<jaxb:globalBindings>
<xjc:javaType
name="java.lang.String"
xmlType="xs:string"
adapter="com.foo.bar.StringTrimAdapter"/>
</jaxb:globalBindings>
答案 2 :(得分:0)
要完成配置XJC (in the answer provided by Lukas Eder)
的示例,
我想添加以下示例配置,我们需要在maven的pom.xml中添加
<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>
我们需要在bindings.xjb
中添加以下内容。
<jaxb:globalBindings>
<xjc:javaType
name="java.lang.String"
xmlType="xs:string"
adapter="com.foo.bar.StringTrimAdapter"/>
</jaxb:globalBindings>