<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://..." targetNamespace="http://..." elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.0"> <xs:element name="foo" type="Xyz" /> <xs:complexType name="Xyz"> <xs:sequence> ... </xs:sequence> </xs:complexType> </xs:schema>In maven, you can use the following to generate the java classes from the xsd file in the build process.
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.7.3</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<generatePackage>your.package</generatePackage>
<schemaDirectory>path.of.folder.of.xsd</schemaDirectory>
</configuration>
</plugin>
To marshal a java object to XML, and validate
Note that depending on whether an element is defined as a root element or not, the marshal/unmarshal code can be different. The following code is for the XSD defined above.
public String marshall(Xyz fooObj) throws JAXBException,
SAXException {
JAXBElement xmlMsg = new your.dir.ObjectFactory()
.createXyz(fooObj);
JAXBContext jaxbContext = JAXBContext.newInstance(Xyz.class);
Marshaller marshaller = jaxbContext.createMarshaller();
// valiate that the data in the object conforms to the schema
SchemaFactory schemaFactory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
URL xsdUrl = getClass().getClassLoader().getResource(
"schemas/your.xsd"); // schemas/your.xsd needs to be in the classpath
Schema schema = schemaFactory.newSchema(xsdUrl);
marshaller.setSchema(schema); // this enables the validation
StringWriter sw = new StringWriter();
marshaller.marshal(xmlMsg, sw);
return sw.toString();
}
To unmarshal from XML to a java object
JAXBContext jaxbContext = JAXBContext
.newInstance(your.dir.ObjectFactory.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
String msg = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><foo xmlns=...>...</foo>";
StringReader reader = new StringReader(msg);
// validate if the message conforms to the schema
SchemaFactory schemaFactory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
URL xsdUrl = getClass().getClassLoader().getResource(
"schemas/your.xsd"); // schemas/your.xsd needs to be in the classpath
Schema schema = schemaFactory.newSchema(xsdUrl);
jaxbUnmarshaller.setSchema(schema); // this enables the validation
JAXBElement elem = (JAXBElement) jaxbUnmarshaller.unmarshal(reader);
Xyz fooObj = (Xyz) elem.getValue();
