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>