Тег не удаляется из XML даже после возврата нулевого значения из XmlAdapter в JAXB - PullRequest
0 голосов
/ 31 августа 2018
  1. Я хочу удалить пустой тег из XML.

Amit

Итак, в приведенном выше примере XML lastName является пустым и в настоящее время представлено пустыми тегами в XML. Но я хочу XML в следующем формате:

Amit

  1. Итак, расширен XmlAdapter, как показано ниже:

    package com.jaxb.domain;
    import javax.xml.bind.annotation.adapters.XmlAdapter;
    
    import org.springframework.util.StringUtils;
    
    public class NullifyAdapter extends XmlAdapter<String, String> {
    
      @Override
      public String unmarshal(String strValue) throws Exception {
        // TODO Auto-generated method stub
        return strValue;
      }
    
      @Override
      public String marshal(String strValue) throws Exception {
        if (StringUtils.isEmpty(strValue)) {
          return null;
        }
        return strValue;
      }
    
    }
    
  2. Зарегистрируйте уровень пакета в package-info.java, как показано ниже:

    @XmlJavaTypeAdapters({
    @XmlJavaTypeAdapter(value=NullifyAdapter.class, type=String.class)
    })
    package com.jaxb.domain;
    
    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
    
  3. После вышеуказанных изменений сгенерированный XML выглядит следующим образом:

Amit

  1. В моем классе привязки jaxb поле определено как:

    @XmlElement(name = "LastName")
    protected String lastName;
    

Подскажите пожалуйста, как полностью удалить lastName? Есть много полей, которые мне нужно удалить, поэтому я хочу найти решение в похожих строках.

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете установить определение элемента XML LastName с помощью required=true.
Это приведет к тому, что сгенерированное свойство lastName будет помечено @XmlAttribute(required=true).
Таким образом, JAXB не сериализует элемент, если он нулевой.

...