barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 23 ноября 2012 г.

JAXB: trim текстового содержимого тегов при unmarshal

Для выполнения неких операций над текстовым содержимым тегов в XML-документе при его анмаршаллинге, предназначены XML-адаптеры, т.е. классы, наследуемые от javax.xml.bind.annotation.adapters.XmlAdapter. Для выполнения trim такой адаптер выглядит так (он выполняет trim как при маршаллинге, так и при анмаршаллинге):
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();
    }
}
 Подключать адаптер можно как на уровне элемента:
@XmlElement(required=true)
@XmlJavaTypeAdapter(StringTrimAdapter.class)
String name;
, так и на уровне пакета, если требуется навесить адаптер на все классы пакета. Последнее выполняется в package-info.java этого пакета:
@XmlJavaTypeAdapter(value=StringTrimAdapter.class,type=String.class)
package my.package;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import my.package.adapters.StringTrimAdapter;
(здесь адаптер вышается на классы пакета my.package, а сам адаптер расположен в пакете my.package.adapters)


Комментариев нет:

Отправить комментарий