Mega Code Archive

 
Categories / Java / XML
 

Use Marshal Validation

import java.io.File; import javax.xml.XMLConstants; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.ValidationEvent; import javax.xml.bind.ValidationEventHandler; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlValue; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; public class MarshalValidation {   public static void main(String[] args) throws Exception {     Person p = new Person();     p.setFirstName("B");     p.setLastName("H");     JAXBContext context = JAXBContext.newInstance(Person.class);     Marshaller marshaller = context.createMarshaller();     SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);     Schema schema = sf.newSchema(new File("person.xsd"));     marshaller.setSchema(schema);     marshaller.setEventHandler(new ValidationEventHandler() {       public boolean handleEvent(ValidationEvent event) {         System.out.println(event);         return false;       }     });     marshaller.marshal(p, System.out);   } } @XmlRootElement() @XmlType(name = "") // @XmlAccessorType(XmlAccessType.FIELD) class Person {   // @XmlAttribute()   private String firstName;   private PersonName friend;   private String lastName;   public String getFirstName() {     return firstName;   }   @XmlElement(nillable = true)   // @XmlElement(required=true)   public PersonName getFriend() {     return friend;   }   // @XmlValue()   // @XmlTransient   public String getLastName() {     return lastName;   }   public void setFirstName(String s) {     firstName = s;   }   public void setFriend(PersonName friend) {     this.friend = friend;   }   // r @XmlTransient   public void setLastName(String s) {     lastName = s;   } } @XmlRootElement @XmlAccessorType(XmlAccessType.NONE) class PersonName {   @XmlValue   private String value;   public String getValue() {     return value;   }   public void setValue(String value) {     this.value = value;   }   public static void main(String[] args) throws JAXBException {     PersonName pn = new PersonName();     pn.value = "foo";     JAXBContext context = JAXBContext.newInstance(PersonName.class);     context.createMarshaller().marshal(pn, System.out);   } }