For example i have an xsd, and i want to generate an XML based on it using java. This is my xsd example, and i save it as “my.xsd”
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://tempuri.org/PurchaseOrderSchema.xsd"
targetNamespace="http://tempuri.org/PurchaseOrderSchema.xsd"
elementFormDefault="qualified">
<xsd:element name="PurchaseOrder" type="tns:PurchaseOrderType"/>
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:element name="ShipTo" type="tns:USAddress" maxOccurs="2"/>
<xsd:element name="BillTo" type="tns:USAddress"/>
</xsd:sequence>
<xsd:attribute name="OrderDate" type="xsd:date"/>
</xsd:complexType>
<xsd:complexType name="USAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="zip" type="xsd:integer"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
</xsd:complexType>
</xsd:schema>
Next step is generate java bean using xjc using below command
xjc -p com.edw.bean my.xsd
And it will gives below output,
parsing a schema... compiling a schema... com\edw\bean\ObjectFactory.java com\edw\bean\PurchaseOrderType.java com\edw\bean\USAddress.java com\edw\bean\package-info.java
Import those generated java files, and print a simple xml on console based on it.
package com.edw;
import com.edw.bean.ObjectFactory;
import com.edw.bean.PurchaseOrderType;
import com.edw.bean.USAddress;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.datatype.DatatypeFactory;
import java.math.BigInteger;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception {
new Main().doSomething();
}
private void doSomething() throws Exception {
PurchaseOrderType purchaseOrderType = new PurchaseOrderType();
USAddress address = new USAddress();
address.setCity("aaa");
address.setCountry("US");
address.setName("cccc");
address.setState("dddd");
address.setStreet("eee");
address.setZip(BigInteger.ONE);
purchaseOrderType.setBillTo(address);
purchaseOrderType.getShipTo().add(address);
purchaseOrderType.setOrderDate(DatatypeFactory.newInstance().newXMLGregorianCalendar(new Date().toInstant().toString()));
JAXBElement<PurchaseOrderType> element = new ObjectFactory().createPurchaseOrder(purchaseOrderType);
toXml(element);
}
private void toXml(JAXBElement<PurchaseOrderType> element) throws Exception {
JAXBContext ctx = JAXBContext.newInstance(PurchaseOrderType.class);
Marshaller marshaller = ctx.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(element, System.out);
}
}
It will print below output,
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PurchaseOrder xmlns="http://tempuri.org/PurchaseOrderSchema.xsd" OrderDate="2019-11-11Z">
<ShipTo country="US">
<name>cccc</name>
<street>eee</street>
<city>aaa</city>
<state>dddd</state>
<zip>1</zip>
</ShipTo>
<BillTo country="US">
<name>cccc</name>
<street>eee</street>
<city>aaa</city>
<state>dddd</state>
<zip>1</zip>
</BillTo>
</PurchaseOrder>
Final step is we can validate our generated xml with provided xsd, and see whether generated xml is valid.