When generating beans from dtd with xjc default values are in getter methods

187 Views Asked by At

I use xjc to create objects from dtd.

xjc -dtd mydtd.dtd -d src

But I confused about default values...

In dtd file I have an element like below:

<!ELEMENT ImageOrder (Target, Format, Source, Output, Rules?, VolumeName?, PVDInfo?, Controls?, Customize?)>
<!ATTLIST ImageOrder
    OrderId CDATA #REQUIRED
    ClientId CDATA #REQUIRED
    Priority (Low | Normal | High) "Normal"
    StreamerExternal (true | false) "false"
    StreamerLogonId CDATA #IMPLIED>

And xjc creates object like below:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "target",
    "format",
    "source",
    "output",
    "rules",
    "volumeName",
    "pvdInfo",
    "controls",
    "customize"
})
@XmlRootElement(name = "ImageOrder")
public class ImageOrder {

    @XmlAttribute(name = "OrderId", required = true)
    @XmlJavaTypeAdapter(NormalizedStringAdapter.class)
    protected String orderId;
    @XmlAttribute(name = "ClientId", required = true)
    @XmlJavaTypeAdapter(NormalizedStringAdapter.class)
    protected String clientId;
    @XmlAttribute(name = "Priority")
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    protected String priority;
    @XmlAttribute(name = "StreamerExternal")
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    protected String streamerExternal;
.
.
.
.
.
    public String getPriority() {
        if (priority == null) {
            return "Normal";
        } else {
            return priority;
        }
    }

.
.
.
public String getStreamerExternal() {
        if (streamerExternal == null) {
            return "false";
        } else {
            return streamerExternal;
        }
    }

And I want to marshal a new ImageOrder instance. But when marshalling the default values are not set. I want to marshal with default values. How can I do this.

ImageOrder imageOrder = new ImageOrder();
imageOrder.setOrderId("orderId");
imageOrder.setClientId("clientId");

JAXBContext context = JAXBContext.newInstance(ImageOrder.class);
StringWriter stringWriter = new StringWriter();
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-16");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);
marshaller.marshal(obj, stringWriter);

Expected xml:

<ImageOrder ClientId="clientId" OrderId="orderId" Priority="Normal" StreamerExternal="false">
</ImageOrder>

But get this:

<ImageOrder ClientId="clientId" OrderId="orderId">
</ImageOrder>
0

There are 0 best solutions below