JAXB Marshaller不希望值为null或空的元素

时间:2017-09-12 10:07:38

标签: java jaxb

当我使用JAXB时,我不想要空的XML balise。

POJO代码:

@XmlRootElement(name = "LIGNE")
public class Ligne {

    private String rideCount;

    @XmlElement(name = "NB_TRAJET")
    public String getRideCount() {
        return rideCount;
    }

    public void setRideCount(String rideCount) {
        this.rideCount = rideCount;
    }
}

JAXB代码:

public String jaxbMoReportsObjectToXML(MoReports moReports) {
    String xmlString = "";
    try {
        JAXBContext context = JAXBContext.newInstance(MoReports.class);
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        StringWriter sw = new StringWriter();
        m.marshal(moReports, sw);
        xmlString = sw.toString();
     } catch (JAXBException e) {
        throw new TechnicalException(e.getMessage());
     }
     return xmlString;
}

package-info代码:

@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(value = StringAdapter.class, type = String.class) })
package com.rivasi.business.aipenet.bean;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;

StringAdapter代码:

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class StringAdapter extends XmlAdapter<String, String> {

    @Override
    public String unmarshal(String v) throws Exception {
        return v;
    }

    @Override
    public String marshal(String v) throws Exception {
        if ("".equals(v)) {
            return null;
        }
        return v;
    }

}

我找到了一个解决方案:

<LIGNES>
    <LIGNE>
        <NB_TRAJET/>
    </LIGNE>
    <LIGNE>
        <NB_TRAJET>ZONE3</NB_TRAJET>
    </LIGNE>
    <LIGNE>
        <NB_TRAJET/>
    </LIGNE>
    <LIGNE>
        <NB_TRAJET/>
    </LIGNE>
    <LIGNE>
        <NB_TRAJET/>
    </LIGNE>
</LIGNES>

<LIGNES>
    <LIGNE>
        <NB_TRAJET></NB_TRAJET>
    </LIGNE>
    <LIGNE>
        <NB_TRAJET>ZONE3</NB_TRAJET>
    </LIGNE>
    <LIGNE>
        <NB_TRAJET></NB_TRAJET>
    </LIGNE>
    <LIGNE>
        <NB_TRAJET></NB_TRAJET>
    </LIGNE>
    <LIGNE>
        <NB_TRAJET></NB_TRAJET>
    </LIGNE>
</LIGNES>

但我想:

<LIGNES>
    <LIGNE>
        <NB_TRAJET>ZONE3</NB_TRAJET>
    </LIGNE>
</LIGNES>

0 个答案:

没有答案