如何代表与JAXB空元素空值

2025-03-25 20:15:54
推荐回答(1个)
回答1:

  package forum11743306;

import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.datatype.XMLGregorianCalendar;

public class DateAdapter extends XmlAdapter{

@Override
public AdaptedDate marshal(XMLGregorianCalendar date) throws Exception {
AdaptedDate adaptedDate = new AdaptedDate();
adaptedDate.value = date;
return adaptedDate;
}

@Override
public XMLGregorianCalendar unmarshal(AdaptedDate adaptedDate) throws Exception {
return adaptedDate.value;
}

public static class AdaptedDate {
@XmlValue
public XMLGregorianCalendar value;
}

}

根 该XmlAdapter是@XmlJavaTypeAdapter注解。package forum11743306;

import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.datatype.XMLGregorianCalendar;

@XmlRootElement
public class Root {

private XMLGregorianCalendar xyzDate;

@XmlElement(name = "XYZDate", required=true, nillable = true)
@XmlJavaTypeAdapter(DateAdapter.class)
public XMLGregorianCalendar getXyzDate() {
return xyzDate;
}

public void setXyzDate(XMLGregorianCalendar xyzDate) {
this.xyzDate = xyzDate;
}

}

选项#2-使用MOXY的@XmlNullPolicy扩展 MOXY提供@XmlNullPolicy扩展,让你在你如何表示空的灵活性。package forum11743306;

import javax.xml.bind.annotation.*;
import javax.xml.datatype.XMLGregorianCalendar;

import org.eclipse.persistence.oxm.annotations.*;

@XmlRootElement
public class Root {

private XMLGregorianCalendar xyzDate;

@XmlElement(name = "XYZDate", required=true, nillable = true)
@XmlNullPolicy(emptyNodeRepresentsNull = true, nullRepresentationForXml = XmlMarshalNullRepresentation.EMPTY_NODE)
public XMLGregorianCalendar getXyzDate() {
return xyzDate;
}

public void setXyzDate(XMLGregorianCalendar xyzDate) {
this.xyzDate = xyzDate;
}

}