Reputation: 1376
i am attempting to validate incoming XML string [Data type, Mandatory, Length Validation].
First i convert incoming xml to respective Java POJO object by using JAXB i need to use JAXB validation when unmarshalling. My incoming xml string looks like.
<Message>
<Body>
<Id></Id> // This is Mandatory field but incoming value is empty also it is integer field
<Name>Siva</Name> // Input is valid
<Age>ss</Age> // This is integer fields but incoming value is string
<Mobile>999999999999999</Mobile> // length should be 10.. but is is exceeded
</Body>
</Message>
My XSD is :
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Mobile">
<xs:simpleType>
<xs:restriction base="xs:long">
<xs:minLength value="10"/>
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:int" name="Id" minOccurs="1"/>
<xs:element type="xs:string" name="Name"/>
<xs:element type="xs:string" name="Age"/>
<xs:element type="xs:long" name="Mobile"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
My JAXB Java code:
JAXBContext context = JAXBContext.newInstance(Employee.class);
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("resources/Employee.xsd"));
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setSchema(schema);
unmarshaller.setEventHandler(new EmployeeValidationEventHandler());
Employee employee = (Employee) unmarshaller.unmarshal(new File("resources/Employee.xml"));
i tried everything but it is not works for me. Please help me someone.
Upvotes: 0
Views: 1483
Reputation: 323
For mobile element, there is no right type referencing in your XSD. Try it like this.
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:int" name="Id" minOccurs="1"/>
<xs:element type="xs:string" name="Name"/>
<xs:element type="xs:string" name="Age"/>
<xs:element name="Mobile">
<xs:simpleType>
<xs:restriction base="xs:long">
<xs:minLength value="10"/>
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Upvotes: 1