如何配置JAXB以便在解组标记值时修剪空格?

时间:2008-12-11 13:22:17

标签: java xml jaxb

如何配置JAXB unmarshaller,以便从字符串中修剪前导空格和尾随空格?

例如,让我们考虑使用JAXB注释在Java bean和XML之间进行简单的绑定:

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

  @XmlElement(required=true)
  String name;

  @XmlElement(required=true)
  int number;
}

我希望能够解析下面给出的XML,因此 bean.name 不包括起始和尾随空格 - 是“我的名字”,而不是“ \ n我的名字\ n “。

<bean>
  <name>
    My name
  </name>
  <number>1</number>
</bean>

2 个答案:

答案 0 :(得分:6)

使用自定义适配器类。我当时认为NormalizedStringAdapter会做这项工作,但这只是为了解组,而且无论如何都不能做你想做的事。

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

然后使用适配器装饰字段,如下所示:

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

答案 1 :(得分:1)

要在解组期间删除开头和结尾的空格,可以使用适配器CollapsedStringAdapter(自Java 1.6开始)。

内置XmlAdapter以处理xs:token及其派生类型。这个 适配器删除开头和结尾的空格,然后截断任何空格 制表符,CR,LF和SP的序列由单个空格字符''组成。

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