We are going to validate XML using XSD schema in Java. We will create XML Schema using XSD and then use same schema to create the XML file. Then we will write our code to validate this XML against same schema.
XSD Schema creation
Below is our schema where we are defining the Schema for XML elements. In this schema we creating two elements, one for request and another for response. We are publishing this schema using targetNamespace which we will use during XML creation.<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.ttj.com/hello-service" targetNamespace="http://services.ttj.com/hello-service" elementFormDefault="qualified"> <xs:element name="sayHelloRequest"> <xs:complexType> <xs:sequence> <xs:element name="userName" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="sayHelloResponse"> <xs:complexType> <xs:sequence> <xs:element name="message" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XML creation using schema
In below XML we are using the above schema to create the request element. In below XML we are using the XSD schema which we published using targetNamspace and same namespace we will use here.<sayHelloRequest xmlns="http://services.ttj.com/hello-service"> <userName>Black smith</userName> </sayHelloRequest>
Validating XML against schema
Below is our code where we are using Java API to validate the XML request using XSD schema.import javax.xml.XMLConstants; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import java.io.File; public class ValidateXmlMain { public static void main(String[] args){ String xsdSchemaLoc = "/Users/ttj/My_blogs_workspace/resources/hello-service-schema.xsd"; String xmlFileLoc = "/Users/ttj/My_blogs_workspace/resources/hello-service-request.xml"; try { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = factory.newSchema(new File(xsdSchemaLoc)); Validator validator = schema.newValidator(); validator.validate(new StreamSource(new File(xmlFileLoc))); System.out.println("Validated successfully."); }catch(Exception e){ System.out.println("Validation failed..."); e.printStackTrace(); } } }
Validate XML request with schema namespace
Now if we run this code it will validate the XML successfully and will print below result.Validated successfully.If you remove the XML namespace from XML request then you may get below error which you can fix by adding the namespace back to XML.
org.xml.sax.SAXParseException; systemId: file:/Users/ttj/My_blogs_workspace/resources/hello-service-request.xml; lineNumber: 1; columnNumber: 18; cvc-elt.1: Cannot find the declaration of element 'sayHelloRequest'. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
Comments
Post a Comment