tags:

views:

1239

answers:

1

How to configure JAXB unmarshaller so it will trim leading and trailing whitespaces from strings?

For instance let's consider a simple binding between a Java bean and XML using JAXB annotations:

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

  @XmlElement(required=true)
  String name;

  @XmlElement(required=true)
  int number;
}

I would like to be able to unmarshal XML given bellow so bean.name does not include starting and trailing whitespaces - is "My name", not "\n My name\n ".

<bean>
  <name>
    My name
  </name>
  <number>1</number>
</bean>
+1  A: 

Use a custom Adapter class. I was thinking that NormalizedStringAdapter would do the work but it's only for unmarshaling and it doesn't do what you want anyway.

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

then decorate the field with your adapter like this:

@XmlElement(required=true)
@XmlJavaTypeAdapter(MyNormalizedStringAdapter.class)
String name;
bruno conde
Is there any other way of achieving that without making a custom XmlAdapter?
tkokoszka